一次使用单独的 Lambda 处理 AWS SQS 消息

Processing AWS SQS messages with separate Lambda at a time

如标题所示,我有一个想探索但不知道如何去做的场景。

我有一个 lambda 函数 processCSVFile。我还有一个 SQS queue,在每天的某个固定时间,它会填充 link 来自 S3 的 csv 文件,比如说大约 2000 条消息。现在我想在 SQS queue 收到消息后一次处理 25 条消息。

我正在寻找的场景是并发处理25条消息,我希望这25条消息分别由25个lambda调用处理。我以为我可以在 SQS 中使用 SendMessageBatch 函数,但这只会将消息传递给 queue,它似乎不适用于我的用例。

我的问题是,我是否能够执行上述操作?如果可能,哪些文档或用例可以解释我正在寻找的内容。 另外,如果这个用例是不可能的,你推荐什么作为我想同时完成的处理的替代方法。

我认为 lambda 的组合 event source mapping for sqs 并将 reserved concurrency 设置为 25 可能是可行的方法。

lambda 使用长池为 lambda 并发处理准备消息批处理。因此,您的函数的每次调用一次可能会收到 1 条以上的消息。

我认为没有办法将事件源映射设置为每批只提供一条消息。如果您绝对必须确保只有一条消息由 lambda 处理,那么您只处理一条消息而忽略其他消息(将它们放回队列)。

25 的预留并发保证您不会运行并行处理超过 25 个函数。如果您将其保留为默认值,则可以 运行 达到您帐户中的任何免费并发数。

编辑:

@JohnRotenstein 已经确认有一种方法可以设置 lambda 将消息一次传递给您的函数。

希望对您有所帮助。

要使用 25 个并发 Lambda 函数处理来自 Amazon SQS 的 25 条消息(每个 运行 Lambda 函数 1 条消息),您需要:

  • 为 Lambda 函数配置的 最大并发数 为 25(否则,当有更多消息可用时,它可能会更高)
  • 在 Lambda 触发器上配置的 批量大小 为 1,以便 SQS 一次只传递一条消息

参见: