我设计了一个解决方案,通过事件通知触发手动 S3 文件上传的 lambda 函数。我的 Lambda 根据上传的文件处理一些数据。
我现在想在第一次手动上传完成后每 24 小时触发一次同一文件的 S3 事件。
所以初始流程是 - 手动上传到 s3 -> S3 事件通知 -> 触发 Lambda
我想要的新流程 - 手动上传到 s3 -> S3 事件通知 -> 触发 Lambda ->(每 24 小时)-> 重新生成 S3 事件通知并触发 Lambda
有什么办法可以实现这个目标吗?也许是 AWS GLUE(但不知道如何)。
对于新流程,必须手动上传,因为 Lambda 将在每次运行时处理初始上传中上传的文件。
AWS 上没有现成的服务可以按照这么大的时间表重播消息。 SQS 有消息计时器,这对您的任务可能很有用,但它们的上限为 15 分钟。
您必须自己构建这样的服务:
创建一个 DynamoDB 表来存储每个 S3 对象的处理状态。使用对象 URL (
s3://bucket/key
) 作为哈希键,使用下次更新的时间戳作为排序键。
创建一个 Lambda 函数,在初始上传时将一个条目放入此表中。
创建一个 Lambda 函数来处理该表。我们将其称为“重播 Lambda”
创建一个 EventBridge 计划,每分钟或您想要的频率调用“重播 Lambda”。
这就是总体思路。您可能需要稍微调整一下,具体取决于这些问题的答案:
如果重播 Lambda 落后怎么办?您是否希望将记录的重新处理推迟 24 小时(自原始时间或调用 Lambda 之日起 24 小时)?
如果在安排下一场比赛时重播尚未完成怎么办?
您可能希望对“重播 Lambda”设置超时,以便不会发生并发执行。
如果您处理 Lambda 失败或达到并发限制怎么办?您想重试多少次?如果一直失败你还想24小时后重播吗?
您可能希望将消息放在 SQS 队列上以限制它们,或者同步调用它并等待其结果,而不是异步调用处理器。