【问题标题】:Send an email after multiple SQS records are processed by a Lambda function在 Lambda 函数处理多个 SQS 记录后发送电子邮件
【发布时间】:2019-12-14 19:50:05
【问题描述】:

我有一个 AWS Lambda 函数,它读取 CSV 文件并将一堆记录保存到 SQS 队列。将有数千条记录,因此它们无法放入一条消息中。

然后有另一个由该队列触发的 Lambda 函数来处理每条记录。处理每条记录大约需要一秒钟。

处理完所有记录后,我需要发送一封电子邮件。

最好的方法是什么?

我有两个想法:

  1. 将其设为 FIFO 队列,并在最后一条记录中添加 LastRecord: true 属性。当我阅读该记录时发送电子邮件。

  2. 使用记录总数和已处理记录总数以及读取该表的 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


【解决方案1】:

由于消息顺序相关,您应该考虑使用 Amazon Kinesis Data Streams 而不是 Amazon SQS。

一些区别:

您可以发送“最后一条消息”信号来触发最后的电子邮件发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2021-10-30
    • 2012-06-11
    相关资源
    最近更新 更多