一直在使用最近发布的支持C#lambdas的SDK。我有一个Lambda A发布的SNS主题设置。一切正常。现在我有Lambda B订阅了相同的主题。当我触发Lambda时,会触发Lambda B并传递JSON消息。问题是我似乎无法将JSON解析为Amazon.SimpleNotificationService.Util.Message类型。
我已经给了这个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的类型为“object”参数,它确实给了我“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参数,但是当我尝试将所有属性都归零时。
答案 0 :(得分:2)
因此,此处的问题是AWS SDK中用于解析消息的错误。这是&#34; parseMessage&#34;方法正在做(还有一些其他领域,但这些是有问题的)。注意结局是&#34; URL&#34; (全部上限)而不是&#34; Url&#34;
message.SigningCertURL = Message.ValidateCertUrl(func("SigningCertURL"));
message.SubscribeURL = func("SubscribeURL");
message.UnsubscribeURL = func("UnsubscribeURL");
以下是JSON中的内容
"SigningCertUrl": "<pem url here>",
"UnsubscribeUrl": "<unsub url here>",
因此,当解析运行时,它找不到任何字段,因此返回null。这使得ValidateCertUrl方法失败。
我通过更新我的JSON字符串来验证这一点,以便从&#34; URL&#34;更改到&#34; Url&#34;一切都开始有效了。
我已经在GitHub上记录了一个问题。 https://github.com/aws/aws-sdk-net/issues/502
<强>更新强> 如果你看看GitHub问题,你会发现我遇到这个问题的原因是因为我使用了错误的库。所以不是错误,用户错误:(
拉入此库。 Amazon.Lambda.SNSEvents