首页 > 解决方案 > 让一个资源只触发一次 lambda

问题描述

我在 AWS 上有一个事件驱动的数据管道,可以处理数百万个文件。我的 s3 存储桶中的每个文件都会触发一个 lambda。lambda 处理文件中的数据并将处理后的数据转储到 s3 存储桶,这反过来又触发另一个 lambda 等。

在我的管道的下游,我有一个创建 Athena 数据库和表的 lambda。只要将对象转储到我的 s3 存储桶的适当键下,就会触发此 lambda。只调用一次创建我的 Athena 数据库和表的 lambda 就足够了。

如何避免让我的 labda 被多次触发?

标签: amazon-web-servicesaws-lambda

解决方案


这是您现有的流程:

  1. 新文件到达后 S3 触发 Lambda(事件驱动)
  2. “Lambda 处理文件”然后交付到另一个 S3
  3. 另一个 S3 也触发另一个 lambda

您的第 3 步甚至没有被驱动,您正在执行一个事件。

我建议您使用以下流程:

  1. 新文件到达后 S3 触发 Lambda(事件驱动)
  2. “Lambda 处理文件”然后交付到另一个 S3

只有两个步骤,处理文件的 lambda 应该使用 Athena SDK 并检查所需的表是否已经存在,如果不存在,则调用创建 Athena 表的 Lambda。交付 S3 不应触发 Athena 的 lambda。


推荐阅读