首页 > 解决方案 > 为备用 PUT 操作配置 s3 事件

问题描述

我有一个 Lambda 函数,只要在 s3 存储桶中创建对象,就会触发该函数。

现在,我需要触发 Lambda 以创建备用对象。在第一次、第三次、第五次等时间创建对象时不应触发 Lambda。但是,Lambda 应该在第二、第四、第六等时间触发。

为此,我为“PUT”操作创建了一个 s3 事件。我第一次使用 PUT API。我第二次上传文件时使用 -

s3_res.meta.client.upload_file

我认为它不会触发 lambda,因为这是上传而不是 PUT。但这也触发了 Lambda。

有什么办法吗?

标签: amazon-web-serviceseventsamazon-s3aws-lambdaput

解决方案


meta.client.upload_file触发事件 lambda的原因PUT是因为它实际上是使用PUT.

upload_file( docs ) 使用 TransferManager 客户端,它使用PUT底层(您可以在代码中看到这一点:https ://github.com/boto/s3transfer/blob/develop/s3transfer/upload.py )

查看 AWS-SDK,您会发现POSTS3 非常受限于您想要为浏览器/客户端提供预签名 URL 以供他们上传文件的情况。(https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html

如果您想计算PUT被调用的次数,以便对每个偶数调用采取行动,那么最简单的方法是使用 DynamoDB 之类的东西来创建一个“文件名”与“放置计数”的表' 你会更新它PUT并相应地采取行动。

或者,您可以启用存储桶文件版本控制。然后您可以使用list_object_versions来查看文件已更新了多少次。尽管您应该知道 S3 最终是一致的,但如果文件正在快速更新,这可能不准确。


推荐阅读