【发布时间】:2019-12-14 19:50:05
【问题描述】:
我有一个 AWS Lambda 函数,它读取 CSV 文件并将一堆记录保存到 SQS 队列。将有数千条记录,因此它们无法放入一条消息中。
然后有另一个由该队列触发的 Lambda 函数来处理每条记录。处理每条记录大约需要一秒钟。
处理完所有记录后,我需要发送一封电子邮件。
最好的方法是什么?
我有两个想法:
将其设为 FIFO 队列,并在最后一条记录中添加
LastRecord: true属性。当我阅读该记录时发送电子邮件。使用记录总数和已处理记录总数以及读取该表的 Lambda 函数更新 DynamoDB 表,直到
total === processed。
有更好的想法吗?
【问题讨论】:
-
第二个 Lambda 函数处理记录需要多长时间?第一个 Lambda 函数能否将一条消息中的所有记录发送到 SQS,而不是单独的消息中?这实际上与使用 FIFO 队列相同,但它将作为一个 Lambda 函数而不是多个函数运行。
-
谢谢@JohnRotenstein,我已经编辑了这个问题。第二个 lambda 函数大约需要一秒钟,并且可能有数千条记录,因此它们不适合一条消息。
-
我不认为 SQS 触发器可用于 FIFO。我认为您可以创建一个轮询 SQS 的 lambda。如果没有退回任何物品,您可以发送电子邮件。您也可以考虑 Step Functions。当队列中添加一批项目时,您可以执行状态机。我会想象状态机有 4 个步骤。首先轮询消息,然后将消息传递到处理所有记录的下一步。然后返回轮询任务,直到项目在队列中。如果没有返回任何项目,那么最后一步将是发送电子邮件通知的 SNS 任务。
-
SQS 触发器现在可用于 2019 年 11 月的 FIFO:aws.amazon.com/blogs/compute/…
标签: amazon-web-services aws-lambda batch-processing amazon-sqs