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

最終更新日: 2022 年 1 月 24 日

アプリケーションに次のようなエラーメッセージが表示されます。

「スロットリング: 速度を超過しました。ステータスコード:400,」

簡単な説明

AWS マネジメントコンソール、AWS Command Line Interface (AWS CLI)、およびアプリケーションからの API コールは、AWS アカウントの最大レート制限に影響します。

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

解決方法

スロットリングエラーを回避するには、次のベストプラクティスに従ってください。

  • アプリケーションコードにエクスポネンシャルバックオフを実装します。エクスポネンシャルバックオフを使用すると、AWS への API コールのスロットリングが発生するたびに待機時間を長くすることができます。アプリケーションによっては、最大遅延回数と最大再試行回数が異なる場合があります。
    : AWS SDK は、自動再試行ロジックとエクスポネンシャルバックオフアルゴリズムを実装します。
  • 一部のアプリケーションでは、キャッシュを実装して API コールの速度を下げることができます。例えば、アプリケーションがクロスアカウントワークフローに対して API コール AssumeRole を呼び出した場合、提供される一時的な認証情報を保存して、複数のクロスアカウント呼び出しで再利用できます。したがって、クロスアカウント API コールごとに新しい AssumeRole 呼び出しを行う必要はありません。
  • アプリケーションが AssumeRole を呼び出して認証情報をキャッシュしている場合は、ロールの一時認証情報最大セッション期間を確認できます。一時的な認証情報の期間を長くすると、AssumeRole を頻繁に呼び出す必要がなくなります。
  • すべての API を一度に呼び出すのではなく、API コールを長期間にわたって分散します。例えば、SimulatePrincipalPolicy または GenerateServiceLastAccessedDetails を呼び出す日次ジョブがあるアプリケーションで、AWS Identity and Access Management (IAM) ユーザーとロールのアクセス許可を監査できます。複数の API コールを同時に実行する代わりに、実行時間をずらすことができます。
  • CreatePolicyVersion などの API コールを使用して IAM ポリシーのアクセス許可を動的に変更するアプリケーションの場合は別の方法を検討してください。例えば、IAM ロールの引き受け中にセッションポリシーを使用できます。
  • AWS Security Token Service (AWS STS) スロットリングエラーの場合は、すべての AWS STS コールをグローバルエンドポイントに送信するのではなく、リージョンの STS エンドポイントを使用することを検討してください。各エンドポイントには個別のスロットリング制限があります。リージョンの AWS STS エンドポイントを使用すると、AWS STS API コールでのアプリケーションの応答時間を短縮できます。
  • AWS アカウントで大量の API コールを行っている IAM ユーザーまたはロールが識別できない場合は、AWS CloudTrail を使用してイベント履歴を表示します。Amazon Athena を使用して SQL クエリを実行し、CloudTrail ログをフィルターすることもできます。手順については、「どの API 呼び出しが「Rate exceeded」エラーを引き起こしているかを確認するにはどうすればよいですか?」を参照してください。
  • AWS アカウントには個別のスロットリング制限があるため、AWS Organizations を使用してワークロードを複数のアカウントに分散することを検討してください。新しい AWS アカウントを作成しても追加料金は発生しません。Organizations では一括請求を利用できます。サービスコントロールポリシー (SCP) を使用すると、AWS アカウントでの IAM ユーザーとロールの最大アクセス許可数を制御できます。詳細については、「AWS Organizations によるアカウントの管理」と「AWS Organizations の開始方法を教えてください」を参照してください。