AWS Lambda函数触发两次

时间:2016-01-14 09:28:28

标签: python amazon-web-services amazon-s3 aws-lambda

我正在使用AWS Lambda函数(用python编写)在对象上传到预设的S3存储桶时发送电子邮件。该对象通过AWS PHP SDK上传到S3存储桶,并使用分段上传。每当我测试我的代码时(在Lambda代码编辑器页面内)它似乎工作正常,我只收到一封电子邮件。

但是当通过PHP SDK上传对象时,Lambda函数会运行两次并发送两封电子邮件,两封邮件都有不同的邮件ID。我尝试过不同的电子邮件地址,但每个地址只收到两封重复的电子邮件。

任何人都可以指导我哪里可能出错?我正在使用随示例python代码导入的boto3库来发送电子邮件。

2 个答案:

答案 0 :(得分:10)

是的,我们也有这个,它没有链接到电子邮件,它链接到S3为单个上传触发多个事件。与许多消息传递系统一样,亚马逊不保证S3的“一次性交付”事件通知,因此您的Lambda函数将需要自行处理。

不是最伟大的,但可行的。

某种形式的缓存,其中包含前几个请求的详细信息,因此您可以查看是否已经处理了特定的事件消息。

答案 1 :(得分:4)

我也面临同样的问题,在我的情况下,在S3桶中的每个PUT事件中,一个lambda应该触发,它会以相同的aws_request_idaws_lambda_arn触发两次。

要修复它,请在某处跟踪aws_request_id(此id对每个lambda事件都是唯一的),并检查处理程序。如果存在相同的aws_request_id则不执行任何操作,否则将照常处理。