AWS Lambda函数被反复调用

时间:2018-09-24 14:08:43

标签: amazon-web-services aws-lambda

我编写了一个Lambda函数,当文件进入我的S3存储桶时,该函数会自动被调用。 我对此文件执行某些验证,修改特定文件并将其放在同一位置。 由于此“放置”,我的lambda再次被调用,该过程一直进行到我的lambda执行超时为止。 有什么方法可以只触发一次此lambda吗?

  • 我找到了一种方法,可以在DynamoDB中存储文件名并可以应用lambda函数检查,但是还有其他方法可以避免DynamoDB的使用吗?

5 个答案:

答案 0 :(得分:3)

您有两种选择:

  1. 您可以将文件放在s3中的其他位置,然后删除原始文件
  2. 更新时可以将元数据字段添加到s3对象。然后在s3中检查该字段的存在,以便知道是否已经处理过该字段。现在这可能无法完美运行,因为s3并不总是提供更新后读取时的最新数据。

答案 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函数。

希望有帮助!