amazon-web-services - 如何确保S3不会将并行事件放入lambda?

标签 amazon-web-services amazon-s3 aws-lambda

我的架构允许将文件放入 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/

相关文章:

amazon-web-services - 在 amazon 为什么我不能从公共(public) ip 地址查看我的 tomcat?

amazon-web-services - 对于较大的文件,Lambda S3 Put 函数不会触发

hadoop - Hadoop distcp 从 HDFS 到 Amazon S3 的问题

node.js - 使用 Lambda 代理的 API 网关设置 Cookie

amazon-web-services - aws route53domains list-domains --region us-east-1 返回空 []

amazon-web-services - AWS ECS任务不断启动和停止

java - 亚马逊 AWS RAID 配置

reactjs - React Native S3 图片上传使用 XHR 返回 "Stream Closed"

javascript - 是否可以使用认知用户池身份调用 Lambda 函数?

javascript - 使用浏览器化 Node 应用程序访问 module.exports