我有一个连接两个 Lambda 函数的 FIFO SQS 队列。每条 SQS 消息均由第一个 Lambda 函数发送并由第二个 Lambda 函数使用。如果在 5 秒内发送多条 SQS 消息,我想将它们组合成一个事件,以便第二个 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 函数之前将消息批量处理在一起。