如何设置 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.txt
与 b2.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 函数