【问题标题】:How to trigger AWS Lambda function when multiple files in S3 are ready当 S3 中的多个文件准备好时如何触发 AWS Lambda 函数
【发布时间】:2019-11-19 08:34:06
【问题描述】:

我正在尝试使用 AWS Lambda/S3 构建一项服务,该服务将用户电子邮件作为输入并输出带有 PDF 附件的回复电子邮件。我发送给用户的最终 PDF 是通过将我在此过程中基于输入电子邮件生成的两种类型的 PDF 合并在一起生成的。下图中可以找到完整的架构图。

Diagram of Architecture

我遇到的问题与 Merge PDFs Lambda 函数有关,该函数接受类型 1 和类型 2 PDF 并生成类型 3 PDF。一旦一组完整的类型 1 和 2 PDF 准备好并在 S3 中等待,我需要它触发。例如,用户发送一封电子邮件,解析电子邮件功能开始生成一个类型 2 PDF 和五十个类型 1 PDF - 一旦生成这 51 个 PDF,我希望运行合并 PDF 功能。 如何在 S3 中的一组多个文件准备就绪后触发 AWS Lambda 函数?

【问题讨论】:

  • 是否可以假设单个类型 2 pdf 总是在完整的类型 1 pdf 集之前准备好?
  • 很可能单个类型 2 pdf 将在全套类型 1 pdf 之前准备好,因为它明显更轻并且只有一个。话虽如此,并不能严格保证它必须在全套 1 型 pdf 之前完成。换句话说,可能是的,但这感觉有点老套
  • 好的,第二个问题,类型 1 的 pdf 是否方便编号,例如 typeone1.pdf 到 typeone50.pdf?或者他们可以吗?
  • 是的,我可以命名任何我需要的pdf文件来完成这项工作。可能还希望在 pdf 名称中包含初始电子邮件请求名称以限定其范围。
  • 另外,我应该补充一点,类型 1 pdf 有可能无法生成(损坏的 URL 等),应该妥善处理

标签: amazon-web-services amazon-s3 architecture aws-lambda


【解决方案1】:

据我所知,没有一个触发器会在引发事件之前等待将几件事情放入一个或多个存储桶中的 S3。

我最初考虑在创建后缀为“50.pdf”的文件时使用 s3 触发器,但这会留下很多问题,比如先完成什么以及如果 something50.pdf 无法生成会发生什么。但是,如果您确实想走这条路,AWS here 提供了一些很好的文档。

另一种方法是让生成类型 1 和 2 pdf 的 lambda 在完成处理后调用 Merge PDF Lambda。

您需要在某处(如 db)保存某种外部状态,其中记录了某种 id(可能包括类型 1 和 2 pdf 的命名),并且如果类型 1 pdf 生成完成并且如果类型 2 pdf 生成完成。

因此,Parse Email Lambda 需要在执行其工作之前为一个带有引用的数据库播种。然后,PDF Lambda 的 URL 将记录它已完成的 db,并检查 db 是否已完成 HTML 到 PDF Lambda。如果是,请调用 Merge PDF Lambda(可能通过 SNS)或者如果没有完成。 HTML 到 PDF Lambda 会做同样的事情,除了它会在开始合并或完成之前检查 PDF Lambda 的 URL 是否已经完成。

另外,我可能会在 Merge PDF Lambda 结束时触发 Clean Buckets Lambda。这样你就可以有一个 Check For Unprocessed Work Lambda 每小时触发一次,如果它在存储桶中发现任何早于 x 的东西,就会发出某种形式的通知。

【讨论】:

    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2020-05-16
    相关资源
    最近更新 更多