配置s3事件以进行备用PUT操作

时间:2019-04-22 03:27:47

标签: amazon-web-services events amazon-s3 aws-lambda put

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

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

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

上传文件
  

s3_res.meta.client.upload_file

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

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

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

upload_filedocs)使用TransferManager客户端,该客户端使用PUT在后​​台(您可以在代码https://github.com/boto/s3transfer/blob/develop/s3transfer/upload.py中看到)

查看AWS-SDK,您会发现POST进入S3的局限性仅限于您要给浏览器/客户端一个预签名的URL,以便他们将文件上传到该URL。 (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html

如果要计算PUT的调用次数,为了对每个偶数调用采取措施,那么最简单的方法是使用DynamoDB之类的东西来创建'file表-name”与“ put-count”,您每PUT都会更新一次,并相应地进行操作。

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