使用 API 网关和无服务器框架的 AWS Lambda 超出速率

Rate Exceeded on AWS Lambda Using API Gateway and serverless framework

当我尝试调用具有 HTTP 事件的方法时,它会导致 500 Internal server error

在 CloudWatch 日志上它显示 Recoverable error occurred (Rate Exceeded.)

当我尝试调用不带 lambda 的函数时,它会响应执行。

这是我的无服务器配置:

您已将 Lambda 的 reservedConcurrency 设置为 0。这将阻止您的 Lambda 被调用。当你的函数被调用但你不确定为什么并且你想立即停止它时,将它设置为 0 通常很有用。

如果您想调用它,请将 reservedConcurrency 更改为正整数(默认情况下,它可以是 <= 1000 的正整数,但您可以通过联系 AWS 增加此限制)或简单地删除.yml 文件中的 reservedConcurrency 属性,因为它将使用默认值。

为什么还要使用 reservedConcurrency?好吧,假设您的 Lambda 函数是由来自 API 网关的请求触发的。假设您得到 400(高峰时间)requests/second,并且在每次请求时,都会触发另外两个 Lambda 函数,一个用于为给定图像生成缩略图,另一个用于在 DynamoDB 中插入一些元数据。理论上,您将同时拥有 1200 个 Lambda 函数 运行(假设您的所有 Lambda 函数都在不到一秒内完成执行)。这会导致限制,因为 Lambda 函数的默认并发执行数是 1000。但是缩略图生成是否与来自 API 网关的请求一样重要?很可能不是,因为它自然是最终一致的任务,因此您可以将缩略图 Lambda 上的 reservedConcurrency 设置为仅 200,这样您就不会用完并发性,这意味着其他功能将能够启动以执行某些操作在给定的时间点更有用(在我们的示例中,接收 HTTP 请求比生成缩略图更重要)。然后,剩下的 800 个并发可以在从 API 网关触发的函数和将数据插入 DynamoDB 的函数之间进行拆分,从而防止对重要内容进行节流并使不那么重要的内容最终保持一致。