【问题标题】:AWS lambda function triggering multiple times for a same event with same time stampAWS lambda函数为具有相同时间戳的同一事件多次触发
【发布时间】:2019-12-08 16:59:35
【问题描述】:

我通过 PUT 操作将 AWS S3 触发器配置为 lambda 函数。

每 2 分钟上传 100kb 大小的 .txt 文件。

有时 S3 会以相同的事件和时间触发 lambda 两次。

触发器 1:

START RequestId: f32a3353-bd53-48fd-aa49-c09ee9c82a3e 2019-07-30T22:47:05.122Z

触发器 2:

START RequestId: f32a3353-bd53-48fd-aa49-c09ee9c82a3e 2019-07-30T22:47:05.98Z

我怎样才能避免这种情况?

【问题讨论】:

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


【解决方案1】:

让我引用文档:

有时,您的函数可能会多次收到相同的事件, 即使没有发生错误。

另一个:

发生错误时,您的函数可能会被多次调用。 重试行为因错误类型、客户端、事件源和 调用类型。例如,如果您异步调用一个函数 它返回一个错误,Lambda 最多执行两个函数 次。

参考:https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html

幂等

您的 lambda 必须是幂等的才能处理此行为,请参阅以下链接的更多详细信息:

https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/

https://cloudonaut.io/your-lambda-function-might-execute-twice-deal-with-it/

【讨论】:

  • 这是一个非常普遍的问题,似乎不仅仅是 s3 触发器,我在 s3 上传、cron 作业、异步编程调用和 api 网关触发器中看到了它。在这个问题stackoverflow.com/questions/32064038/… 中建议作为可接受答案的超时更改对于所有用例来说都是不够的。 @Azize 我希望这个答案是关于另一个问题的,并且我认为在使用 Lambdas 开发时应该将其提升为常识。希望我能投票更多!
  • 以及来自 aws 的看似标准的实现:awslabs.github.io/aws-lambda-powertools-python/api/utilities/…
【解决方案2】:

可能是调用Lambda函数的问题,见https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html

因此它是无害的(代码不会运行两次)

【讨论】:

  • 谢谢@Vorspung。我会考虑调用错误。 Account – 函数实例的最大数量已经在运行,或者请求的速度过快。这个最大实例如何运行,实例将根据内存大小创建。无论如何,函数正在执行两次。
猜你喜欢
  • 2015-11-10
  • 2021-03-21
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2023-02-02
相关资源
最近更新 更多