【问题标题】:Let a resource trigger lambda only once让一个资源只触发一次 lambda
【发布时间】:2019-11-21 11:30:43
【问题描述】:
我在 AWS 上有一个事件驱动的数据管道,可以处理数百万个文件。我的 s3 存储桶中的每个文件都会触发一个 lambda。 lambda 处理文件中的数据并将处理后的数据转储到 s3 存储桶,这反过来又触发另一个 lambda 等。
在我的管道的下游,我有一个 lambda,它创建了一个 Athena 数据库和表。只要将对象转储到我的 s3 存储桶的适当键下,就会触发此 lambda。只调用一次创建我的 Athena 数据库和表的 lambda 就足够了。
如何避免让我的 labda 被多次触发?
【问题讨论】:
标签:
amazon-web-services
aws-lambda
【解决方案1】:
这是您现有的流程:
- 新文件到达后 S3 触发 Lambda(事件驱动)
- “Lambda 处理文件”然后交付到另一个 S3
- 另一个 S3 也触发另一个 lambda
你的第 3 步甚至没有被驱动,你正在执行一个事件。
我建议你以下流程:
- 新文件到达后 S3 触发 Lambda(事件驱动)
- “Lambda 处理文件”然后交付到另一个 S3
只有两个步骤,处理文件的 lambda 应该使用 Athena SDK 并检查所需的表是否已经存在,如果不存在,那么您调用创建 Athena 表的 Lambda。交付 S3 不应触发 Athena 的 lambda。