第一次手动上传后定期触发S3上传事件

问题描述 投票:0回答:1

我设计了一个解决方案,通过事件通知触发手动 S3 文件上传的 lambda 函数。我的 Lambda 根据上传的文件处理一些数据。

我现在想在第一次手动上传完成后每 24 小时触发一次同一文件的 S3 事件。

所以初始流程是 - 手动上传到 s3 -> S3 事件通知 -> 触发 Lambda

我想要的新流程 - 手动上传到 s3 -> S3 事件通知 -> 触发 Lambda ->(每 24 小时)-> 重新生成 S3 事件通知并触发 Lambda

有什么办法可以实现这个目标吗?也许是 AWS GLUE(但不知道如何)。

对于新流程,必须手动上传,因为 Lambda 将在每次运行时处理初始上传中上传的文件。

amazon-s3 aws-lambda aws-glue
1个回答
0
投票

AWS 上没有现成的服务可以按照这么大的时间表重播消息。 SQS 有消息计时器,这对您的任务可能很有用,但它们的上限为 15 分钟。

您必须自己构建这样的服务:

  1. 创建一个 DynamoDB 表来存储每个 S3 对象的处理状态。使用对象 URL (

    s3://bucket/key
    ) 作为哈希键,使用下次更新的时间戳作为排序键。

  2. 创建一个 Lambda 函数,在初始上传时将一个条目放入此表中。

  3. 创建一个 Lambda 函数来处理该表。我们将其称为“重播 Lambda”

    1. 读取表中所有更新时间大于24小时前的条目
    2. 过滤掉已被删除的S3对象
    3. 对于现有对象:
      1. 为每个对象生成 S3 事件并调用处理 Lambda(异步)
      2. 更新表条目,为每一项的处理时间增加 24 小时
    4. 对于不存在的对象,删除表条目
  4. 创建一个 EventBridge 计划,每分钟或您想要的频率调用“重播 Lambda”。

这就是总体思路。您可能需要稍微调整一下,具体取决于这些问题的答案:

  1. 如果重播 Lambda 落后怎么办?您是否希望将记录的重新处理推迟 24 小时(自原始时间或调用 Lambda 之日起 24 小时)?

  2. 如果在安排下一场比赛时重播尚未完成怎么办?

    您可能希望对“重播 Lambda”设置超时,以便不会发生并发执行。

  3. 如果您处理 Lambda 失败或达到并发限制怎么办?您想重试多少次?如果一直失败你还想24小时后重播吗?

    您可能希望将消息放在 SQS 队列上以限制它们,或者同步调用它并等待其结果,而不是异步调用处理器。

© www.soinside.com 2019 - 2024. All rights reserved.