【问题标题】:Check for multiple s3 events to trigger lambda when all are met?检查多个 s3 事件以在所有事件都满足时触发 lambda?
【发布时间】:2020-12-11 01:07:29
【问题描述】:

我有一个运行一系列 lambda 函数的阶跃函数。我想设置一个 lambda,它会在所有 3 个输入文件都更新后每天触发。

我知道你可以触发 s3 事件,但我怎么能要求所有三个事件都必须更新?也就是说,我不希望触发器在三个事件(“或”条件)中的任何一个上触发,我希望它在所有三个事件都已更新(“和”条件)时触发。

我将如何设置这样的触发事件?

谢谢

【问题讨论】:

  • 我可以继续使用同一张纸条吗?不知道你为什么要“私下”这个问题,然后再问一次。
  • 对不起,正如我在评论中解释的那样,我认为这个问题有点误导。这是关于 lambda 触发器的问题,而不是阶跃函数。这对每个人都应该更清楚
  • 别担心,我也在这里发布了我的答案,你可以检查一下。

标签: amazon-web-services aws-lambda


【解决方案1】:

这是我最终使用的解决方案。我为每个文件使用一个带有触发器的 lambda。对于每个触发器,lambda 会将触发它的文件的名称添加到存储在 s3 上的文件中。然后它检查文件是否具有所有必需的文件名以继续。如果是,它会启动 stepfunction 并清除列表。我正在从默认通过 lambda_function(event,context) 传入的事件对象中捕获触发 lambda 的文件的名称。

因此,在给定的一天,同一个 lambda 会被多次触发,每次都记录文件名,直到收集完所有文件名。

【讨论】:

    【解决方案2】:

    现在好像没有直接的方法可以根据这些条件来触发 Lambda。您需要在单独的 lambda 中编写逻辑,这将触发您的步进函数。

    您可以参考here 了解如何从 Lambda 触发 Step Function。

    现在,谈谈您的 Lambda 中的逻辑,它将检查您的文件。在这里,我相信您知道所有这三个文件,或者至少您知道文件前缀,因此当任何文件上传到 S3 时,您可以在 Lambda 中检查三个文件是否存在。如果找到所有三个文件,您可以直接从 Lambda 触发状态机,否则您可以自行停止。一旦 Step Machines 执行完成,您可以清理这三个文件,或者您可以将其重命名为其他文件,或者您可以将这些文件移动到不同的“文件夹”,以便下次上传这三个文件中的任何一个时,您的 lambda 会执行不触发状态机。

    我能想到的另一个逻辑是将所有这些文件一起上传为zip。将 zip 文件上传到 S3 后,您的 lambda 会收到通知,处理该 zip 文件并提取所有三个文件,进行一些处理并使用处理后的数据触发状态机。

    【讨论】:

      【解决方案3】:

      无法定义“仅在这 3 个文件上传后运行”的触发器。

      你需要自己实现这个逻辑。

      上传会触发 AWS Lambda 函数。此函数应检查其他两个文件是否存在。如果它们存在,它应该继续处理。如果它们不存在,它应该退出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-30
        • 2022-01-18
        • 2017-04-07
        • 2018-04-01
        • 2012-10-31
        • 2018-10-17
        • 2020-11-13
        • 1970-01-01
        相关资源
        最近更新 更多