AWS CLI での再試行 AWS CLI - AWS Command Line Interface

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS CLI での再試行 AWS CLI

このトピックでは AWS CLI 、予期しない問題により が AWS サービスへの呼び出しが失敗する様子について説明します。これらの問題は、サーバー側で発生するか、呼び出しを実行しようとしている AWS のサービスからのレート制限が原因で発生する可能性があります。通常、これらの種類のエラーは特別な処理を必要とせず、多くの場合、短い待機期間の後に自動的に再度呼び出しが実行されます。 AWS CLI には、このようなエラーや例外が発生した場合に、 AWS サービスへのクライアント呼び出しを再試行するのに役立つ多くの機能が用意されています。

使用可能な再試行モード

AWS CLI には、バージョンに応じて選択できる複数のモードがあります。

レガシー再試行モード

レガシーモードでは、以下を含む、機能が制限された古い再試行ハンドラーが使用されます。

  • 最大再試行回数のデフォルト値は 4 で、呼び出しの試行回数は合計 5 回です。この値は、max_attempts 設定パラメータを使用して上書きできます。

  • DynamoDB では、最大再試行回数のデフォルト値は 9 で、呼び出しの試行回数は合計 10 回です。この値は、max_attempts 設定パラメータを使用して上書きできます。

  • 次の限られた数のエラー/例外を再試行します。

    • 一般的なソケット/接続エラー:

      • ConnectionError

      • ConnectionClosedError

      • ReadTimeoutError

      • EndpointConnectionError

    • サービス側のスロットリング/制限エラーと例外:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • ProvisionedThroughputExceededException

  • 429、500、502、503、504、509 など、いくつかのHTTPステータスコードで再試行します。

  • 再試行には、基本係数 2 によるエクスポネンシャルバックオフが含まれます。

標準再試行モード

標準モードは、レガシーよりも多くの機能を備えた AWS SDKs全体の再試行ルールの標準セットです。このモードは、 AWS CLI バージョン 2 のデフォルトです。標準モードは AWS CLI バージョン 2 用に作成され、 AWS CLI バージョン 1 にバックポートされます。標準モードの機能は次のとおりです。

  • 最大再試行回数のデフォルト値は 2 で、合計で 3 回呼び出しが試みられます。この値は、max_attempts 設定パラメータを使用して上書きできます。

  • 次の拡張されたエラー/例外リストを再試行します。

    • 一時的なエラー/例外

      • RequestTimeout

      • RequestTimeoutException

      • PriorRequestNotComplete

      • ConnectionError

      • HTTPClientError

    • サービス側のスロットリング/制限エラーと例外:

      • Throttling

      • ThrottlingException

      • ThrottledException

      • RequestThrottledException

      • TooManyRequestsException

      • ProvisionedThroughputExceededException

      • TransactionInProgressException

      • RequestLimitExceeded

      • BandwidthLimitExceeded

      • LimitExceededException

      • RequestThrottled

      • SlowDown

      • EC2ThrottledException

  • わかりにくい一時的なエラーコードに対して再試行します。具体的には、これらのHTTPステータスコード: 500、502、503、504。

  • 再試行には、最大バックオフ時間が 20 秒の場合、基本係数 2 によるエクスポネンシャルバックオフが含まれます。

アダプティブ再試行モード

警告

アダプティブモードは実験的なモードであり、機能と動作の両方について変更される可能性があります。

アダプティブ再試行モードは、標準モードのすべての機能を含む実験的な再試行モードです。アダプティブモードでは、標準モード機能に加えて、トークンバケットおよびレート制限変数の使用を通じて、クライアント側のレート制限も導入されます。これらの変数は、再試行するたびに動的に更新されます。このモードは、 AWS サービスからのエラー/例外状態のレスポンスに適応するクライアント側の再試行に柔軟性を提供します。

新しい再試行のたびに、アダプティブモードは、 AWS サービスからのレスポンスに表示されるエラー、例外、またはHTTPステータスコードに基づいてレート制限変数を変更します。その後、クライアントの新しい呼び出しレートを計算するためにこれらのレート制限変数が使用されす。サービスからの AWS 各例外/エラーまたは非成功HTTPレスポンス (上記のリストに記載) は、成功に達するか、トークンバケットが枯渇するか、設定された最大試行値に達するまで再試行が発生すると、レート制限変数を更新します。

再試行モードの設定

AWS CLI には、クライアントオブジェクトの作成時に考慮すべきさまざまな再試行設定と設定方法が含まれています。

使用可能な設定方法

では AWS CLI、ユーザーは次の方法で再試行を設定できます。

  • 環境変数

  • AWS CLI 設定ファイル

次の再試行オプションをカスタマイズできます。

  • 再試行モード - が AWS CLI 使用する再試行モードを指定します。前述のように、レガシー、標準、アダプティブの 3 つの再試行モードを使用できます。AWS CLI バージョン 2 が標準 です。

  • 最大試行回数 - AWS CLI 再試行ハンドラーが使用する最大再試行回数の値を指定します。最初の呼び出しは、指定した値にカウントされます。デフォルト値は 5 です。

環境変数での再試行設定の定義

の再試行設定を定義するには AWS CLI、オペレーティングシステムの環境変数を更新します。

再試行環境変数は次のとおりです。

  • AWS_RETRY_MODE

  • AWS_MAX_ATTEMPTS

環境変数の詳細については、「の環境変数の設定 AWS CLI」を参照してください。

設定ファイルでの再試行 AWS 設定の定義

再試行設定を変更するには、グローバル AWS 設定ファイルを更新します。 AWS 設定ファイルのデフォルトの場所は ~/.aws/config です。

AWS 設定ファイルの例を次に示します。

[default] retry_mode = standard max_attempts = 6

設定ファイルの詳細については、「の設定と認証情報ファイルの設定 AWS CLI」を参照してください。

再試行ログの表示

は Boto3 の再試行方法とログ記録 AWS CLI を使用します。任意のコマンドで --debug オプションを使用して、デバッグログを受け取ることができます。--debugオプションの使用方法の詳細については、「のコマンドラインオプション AWS CLI」を参照してください。

デバッグログで「retry」を検索すると、必要な再試行情報が表示されます。再試行のクライアントログエントリは、有効にした再試行モードによって異なります。

レガシーモード:

再試行メッセージは、botocore.retryhandler によって生成されます。次の 3 つのメッセージのいずれかが表示されます。

  • No retry needed

  • Retry needed, action of: <action_name>

  • Reached the maximum number of retry attempts: <attempt_number>

標準モードまたはアダプティブモード:

再試行メッセージは、botocore.retries.standard によって生成されます。次の 3 つのメッセージのいずれかが表示されます。

  • No retrying request

  • Retry needed, retrying request after delay of: <delay_value>

  • Retry needed but retry quota reached, not retrying request

botocore 再試行の完全な定義ファイルについては、botocore GitHub リポジトリ_retry.json を参照してください。