我有一个 FIFO SQS 连接在两个 Lambda 之间。每个事件都由 SQS 中的第一个 lambda 放置。在 SQS 输入中多个事件间隔最多 5 秒的情况下,我希望它将它们合并为一个事件,以便第二个 lambda 可以同时处理它们。 我应该怎么做才能做到这一点?
Amazon SQS 可以向 AWS Lambda 函数发送最多 10 条消息。您的 Lambda 函数应该始终循环遍历
Records
列表,处理每条消息(除非您已将该函数配置为批量大小为 1)。
来自 将 Lambda 与 Amazon SQS 结合使用 - AWS Lambda:
通过 Amazon SQS 事件源映射,Lambda 轮询队列并与事件同步调用您的函数。 每个事件可以包含来自队列的一批多条消息。 Lambda 一次接收一批事件,并为每批调用一次您的函数。当您的函数成功处理一批时,Lambda 将从队列中删除其消息。
...
默认情况下,Lambda 一次轮询队列中最多 10 条消息,并将该批次发送到您的函数。为了避免调用少量记录的函数,您可以通过配置批处理窗口来将事件源配置为将记录缓冲最多 5 分钟。在调用该函数之前,Lambda 会继续从标准队列轮询消息,直到批处理窗口到期、达到调用负载大小配额或达到配置的最大批处理大小。
如果您使用批处理窗口并且 SQS 队列包含的流量非常低,则 Lambda 可能会等待最多 20 秒,然后再调用您的函数。即使您将批处理窗口设置为低于 20 秒也是如此。
因此,您应该将第二个 Lambda 函数的批处理窗口配置为 5 秒。这应该在调用第二个 Lambda 函数之前将消息批量处理在一起。