如何设置 lambda 函数以一起使用两个触发器

Posted

技术标签:

【中文标题】如何设置 lambda 函数以一起使用两个触发器【英文标题】:How setup a lambda function for working with two triggers together 【发布时间】:2021-12-29 09:13:28 【问题描述】:

当某些文件以两个不同的 S3 前缀上传时,我需要一个 lambda。

例子:

我有文件 A 和文件 B,每个文件有两个不同的前缀。

我需要对文件 A 和文件 B 进行一些聚合。

为此,我将使用 Lambda 在上传文件时在 SNS 上发送消息。

我想配置这个 lambda 以在这个 lambda 收到这两个事件通知时启动。

所以当这两个文件在 S3 上可供处理时,我的 lambda 就可以启动了。

为这项工作设置此触发器的最佳方法是什么?

【问题讨论】:

您能否提供两种文件类型的 S3 密钥示例?聚合如何工作(例如,a1.txt 应与 b1.txt 聚合,a2.txtb2.txt 聚合)? 聚合将发生在 Glue 工作流中, 我在询问 filename(= S3 对象键)模式。文件对是如何命名的?具体来说,如果我知道 File A 的 S3 密钥,我能猜出它的 File B 对的 S3 密钥吗? 我有文件库存和文件交易,这两个文件需要尽可能一起处理。每个文件都将上传到不同文件夹中的 S3 存储桶中。每个文件都会生成我们的事件通知,但我想结合这两个不同的事件来启动一个你一起处理这些文件的 lambda。 【参考方案1】:

TLDR; 与其在“发布 lambda”中手动引发“文件创建”通知,不如让 S3 event notifications 在创建目标文件时自动调用您的“处理 lambda”。当两个文件都存在时,lambda 运行完成。

docs:Amazon S3 可以在创建或删除对象时向 Lambda 函数发送事件。

(1) 创建 S3 事件通知: 将两个事件通知添加到您的存储桶。当在 S3 上创建 FileA 时调用处理 lambda。另一个在创建 FileB 时调用它。 您可以set filters,这样您的 lambda 只会收到有关某些 S3 操作和文件模式的通知。

(2) 处理 lambda 检查其他文件是否存在。传递给 lambda 的 S3 事件包含有关触发事件(例如 ObjectCreated)和对象(例如密钥名称、版本、存储桶等)的信息。使用 AWS 开发工具包检查 S3 上是否存在其他文件。

如果两个文件都存在,则调用粘合例程,否则退出。

50% 的时间处理 lambda 将提前退出(因为只存在 1 个文件)。其他时候,lambda 将一直运行到胶水例程。

(注意:仅当您可以从另一个文件名中派生一个文件名时,这才有效,这在 OP 或 cmets 中并不清楚。)

【讨论】:

以上是关于如何设置 lambda 函数以一起使用两个触发器的主要内容,如果未能解决你的问题,请参考以下文章

我如何设置在流程开始后24小时触发一次AWS Lambda?

如何匹配 aws cloudwatch 日志中的多个模式以触发 lambda

使用 terraform 设置由预定事件源触发的 lambda 函数

使用 terraform 设置由预定事件源触发的 lambda 函数

在单个AWS Lambda中使用两个python函数boto3

设置SNS主题以在另一个之后触发Lambda Function一条消息