首页 > 解决方案 > AWS 是否保证我的 lambda 函数会 100% 触发?

问题描述

我设置了我的 AWS 工作流程,以便在将文本文件添加到我的 S3 存储桶时触发我的 lambda 函数,并且通常它工作正常 - 当我将一堆文本文件上传到 S3 存储桶时,一堆 lambda 将同时运行并处理每个文本文件。

但我的问题是,偶尔,1 或 2 个文件(总共 20k 左右)没有按预期触发 lambda 函数。我不知道为什么 - 当我检查日志时,不是文件由 lambda 处理而是失败了。日志显示 lambda 根本没有被那 1 或 2 个文件触发。我不相信它也达到了 1000 个并发 lambda 限制,因为我的函数运行得更快并且峰值在 200 个 lambda 左右。

我的问题是:这是因为 AWS lambda 不保证它会被 100% 触发吗?像 S3 一样,总是有(尽管很小)失败的可能性?如果没有,我该如何调试和解决这个问题?

标签: amazon-web-servicesamazon-s3aws-lambda

解决方案


您没有提到 Lambda 需要多长时间才能执行。并发执行的默认限制是 1000。如果您上传文件的速度超过了 1000 个 Lambda 的处理速度,那么您需要联系 AWS 支持并提高您的限制。

同样来自文档

Amazon S3 事件通知通常会在几秒钟内发送事件,但有时可能需要一分钟或更长时间。在极少数情况下,事件可能会丢失。

如果您的应用程序需要特定的语义(例如,确保不会遗漏任何事件,或者操作只运行一次),我们建议您在设计应用程序时考虑遗漏和重复的事件。您可以使用 LIST Objects API 或 Amazon S3 清单报告来审核错过的事件。LIST Objects API 和 Amazon S3 清单报告受制于最终一致性,可能不会反映最近添加或删除的对象。


推荐阅读