桶级S3中的ObjectCreatedByPut一次调用Lambda多次

时间:2019-03-18 13:18:52

标签: lambda

我们已通过S3存储桶(无过滤器)中的ObjectCreatedByPut事件创建了Lambda函数。 lambda的目标是基于Git分支创建/更新/启动代码管道。该代码管道具有SNS批准阶段。现在我们注意到,直到Codepipeline流的SNS批准阶段被拒绝为止,即使每个S3对象保持不变,每个Codepipeline通过SNS批准阶段之后,Lambda也会被多次调用。看来Lambda会自动调用多个调用。 即使在不更改对象的情况下,为何如此调用它,是否有任何特定的原因? 已经看到,如果我们在S3存储桶中使用过滤器供Lambda从存储桶的特定文件夹中调用,则不会发生这种情况。请说明行为。 我重新创建了Lambda函数,但是对于同一事件它仍然多次调用,这是不希望的。请提出建议。

1 个答案:

答案 0 :(得分:0)

我希望aws lambda调用文档在以下方面有所帮助:

对于异步调用,Lambda会将事件添加到队列之前 将它们发送给您的功能。 如果您的功能不具备 足够的容量来跟上队列,事件可能会丢失。 有时 您的功能可能多次收到相同的事件,即使没有收到 发生错误。要保留未处理的事件,请使用死信队列配置功能。<​​/ p>

您的函数是异步还是同步?如果事件排队,则它们可能执行两次,或者至少执行一次。

如果您看到无法预测的行为,我建议您同时测试两种行为并共享结果。

参考:

https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html
https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html
https://docs.aws.amazon.com/lambda/latest/dg/invocation-sync.html