我们该如何解决这个问题?
AWS Lambda TooManyRequestsException: Rate Exceeded
我们该如何解决这个问题?
AWS Lambda TooManyRequestsException: Rate Exceeded
正如 Michael 所指出的那样,当你达到文档中记录的 默认 "safety" 限制 100个并发执行时,你将看到以下错误信息::
"AWS Lambda每个区域每个账户有一个默认的安全节流阀,最多可以同时执行100个操作。如果你想要增加这个并发执行的数量,请前往我们的 Support Center..."
解决方案是打开一个支持工单,并提供以下信息:
Limit increase request 1
Service: Lambda
Region: EU (Ireland)
Limit name: concurrent requests (average duration * average TPS)
New limit value: 2000
然后在工单/请求的正文中,尝试 估算 您的使用模式:
Expected average requests per second: 200
Expected peak requests per second: 2000
Expected function duration: 2 seconds
Function memory size: 1000mb
Invocation Type: Request-response
Event Source: Api Gateway & Lambda<->Lambda
如果您没有支付高级支持,则从AWS支持团队得到响应可能需要一段时间,因此最好在开发/预发布期间加载测试应用程序,并请求在启动应用程序之前增加并发调用。
在我们的情况下,从最初的支持请求到获取调用限制增加花费了45小时。
AWS支持人员非常友好,只是获取服务级别增加的过程感觉像是漫长时光(近两天!),如果我们的发布是公开的,那将是致命的!
当我将保留并发设置为100以下时,遇到了这个问题。同时使用aws-sdk
发送超过100个以上的请求。
事实上,当保留并发比较低时,任何超过您并发设置的并发请求(例如,当并发为20时发送21个请求)都会抛出TooManyRequestsException
异常。我不确定是我的账户问题还是像@nelsonic所提到的:默认限制。
但是当我将并发度增加到不少于100时,并且如果没有起作用,继续增加,那么问题就解决了。希望这可以帮助您。
当您的 Lambda 并发值较低时,会出现此错误。
在您的 Lambda 配置设置中,应将并发设置为:使用未预留帐户并发(例如:20,000 -> 这将是为您的帐户提供的值)
即使对于给定的 Lambda 版本,您的预留并发也将使用并发值的容量
参考:
保留并发 - 保证函数的最大并发实例数。一旦函数保留了并发,其他函数就不能使用它。Lambda 允许您免费配置函数的保留并发。
预留并发 - 允许您请求某个执行环境的特定数量,该执行环境已初始化并准备好立即响应函数的调用。此选项会产生额外费用。
aws lambda delete-function --function-name ...
? - Frederic Henri