如果我想通过 SQS 队列处理 SNS 通知,我应该在 lambda 中使用什么类型的事件?

问题描述 投票:0回答:1

我有一个执行某些操作的 lambda,如果成功,我会发布一个 SNS 通知来广播该事件的发生。我订阅了一个 SQS 队列,它反过来触发 Lambda 的后续操作,以实现最佳解耦。然而,

基于此文档页面我应该收到与此类似的通知:

{
   "Type" : "Notification",
   "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76",
   "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
   "Subject" : "Testing publish to subscribed queues",
   "Message" : "Hello world!",
   "Timestamp" : "2012-03-29T05:12:16.901Z",
   "SignatureVersion" : "1",
   "Signature" : "EXAMPLEnTrFPa3...",
   "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
   "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee"
}

我的 Lambda 函数签名对应什么类型?我目前有这个:

public string FunctionHandler(SNSEvent sns, ILambdaContext context)

但这并不对应,因为原始 SNS 通知不包含 Records 数组。

最佳解决方案是什么以及如何设置?

c# amazon-web-services aws-lambda amazon-sqs amazon-sns
1个回答
0
投票

当 SNS 向 SQS 队列发送消息时,它将原始消息包装在 SQS 消息信封中,其中包括附加元数据,例如消息 ID、接收句柄和消息属性。

因此,当您订阅 SQS 队列到 SNS 主题,然后配置 SQS 队列来触发 Lambda 函数时, 该函数将收到 SQS 事件;它不会收到 SNS 事件

SQS 事件将包含一系列 SQS 消息信封,每个信封的正文字段中都包含原始 SNS 消息。要在 Lambda 函数中处理 SNS 消息,您需要从 SQS 消息信封中提取消息正文。

您需要使用

SQSEvent
 Nuget 包中的预定义 
AWS.Lambda.SQSEvents
类。

© www.soinside.com 2019 - 2024. All rights reserved.