AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS Lambda 与 Amazon SNS 结合使用

您可以编写 Lambda 函数来处理 Amazon Simple Notification Service 通知。在将消息发布到 Amazon SNS 主题时,服务可以通过将消息负载作为参数传递来调用 Lambda 函数。随后,您的 Lambda 函数代码可以处理事件,例如,将消息发布到其他 Amazon SNS 主题或将消息发送到其他 AWS 服务。

当用户调用 Lambda 函数订阅的主题的 SNS Publish API 时,Amazon SNS 会调用 Lambda,进而异步调用函数。随后,Lambda 将返回传输状态。如果调用 Lambda 时出错,Amazon SNS 将重新尝试调用 Lambda 函数(最多尝试 3 次)。在尝试 3 次后,如果 Amazon SNS 仍无法成功调用 Lambda 函数,则 Amazon SNS 将向 CloudWatch 发送传输状态失败消息。

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

例 Amazon SNS 消息事件

{ "Records": [ { "EventVersion": "1.0", "EventSubscriptionArn": "arn:aws:sns:us-east-2:123456789012:test-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", "EventSource": "aws:sns", "Sns": { "SignatureVersion": "1", "Timestamp": "1970-01-01T00:00:00.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": topicarn, "Subject": "TestInvoke" } } ] }

可以通过主题订阅配置在 Amazon SNS 中配置事件源映射。有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南 中的使用 Amazon SNS 通知调用 Lambda 函数