如何防止 CloudFormation 中出现“Rate exceeded(超出速率)”错误?

上次更新日期:2022 年 4 月 12 日

我在使用 AWS CloudFormation 时,有时会收到“Rate exceeded(超出速率)”错误。如何防止发生此错误?

简短描述

当对某项 AWS 服务的 API 调用超出允许的最大 API 请求数时,就会出现 Rate exceeded(超出速率)错误,并且 API 调用会受到限制。通常,这些错误是暂时的,随着 API 调用的减少,它们会自行解决。

要防止出现 Rate exceeded(超出速率)错误,您可以:

  • 实施指数回退
  • 一次创建或更新一个堆栈
  • 使用 DependsOn 属性
  • 请求增加配额

解决方法

实施指数回退

使用 AWS API 端点时,请实施指数回退,减少 API 调用次数。

以下 DescribeStacks API 调用的示例伪代码配置为在特定时间后重试 API 调用:

{
Make ‘DescribeStacks’ API call 

if throttled: wait 2 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 4 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 8 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 16 sec; Make ‘DescribeStacks’ API call 
if throttled: wait 32 sec; Make ‘DescribeStacks’ API call 
}

一次创建或更新一个堆栈

同时创建或更新多个 CloudFormation 堆栈可能会导致同时进行多个 API 调用。为防止 API 调用超出允许的最大 API 请求数量,请一次创建或更新一个堆栈。

使用 DependsOn 属性

除非在资源之间定义了依赖关系,否则 CloudFormation 会同时创建和更新资源。DependsOn 属性定义资源之间的依赖关系,用于控制并发更新。

DependsOn 属性允许您指定创建或更新每个依赖资源的时间。例如,如果资源 B 依赖于资源 A,可以指定在资源 B 之前创建或更新资源 A。这样可以限制同时进行 API 调用的次数,并减少节流的发生。您也可以将 DependsOn 属性与嵌套堆栈结合使用。

请求增加配额

如果上述解决方法无法解决您的问题,可以请求增加配额。在请求增加配额之前,请确定 API 调用,从而确定超出调用速率的调用。

在请求增加配额时,请同时提供您的 AWS 区域、API 节流的时间范围,以及增加配额的原因。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?