c# – 解析AWS Lambda的SNS消息对象

一直在使用最近发布的支持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

点赞