IAM と AWS STS の API スロットリングエラーや「レートを超過しました」エラーを解決する方法を教えてください。

所要時間1分
0

アプリケーションに次のようなエラーメッセージが表示されます。「スロットリング: レートを超過しました。ステータスコード: 400、」

簡単な説明

AWS マネジメントコンソール、AWS コマンドラインインターフェイス (AWS CLI)、アプリケーションからの API 呼び出しは、AWS アカウントの最大レート制限に寄与します。

**注:**AWS サービスのレート制限を上げることはできません。

解決方法

スロットリングエラーを回避するため、次のベストプラクティスに従います。

  • アプリケーションのコードにエクスポネンシャルバックオフを実装します。エクスポネンシャルバックオフにより、AWS への API 呼び出しがスロットリングされるたびに待機時間が長くなります。最大遅延回数と最大再試行回数は、アプリケーションによって異なります。
    : AWS SDK には、自動再試行ロジックとエクスポネンシャルバックオフアルゴリズムが実装されています。
  • アプリケーションによっては、キャッシュを実装すると API 呼び出しのレートを下げることができます。たとえば、アプリケーションによる呼び出しがクロスアカウントワークフローの API 呼び出し AssumeRole の場合です。つまり、受け取った一時的な認証情報を保存して、複数のクロスアカウント呼び出しで再利用できる、ということです。また、クロスアカウント API 呼び出しを行うたびに新たな AssumeRole 呼び出しを行う必要はありません。
  • アプリケーションで AssumeRole を呼び出して認証情報をキャッシュする場合は、ロールの一時的な認証情報最大セッション時間を確認します。一時的な認証情報の有効時間を長めに取ると、AssumeRole を頻繁に呼び出す必要がなくなります。
  • API 呼び出しを一度にすべて呼び出すのではなく、API 呼び出しのための時間を長めに取って分散します。たとえば、AWS Identity and Access Management (IAM) ユーザー/ロールのアクセス権限を監査するため日常的に SimulatePrincipalPolicyGenerateServiceLastAccessedDetails を呼び出すジョブがあるアプリケーションなどです。API 呼び出しを複数同時に実行するのではなく、それぞれのタイミングをずらします。
  • CreatePolicyVersion のような API 呼び出しを使用して IAM ポリシーのアクセス権限を動的に変更するアプリケーションの場合は、別の方法を検討します。たとえば、セッションポリシーを IAM ロールの割り当て時に使用するなどです。
  • AWS Security Token Service (AWS STS) スロットリングエラーが発生したら、すべての AWS STS 呼び出しをグローバルエンドポイントに送信する代わりに、AWS リージョナル STS エンドポイントを使用します。スロットリング制限はエンドポイント別に設けられています。リージョンの AWS STS エンドポイントにすると、アプリケーションの AWS STS API 呼び出しの応答時間を短縮できます。
  • スロットリング制限は AWS アカウント別に設けているため、AWS Organizations を使用してワークロードを複数のアカウントに分散することを検討します。新しい AWS アカウントの作成に追加費用はかかりません。また、Organizations は一括請求となっています。サービスコントロールポリシー (SCP) を使用すると、IAM ユーザー/ロールの最大権限をAWS アカウント全体にわたって制御できます。詳細については、「AWS Organizations でアカウントを管理する」と「AWS Organizations を使い始めるにはどうすればいいですか?」を参照してください。

関連情報

AWS CloudTrail ログ検索をするために Amazon Athena テーブルを自動的に作成する方法を教えてください。

どの API 呼び出しが「レートを超過しました」エラーの原因になっているかを探るにはどうすればよいですか?

コメントはありません

関連するコンテンツ