繁体   English   中英

使用 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.)Recoverable error occurred (Rate Exceeded.)

当我尝试调用一个没有 lambda 的函数时,它会随着响应执行。

这是我的无服务器配置:

配置

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM