当Lambda被SNS调用时,是否总是只有1条记录?

63

当从SNS中的Lambda接收事件时,事件的外部结构将类似于:

{ "Records": [...] }

在我所看到的所有教程中,记录字段中只有一个记录。
可以安全地假定“Records”数组只会包含一个项目吗?
2个回答

74
每个SNS通知将仅包含不超过一条消息。
请参阅SNS FAQ中的可靠性部分:https://aws.amazon.com/sns/faqs/ 话虽如此,每个Lambda函数触发器将只有一个记录。

8
我知道已经有一段时间了,但是你知道为什么event.Records被定义为数组吗?它是否可以通过其他方式触发并包含多个条目? - Dave
20
Records是一个数组,因为其他事件源可能会一次性发送多个事件(比如DynamoDB Streams或S3事件),但对于SNS而言,即使它是一个数组,也只会有一条SNS消息。 - omuthu
如果您将SNS通知推送到SQS,并且Lambda函数订阅了它,则该函数可以一次检索最多10条消息进行处理。 - Riku L
@omuthu 我有一个 SNS 主题,其中包含各种资源,如 AWS 步骤函数、SES 发布。一个 Lambda 订阅了这个 SNS 主题,其责任是识别记录生成的位置并将其分类为关键或非关键。来自 SNS 的记录始终具有事件源 aws:sns,但不知道它的原始来源,但我希望我的 Lambda 知道 SNS 从哪里收到通知。有什么办法可以实现这一点吗? - Sithija Piyuman Thewa Hettige
@SithijaPiyumanThewaHettige 除非你阅读消息并找到它,否则你不可能实现那个。更好的方法是为每个类别设置单独的SNS,然后使用相同的Lambda触发这两个SNS。 - omuthu

10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接