一直在使用最近发布的支持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参数,但是当我尝试将所有属性都归零时.
最佳答案 所以这里的问题是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>",
因此,当解析运行时,它找不到任何字段,因此它返回null.这使得ValidateCertUrl方法失败.
我通过更新我的JSON字符串来验证这一点,从“URL”更改为“Url”,一切都开始工作.
我已经在GitHub上记录了一个问题.
https://github.com/aws/aws-sdk-net/issues/502
UPDATE
如果你看看GitHub问题,你会发现我遇到这个问题的原因是因为我使用了错误的库.所以不是bug,用户错误:(
拉进这个图书馆.
Amazon.Lambda.SNSEvents