我在使用 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 节流的时间范围,以及增加配额的原因。