我有一个Lambda函数,只要在s3存储桶中创建对象,该函数就会触发。
现在,我需要触发Lambda来创建备用对象。 在第一,第三,第五等时间创建对象时,不应触发Lambda。但是,应该在第二,第四,第六等等时间触发Lambda。
为此,我为“ PUT”操作创建了一个s3事件。 我第一次使用PUT API。我第二次使用-
上传文件s3_res.meta.client.upload_file
我认为它不会触发lambda,因为它是上载而不是PUT。但这也触发了Lambda。
有什么办法吗?
答案 0 :(得分:0)
meta.client.upload_file
触发您的PUT
事件lambda的原因是,它实际上是在使用PUT
的。
upload_file
(docs)使用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最终是一致的,但是如果文件正在快速更新,这可能并不准确。