我编写了一个Lambda函数,当文件进入我的S3存储桶时,该函数会自动被调用。 我对此文件执行某些验证,修改特定文件并将其放在同一位置。 由于此“放置”,我的lambda再次被调用,该过程一直进行到我的lambda执行超时为止。 有什么方法可以只触发一次此lambda吗?
答案 0 :(得分:3)
您有两种选择:
答案 1 :(得分:1)
AWS允许使用不同类型的s3事件触发器。您可以尝试播放s3:ObjectCreated:Put与s3:ObjectCreated:Post。
答案 2 :(得分:1)
您可以将文件上传到文件夹中,例如
s3://存储桶名称/ 未验证
并将经过验证的存储在另一个文件夹中,例如
s3://存储桶名称/ 已验证。
在/ notvalidated前缀中存在ObjectCreate(All)事件时,更新S3事件通知以调用lambda函数。
答案 3 :(得分:0)
第二个答案似乎并不正确(输入与输出)-S3中实际上没有关于POST或PUT的更新概念。更新对象的请求将与对象的初始POST相同。有关可用的S3事件的详细信息,请参见here。
去年,我遇到了这个确切的问题-我在PUT上进行图像大小调整,每次覆盖文件时,都会再次触发它。我建议的解决方案是在s3存储桶中有两个文件夹-一个用于原始文件,一个用于完成文件。然后,您可以创建带有lambda前缀的lambda触发器,以便它仅检查原始文件夹中的文件
答案 4 :(得分:0)
根据对象是否放置/发布/复制/完成分段上传在S3中触发事件-所有这些操作对应于AWS文档中的 ObjectCreate 。
https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
最好的解决方案是将S3对象创建事件限制为特定的存储桶位置。这样,该存储桶位置中的任何更改都会触发lambda函数。
您可以在其他存储桶位置进行修改,这些位置未配置为在该位置创建对象时触发lambda函数。
希望有帮助!