正好10分钟后,S3 Lambda触发双重调用

luk*_*302 5 eventtrigger amazon-s3 amazon-web-services aws-lambda

我们正在经历由S3 ObjectCreated-Events触发的Lambda的双Lambda调用.这些双调用发生恰好在第一次调用后10分钟,不是10分钟后的第一次尝试是完整的,但10分钟后,第一次调用发生.原始调用需要0.1到5秒之间的任何内容.没有调用会导致错误,它们都会成功完成.

我们知道SQS例如不保证完全一次但至少一次传递消息,我们会接受一些lambdas由于下面的分布式系统的结果而第二次被调用.然而,延迟10分钟听起来很奇怪.

大约10k条消息100-200导致双重调用.

AWS Support基本上说"10分钟的等待时间是设计的,但我们无法告诉您原因",这一点都没有用.


  • 有没有其他人以前经历过这种行为?
  • 你是如何解决这个问题的,或者你只是忽略它(我们能做什么)?
  • 一个建议的解决方案是不使用直接的S3-lambda触发器,但让S3将其事件放在SNS上并订阅一个Lambda.有这种方法的经验吗?

示例日志:两次调用,相隔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条记录

luk*_*302 2

经过几轮 AWS 支持和其他支持以及几次单独的试运行后,这似乎只是“设计使然”。目前还不清楚为什么,但它就是发生了。问题既不是 S3 也不是 SQS / SNS,而只是 lambda 调用以及 lambda 服务如何将调用分派到 lambda 实例。

两次调用发生在所有调用的 1% 到 3% 之间,即第一次调用后 10 分钟。令人惊讶的是,甚至有三次(可能是四次)调用,其频率为基本概率的幂,所以基本上为 0.09%,...三次调用发生在第一次调用后 20 分钟。

如果您遇到这种情况,您只需使用您有权访问的任何内容来解决它。例如,我们现在将已处理的实体存储在 Cassandra 中,TTL 为 1 小时,并且仅在实体尚未处理时才响应来自 lambda 的消息。两次和三次调用都发生在这一小时的时间范围内。