将 Lambda 与 Amazon SNS 结合使用 - AWS Lambda

将 Lambda 与 Amazon SNS 结合使用

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

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 对消息排队并处理重试。如果 Amazon SNS 无法到达 Lambda 或消息被拒绝,Amazon SNS 将在几个小时内以递增的间隔重试。有关详细信息,请参阅 Amazon SNS 常见问题中的可靠性

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

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

Amazon SNS 事件的输入类型

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