如何防止 CloudFormation 中出现 “Rate exceeded” 错误?

1 分钟阅读
0

我想防止在使用 AWS CloudFormation 时出现 “Rate exceeded” 错误。

简短描述

当对 AWS 服务的 API 调用超过允许的最大 API 请求时,就会出现 Rate exceeded 错误。发生这种情况时,API 调用会受到限制。

解决方法

下游 AWS 服务超过了允许的最大速率

为防止 AWS 服务在 CloudFormation 堆栈操作期间超过允许的最大速率,请使用以下选项。

使用 DependsOn 属性

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

要指定创建或更新每个依赖资源的时间,请使用 DependsOn 属性。例如,如果资源 B 依赖资源 A,则可以指定必须在资源 B 之前创建或更新资源 A。这种规范可限制同时发生的 API 调用次数,减少节流。也可以将 DependsOn 属性与嵌套堆栈结合使用。

申请增加配额

如果 DependsOn 属性无法解决 Rate exceeded 错误,则可以申请增加配额。在申请增加下游 API 的配额之前,请先确定 API 调用,找出超过调用速率的调用。

在配额增加申请中,写明您的 AWS 区域、API 限制的时间范围以及申请增加的理由。

AWS CloudFormation API 超过允许的最大速率

为防止 CloudFormation API 调用超过允许的最大 API 请求,请使用以下选项。

实施指数回退

当您使用 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 请求数,请一次创建或更新一个堆栈。

申请增加配额

如果无法创建或更新堆栈,可以申请增加 CloudFormation API 的配额。在申请增加配额之前,请先确定 API 调用,找出超过调用速率的调用。

在配额增加申请中,写明您的 AWS 区域、API 限制的时间范围以及申请增加的理由。

AWS 官方
AWS 官方已更新 8 个月前