我们正在经历由S3 ObjectCreated-Events触发的Lambda的双Lambda调用。这些双重调用在第一次调用后10分钟完全发生,而不是在第一次尝试完成后10分钟,但在第一次调用发生后10分钟。原始调用需要0.1到5秒之间的任何内容。没有调用会导致错误,它们都会成功完成。
我们知道SQS例如不能保证完全一次但至少一次传递消息,我们会接受一些lambdas由于下面的分布式系统的结果而第二次被调用。然而,延迟10分钟听起来很奇怪。
大约10k条消息100-200导致双重调用。
AWS Support基本上说“10分钟的等待时间是设计的,但我们无法告诉您为什么”,这一点都没有帮助。
示例日志:两次调用,相隔10分钟,相同的RequestId
START RequestId:f9b76436-1489-11e7-8586-33e40817cb02版本:13
2017-03-29 14:14:09 INFO ImageProcessingLambda:104 - 处理1条记录
和
START RequestId:f9b76436-1489-11e7-8586-33e40817cb02版本:13
2017-03-29 14:24:09 INFO ImageProcessingLambda:104 - 处理1条记录
答案 0 :(得分:1)
不想像Dynamo那样启动数据存储来处理这个问题,我做了两件事来解决我们的用例
答案 1 :(得分:1)
经过AWS支持和其他几次试运行以及一些单独的试运行后,似乎这只是“按设计”。目前尚不清楚为什么,但它只是发生了。问题既不是S3也不是SQS / SNS,而只是lambda调用以及lambda服务如何将调用分派给lambda实例。
在第一次调用后10分钟,双重调用发生在所有调用的1%到3%之间。令人惊讶的是,甚至有三次(可能是四次)调用基本概率的权率,所以基本上是0.09%,......三次调用发生在第一次调用后20分钟。
如果您遇到此问题,您只需使用您有权访问的内容解决问题。例如,我们现在将已经处理的实体存储在Cassandra中,TTL为1小时,并且如果尚未处理实体,则仅响应来自lambda的消息。双重和三重调用都发生在这一小时的时间范围内。