2016-12-04 112 views
4

已與最近發佈的支持C#lambda的SDK一起工作。我有一個Lambda A發佈的SNS主題設置。這一切工作正常。現在我有了訂閱同一主題的Lambda B.當我觸發Lambda時,觸發了一個Lambda B並傳遞了一條JSON消息。問題是我似乎無法將JSON解析爲Amazon.SimpleNotificationService.Util.Message類型。爲AWS分析SNS消息對象Lambda

我給了這個JSON。

{ 
"Records": [ 
{ 
    "EventSource": "aws:sns", 
    "EventVersion": "1.0", 
    "EventSubscriptionArn": "arn:.......", 
    "Sns": { 
    "Type": "Notification", 
    "MessageId": "ce4a1d7c-c50d-51ea-bfe8-4dc1078795fe", 
    "TopicArn": "arn:.......", 
    "Subject": null, 
    "Message": "test queue", 
    "Timestamp": "2016-12-04T07:05:46.709Z", 
    "SignatureVersion": "1", 
    "Signature": "<mysighere>", 
    "SigningCertUrl": "<pem url here>", 
    "UnsubscribeUrl": "<unsub url here>", 
    "MessageAttributes": {} 
    } 
    } 
] 
} 

所以我試圖做到這一點的代碼(其中MessageText中的類型是「對象」參數,它確實給我的只是「SNS」節點。

var j = Newtonsoft.Json.Linq.JObject.Parse(messageText.ToString()); 
var sns = jsonData["Records"][0]["Sns"]; 

Console.Write($"sns object: {sns}"); 
var message = Message.ParseMessage(sns.ToString()); 

但ParseMessage調用拋出一個錯誤說SigningCertUrl字段爲空我已經寫出了JSON到cloudwatch,我看到所有的字段已填充

我在哪裏偏離了這裏?我以爲Lambda序列化程序可能只是爲我解析Message參數,我試過所有的屬性null。

+0

什麼Console.Write的'輸出($ 「SNS對象:{} SNS」);' –

+0

?它將對象值保存在較大對象的sns節點......「類型」:「通知」, 「MessageId」:「ce4a1d7c-c50d-51ea-bfe8-4dc1078795fe」, 「TopicArn」 :「arn:.......」, 「Subject」:null, 「Message」:「test queue」, 「Timestamp」:「2016-12-04T07:05:46.709Z」, 「 SignatureVersion「:」1「, 」Signature「:」「, 」SigningCertUrl「:」「, 」UnsubscribeUrl「:」「, 」MessageAttributes「:{} } – ToddB

回答

2

所以這裏的問題是AWS SDK中解析消息的錯誤。這是「parseMessage」方法正在做什麼(還有一些其他字段,但這些是有問題的)。注意到底是怎麼「URL」(全部大寫),而不是「URL」

message.SigningCertURL = Message.ValidateCertUrl(func("SigningCertURL")); 
    message.SubscribeURL = func("SubscribeURL"); 
    message.UnsubscribeURL = func("UnsubscribeURL"); 

這裏是什麼在JSON時,解析運行

"SigningCertUrl": "<pem url here>", 
"UnsubscribeUrl": "<unsub url here>", 

所以沒有發現場,因此返回空值。這使得ValidateCertUrl方法失敗。

我通過更新我的JSON字符串以將其從「URL」更改爲「Url」並開始工作,從而對此進行了驗證。

我在GitHub上爲此記錄了一個問題。 https://github.com/aws/aws-sdk-net/issues/502

UPDATE 如果你看一下GitHub的問題,你會看到我碰到了,這是因爲我使用了錯誤的庫的原因。所以不是一個錯誤,用戶錯誤:(

在這個庫中取出 Amazon.Lambda.SNSEvents