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

时间:2020-03-03 04:12:21

标签: amazon-web-services aws-lambda amazon-sqs

就像标题所示,我有一个想探索的场景,但不知道该怎么做。

我有一个lambda函数processCSVFile。我还有一个SQS队列,每天在固定的时间填充来自S3的csv文件的链接,比如说大约2000条消息。现在,一旦SQS队列中有消息,我想一次处理25条消息。

我正在寻找的场景是同时处理25条消息,我希望25条lambda调用分别处理25条消息。我以为我可以在SQS中使用SendMessageBatch函数,但这仅将消息传递到队列,似乎不适用于我的用例。

我的问题是,我是否能够执行上面说明的操作,并且如果可能,什么文档或用例可以解释我要寻找的内容。 另外,如果这种用例是不可能的,那么您推荐什么作为我要同时完成的处理的替代方法。

2 个答案:

答案 0 :(得分:3)

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

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

请参阅:

答案 1 :(得分:2)

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

lambda使用长池来准备消息批处理,以供lambda进行并发处理。因此,每次调用函数一次都可以获取多于一条消息。

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

保留的25个并发保证您不会并行运行25个以上的函数。如果将其保留为默认值,则可以使用您帐户中的所有免费并发资源。

编辑:

@JohnRotenstein已经证实可以通过设置lambda的方式将消息传递给函数。

希望这会有所帮助。