CloudFormation で「Rate exceeded」(レート超過) エラーの発生を防ぐにはどうすればよいですか?
最終更新日: 2022 年 4 月 12 日
AWS CloudFormation を使用すると、「Rate exceeded」(レート超過) エラーが表示されることがあります。このエラーの発生を防ぐにはどうすればよいですか?
簡単な説明
「Rate exceeded」(レート超過) エラーは、AWS のサービスに対する API コールが許可された API リクエストの最大数を超過し、API コールがスロットリングされた場合に発生します。通常、これらのエラーは一時的なもので、API コールが少なくなると自動的に解決されます。
「Rate exceeded」(レート超過) エラーの発生を防ぐために、次を実行できます。
- エクスポネンシャルバックオフを実装する
- スタックを 1 つずつ作成または更新する
- 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
}
スタックを 1 つずつ作成または更新する
複数の CloudFormation スタックを同時に作成または更新すると、多くの API コールが同時に実行される可能性があります。API コールが許容される API リクエストの最大数を超過しないようにするには、一度に 1 つのスタックを作成または更新します。
DependsOn 属性を使用する
リソース間に依存関係が定義されていない限り、CloudFormation はリソースの作成と更新を同時に行います。DependsOn 属性は、同時更新を制御するためにリソース間の依存関係を定義します。
DependsOn 属性を使用すると、依存する各リソースを作成または更新するタイミングを指定できます。例えば、リソース B がリソース A に依存している場合、リソース A をリソース B より前に作成または更新するように指定できます。これにより、同時に実行される API コールの数が制限され、スロットリングの発生が減少します。ネストされたスタックで DependsOn 属性を使用することもできます。
クォータの引き上げをリクエストする
上記の解決策がお客様の状況に適したものでない場合は、クォータの引き上げをリクエストできます。クォータの引き上げをリクエストする前に、API コールを特定して、コールレートを超えているコールを特定します。
クォータの引き上げリクエストには、AWS リージョン、API スロットリングの期間、および引き上げの理由を含めてください。