当前位置: 首页 > 知识库问答 >
问题:

S3中多个文件就绪时如何触发AWS Lambda函数

唐增
2023-03-14

我正在尝试使用AWS Lambda/S3构建一个服务,该服务将用户电子邮件作为输入,并输出带有PDF附件的响应电子邮件。我发送给用户的最终PDF是通过将我之前根据输入电子邮件生成的两种PDF合并在一起生成的。架构的完整图见下图。

建筑示意图

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

共有1个答案

陶博耘
2023-03-14

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

我最初考虑在文件后缀为“50”时使用s3触发器。pdf’被创建了,但这留下了很多关于什么先完成以及如果发生什么事情会发生什么的问题50。pdf无法生成。但如果你真的想走这条路,这里有一些来自AWS的好文档。

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

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

因此,解析电子邮件Lambda在执行其工作之前,需要在数据库中植入引用。然后PDF Lambda的URL将在db上记录它已经完成,并检查db是否HTML到PDF Lambda已经完成。如果是,请调用合并PDF Lambda(可能通过SNS),如果不是finish,请调用。HTML到PDF Lambda也会做同样的事情,只是它会检查PDF Lambda的URL在开始合并或完成之前是否已完成。

另一方面,我可能会在合并PDF Lambda的末尾触发Clean Buckets Lambda。这样,你就可以检查每小时触发一次的未处理工作Lambda,如果它在桶中发现任何早于x的东西,就会发出某种形式的通知。

 类似资料:
  • 现在,我注意到具有,但是events列表中的最后一个事件将状态列为,因为准备状态探测失败。(在应用程序日志中,我可以看到,自那以后,有更多的请求传入准备状态探测,并且它们都成功了。) 我应该如何解释这些信息?Kubernetes认为我的豆荚准备好了,还是没有准备好?

  • 我在寻求最好的设计方法- 用例 思想 我不认为这是个好主意。主要是因为Lambda函数应该是轻量级的,并且从Lambda函数内部轮询数据库以获得所有上传文件的S3键,然后在S3中签入这些键--每次这样做似乎都很麻烦,而且非常重复。 更好的方法是什么?我在考虑使用SWF之类的东西,但不确定这是否对我的解决方案来说是过激的,或者它是否会让我做我想做的事情。文档也没有显示真正的“示例”。这只是一个讨论,

  • 我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文

  • 在Amazon S3 bucket中,事件日志以CSV文件的形式每小时发送一次。我想执行一些简短的描述性分析1周价值的数据,每周(例如168个文件每周)。分析的重点是输出每周的趋势产品列表。我在本地机器上编写了一个python脚本,它使用boto3从S3检索最新的168个文件,并进行所有必要的争论等。 以下是从本地计算机获取168个文件的代码: 所以,我的问题是,我是否可以将这段代码放入一个lam

  • 我有一个非常大的文件(估计50MB)。我把这个文件上传到一个S3目录,然后触发一个Lambda函数。我正在使用TransferManager进行S3上传。 我阅读了AWS关于Lambda和S3的文档,它说在S3中创建文件时会触发Lambda函数,但我仍然想知道创建的文件是否意味着文件已完全上载。 我的问题是:由于文件太大,上传会有一点延迟,所以Lambda函数是在文件完全上传之前还是之后触发的?例