我的架构允许将文件放入 s3 中,Lambda 函数同时运行。然而,由于某些其他进程在几毫秒内的间隙,放入 S3 中的文件会以某种方式被覆盖。同一文件的多个 put 事件导致 lambda 多次触发同一事件。
是否可以对 s3 事件设置阈值(不会针对同一文件事件多次触发 lambda。)
或者什么类型的 s3 事件仅在创建文件而不更新文件时发生?
已经有一个代码可以检查触发器文件是否存在。如果没有,它会创建触发器文件。但这也没有用,因为另一个进程是 s3,放入文件的速度非常快。
类似下面的内容 -
try:
s3_client.head_object(Bucket=trigger_bucket, Key=trigger_file)
except ClientError as _:
create_trigger_file(
s3_client, trigger_bucket, trigger_file
)
最佳答案
您可以将 Amazon S3 配置为将事件发送到 Amazon SQS FIFO(先进先出)队列。然后队列可以 trigger the Lambda function .
使用 FIFO 队列的好处是每条消息都有一个 Message Group ID 。 FIFO 队列只会向每个消息组 ID 的 AWS Lambda 函数提供一条消息。在前一条消息完全处理之前,它不会发送具有相同消息组 ID 的另一条消息。如果您将消息组 ID 设置为 S3 对象的Key
,那么它实际上会为 S3 中创建的每个对象拥有一个单独的队列。
此方法允许 Lambda 函数针对不同对象并行运行,但对于每个特定 Key,最多只能执行一个 Lambda 函数。
关于amazon-web-services - 如何确保S3不会将并行事件放入lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69948791/