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

将 Lambda 与 Amazon SNS 结合使用

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

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

例 Amazon SNS 消息事件

{ "Records": [ { "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws-cn: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-cn:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "TopicArn":"arn:aws-cn:sns:us-east-2:123456789012:sns-lambda", "Subject": "TestInvoke" } } ] }

对于异步调用,Lambda 对消息排队并处理重试。如果 Amazon SNS 无法到达 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 存储库中的以下内容: