AWS Lambda TooManyRequestsException: Rate Exceeded 亚马逊网络服务(AWS)的Lambda功能出现了过多请求异常:超出速率限制。

28
尝试执行Amazon Web Services (AWS) Lambda函数(多次)时,我们看到了以下错误:

AWS Lambda TooManyRequestsException: Rate Exceeded

我们该如何解决这个问题?

你能否通过CLI清除你的Lambda函数,使用命令aws lambda delete-function --function-name ... - Frederic Henri
1
你是否达到了文档中记录的默认安全限制 100个并发调用? - Michael - sqlbot
1
该安全限制已被替换:https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html#concurrent-execution-safety-limit - Francis Upton IV
3个回答

35

正如 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-lambda-limits-increase-request aws-lambda-limits-request-sorted

AWS支持人员非常友好,只是获取服务级别增加的过程感觉像是漫长时光近两天!),如果我们的发布是公开的,那将是致命的!


1
如果您拥有一个业务关键的公共平台,那么您肯定会支付企业支持合同并获得即时响应,对吧? - geotheory
@geotheory 如果您已经在生产中使用Lambda并且处于“BAU”状态,那么高管们会看到支付支持合同的好处,但是在开发应用程序时,它被视为2016年的“玩具”。显然,现在(2019年)Lambda和Serverless已经被证明是可行的,因此很容易获得支持的批准。 :-) - nelsonic
1
啊,是的,那听起来是一个令人沮丧的处境。 - geotheory
1
看起来他们现在已经更改了这个:https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html#concurrent-execution-safety-limit - Francis Upton IV

4

当我将保留并发设置为100以下时,遇到了这个问题。同时使用aws-sdk发送超过100个以上的请求。

事实上,当保留并发比较低时,任何超过您并发设置的并发请求(例如,当并发为20时发送21个请求)都会抛出TooManyRequestsException异常。我不确定是我的账户问题还是像@nelsonic所提到的:默认限制。

但是当我将并发度增加到不少于100时,并且如果没有起作用,继续增加,那么问题就解决了。希望这可以帮助您。


0

当您的 Lambda 并发值较低时,会出现此错误。

在您的 Lambda 配置设置中,应将并发设置为:使用未预留帐户并发(例如:20,000 -> 这将是为您的帐户提供的值)

即使对于给定的 Lambda 版本,您的预留并发也将使用并发值的容量

参考:

保留并发 - 保证函数的最大并发实例数。一旦函数保留了并发,其他函数就不能使用它。Lambda 允许您免费配置函数的保留并发。

预留并发 - 允许您请求某个执行环境的特定数量,该执行环境已初始化并准备好立即响应函数的调用。此选项会产生额外费用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接