将 Amazon SNS 与 Amazon Lambda 结合使用 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将 Amazon SNS 与 Amazon Lambda 结合使用

您可以使用 Lambda 函数处理 Amazon Simple Notification Service (Amazon SNS) 通知。Amazon SNS 支持将 Lambda 函数作为发送到主题的消息的目标。您可以将函数订阅到同一账户或其他 Amazon 账户中的主题。

Amazon SNS 通过包含消息和元数据的事件异步调用您的函数。

例 Amazon SNS 消息事件

{ "Records": [ { "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", "Timestamp": "2019-01-02T12:45:07.000Z", "Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", "SigningCertUrl": "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-ac565b8b1a6c5d002d285f9598aa1d9b.pem", "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", "Message": "Hello from SNS!", "MessageAttributes": { "Test": { "Type": "String", "Value": "TestString" }, "TestBinary": { "Type": "Binary", "Value": "TestBinary" } }, "Type": "Notification", "UnsubscribeUrl": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "TopicArn":"arn:aws:sns:us-east-2:123456789012:sns-lambda", "Subject": "TestInvoke" } } ] }

对于异步调用,Lambda 对消息排队并处理重试。如果无法联系到 Lambda 或消息被拒绝,Amazon SNS 将在几个小时内以递增的间隔重试。有关详细信息,请参阅 Amazon SNS 常见问题中的可靠性

要执行跨账户 Amazon SNS 传输到 Lambda,您必须授权 Amazon SNS 调用 Lambda 函数。反过来,Amazon SNS 必须允许带有 Lambda 函数的Amazon账户订阅 Amazon SNS 主题。例如,如果 Amazon SNS 主题在账户 A 中而 Lambda 函数在账户 B 中,则这两个账户必须相互授予对其各自的资源的访问权限。由于并非所有设置跨账户权限的选项都可以从 Amazon Web Services Management Console 使用,因此您必须使用 Amazon Command Line Interface(Amazon CLI) 进行设置。

有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南中的扇出至 Lambda 函数

Amazon SNS 事件的输入类型

有关采用 Java、.NET 和 Go 的 Amazon SNS 事件的输入类型示例,请参阅Amazon GitHub 存储库中的以下内容: