有没有一种方法可以在S3上传后添加延迟来触发Lambda?

4
我有一个Lambda函数,当S3存储桶中的put/post事件触发时会被激活。如果只上传一个文件到S3存储桶,则该功能正常工作。
然而,有时可能会上传多个文件,这可能需要长达7分钟才能完成上传过程。这会多次触发我的lambda函数,从而增加了代码处理的开销。
是否有任何方法可以仅针对完整上传一次触发lambda或在函数中添加延迟并避免多次执行Lambda函数?
由于无法确定文件何时上传到S3,因此无法使用调度程序。

尝试操作触发 Lambda 函数的事件。可能会发现 “所有对象创建事件” 触发了多部分上传中某些部分的情况。可能需要选择其他选项的组合。 - John Rotenstein
3个回答

2
Lambda现在支持针对Kinesis或DynamoDB事件来源的自定义批处理窗口的延迟功能,但不支持S3事件。您可以将S3事件发送到SQS,然后Lambda将消耗SQS事件。默认情况下,它以批处理方式消耗它们。请参阅此文档了解更多信息。

S3会继续为每个文件上传发送事件,这是否仍然解决了问题? 文件1上传到S3 -> 带有5分钟延迟的SQS队列 -> 触发Lambda函数 - Nitin Malode
是的。就像我所写的那样,Lambda以批处理方式处理SQS事件。 批量大小可配置。 这意味着您可以在单个Lambda调用中处理上传的100个文件。 - nickolay.laptev

0

多部分上传是否适用于小于100MB的文件?因为在这种情况下,所有文件都不会超过100MB。 - Nitin Malode
多部分上传是将单个文件分成多个部分进行上传。 - nickolay.laptev

0

另一个选择是让您的Lambda函数在继续执行所需操作之前检查所有必需文件的存在。即使Lambda函数每次仍会触发,但如果尚未接收到所有文件,则会快速退出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接