gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:22:27 25 4
gpt4 key购买 nike

一直在使用最近发布的支持 C# lambda 的 SDK。我有一个 Lambda A 发布到的 SNS 主题设置。一切正常。现在我有订阅了同一主题的 Lambda B。当我触发 Lambda A 时,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 参数,但是当我尝试将所有属性都设置为 null 时。

最佳答案

所以这里的问题是 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

更新如果你查看 GitHub 问题,你就会明白我遇到这个问题的原因是因为我使用了错误的库。所以不是错误,用户错误:(

拉入这个库。亚马逊.Lambda.SNSEvents

关于c# - 解析 AWS Lambda 的 SNS 消息对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40956512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com