AWS CloudFormation を使用するときに「Rate exceeded」(レート超過) エラーが表示されないようにしようと思います。
簡単な説明
AWS サービスに対する API コール数が API リクエストの最大許容数を超えると、「Rate exceeded」(レート超過) エラーが生成されます。これが発生すると、API コールがスロットリングされます。
解決策
ダウンストリーム AWS サービスで最大許容レートを超えている
AWS サービスで CloudFormation スタックの操作中に最大許容レートを超えないようにするには、次のオプションを使用します。
DependsOn 属性を使用する
リソース間の依存関係が定義されていない限り、CloudFormation ではリソースの作成や更新が複数同時に行われます。DependsOn 属性でリソース間の依存関係を定義することで、同時更新を制御します。
各依存リソースの作成や更新をいつ行うかを指定するには、DependsOn 属性を使用します。たとえば、リソース B がリソース A に依存している場合、リソース A の作成や更新はリソース B より前にする必要がある、と指定できます。この仕様により、同時に発生する 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
}
スタックの作成や更新を一度に 1 つにする
CloudFormation スタックの作成や更新を複数同時に行うと、API コールが多くなりすぎることがあります。API コールで最大許容 API リクエスト数を超えないようにするには、スタックの作成や更新を一度に 1 つにします。
クォータ引き上げをリクエストする
スタックの作成や更新ができない場合は、CloudFormation API のクォータ引き上げをリクエストします。クォータ引き上げをリクエストするより先に、コールレートを超えている API コールを特定します。
クォータ引き上げのリクエストには、AWS リージョン、API スロットリングの時間枠、引き上げの理由を記載します。