再試行動作 - AWS SDK とツール

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

再試行動作

再試行動作には、SDK が AWS のサービスへのリクエストによる障害からの回復を試みるかに関する設定が含まれます。

この機能を設定するには、以下のように使用します。

max_attempts- AWS config 共有ファイル設定
AWS_MAX_ATTEMPTS - 環境変数
aws.maxAttempts-JVM システムプロパティ:Java/Kotlin のみ

1 回のリクエストで行う最大試行回数を指定します。

デフォルト値:この値が指定されていない場合、デフォルトは retry_mode の設定の値によって異なります。

  • retry_modelegacy の場合 – SDK 固有のデフォルト値を使用します(max_attempts デフォルトについては、特定の SDK ガイドまたは SDK のコードベースを確認してください)。

  • retry_modestandard の場合 – 3 回試行します。

  • retry_modeadaptive の場合 – 3 回試行します。

有効な値: 0 より大きい数値。

retry_mode AWS config-共有ファイル設定
AWS_RETRY_MODE - 環境変数
aws.retryMode-JVM システムプロパティ:Java/Kotlin のみ

SDK または開発者ツールが再試行を試みる方法を指定します。

デフォルト値: legacy はデフォルトの再試行方法です。

有効値:

  • legacy – ご使用の SDK に固有(特定の SDK ガイドまたは SDK のコードベースを確認してください)。

  • standard – AWS SDK 全体にわたる再試行規則の標準セット。このモードには、再試行される標準エラーセットと再試行クォータのサポートが含まれます。max_attempts が明示的に設定されていない限り、このモードでのデフォルトの最大試行回数は 3 回です。

  • adaptive – 標準モードの機能を含みながら、クライアント側の自動スロットリングを含む実験的な再試行モード。このモードは実験段階であるため、将来的に動作が変更される可能性があります。

以下は、standardadaptive 再試行モードの両方の大まかな擬似コードです。

MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }

擬似コードで使用されるコンポーネントの詳細は次のとおりです。

GetSendToken:

トークンバケットは adaptive リトライモードでのみ使用されます。トークンバケットでは、リクエストを開始するためにトークンを用意しておく必要があるため、リクエストレートが最大になります。SDK クライアントは、リクエストを迅速に失敗させるか、トークンが使用可能になるまでブロックするように設定できます。

クライアント側のレート制限は、最初は、トークンの許容量を上限とする任意のレートでリクエストを送信できるようにするアルゴリズムです。ただし、スロットリングされた応答が検出されると、クライアントはそれに応じて制限されます。 rate-of-request また、応答の受信が正常に終了すると、それに応じてトークンの許容量が増加します。

適応型レート制限を使用すると、SDK のキャパシティによりよく対応するために、リクエストの送信速度を遅くすることができます。 AWS のサービス

SendHTTPRequest:

ほとんどの AWS SDK は接続プールを使用する HTTP ライブラリを使用しているため、HTTP リクエストを行う際に既存の接続を再利用できます。通常、スロットリングエラーが原因でリクエストを再試行すると、接続は再利用されます。一時的なエラーが原因で再試行しても、リクエストは再利用されません。

RequestBookkeeping:

リクエストが正常に終了したら、再試行クォータを更新する必要があります。adaptive 再試行モードの場合のみ、maxsendrate 状態変数は受信した応答の種類に基づいて更新されます。

Retryable:

このステップでは、以下に基づいて応答を再試行できるかどうかを判断します。

  • HTTP ステータスコード 。

  • サービスから返されたエラーコード。

  • 接続エラーとは、SDK が受信したエラーの中で、サービスからの HTTP 応答が受信されないすべてのエラーを指します。

一時的なエラー(HTTP ステータスコード 400、408、500、502、503、504)とスロットリングエラー(HTTP ステータスコード 400、403、429、502、503、509)はすべて再試行される可能性があります。SDK の再試行動作は、エラーコードまたはサービスからのその他のデータと組み合わせて決定されます。

MAX_ATTEMPTS:

config ファイル設定または環境変数によって指定されます。

HasRetryQuota

このステップでは、トークンを再試行クォータバケットで使用できるようにすることで、再試行リクエストをスロットルします。リトライクォータバケットは、正常に終了する可能性が低い再試行を防ぐためのメカニズムです。これらのクォータは SDK に依存し、多くの場合クライアントに依存し、場合によってはサービスエンドポイントにも依存します。利用可能な再試行クォータトークンは、さまざまな理由でリクエストが失敗すると削除され、成功すると補充されます。トークンがなくなると、再試行ループは終了します。

ExponentialBackoff

再試行可能なエラーの場合、再試行遅延は台形型エクスポネンシャルバックオフを使用して計算されます。SDK はジッター付きの切り捨て二進エクスポネンシャルバックオフを使用します。次のアルゴリズムは、i リクエストに対する応答の休止時間(秒単位)がどのように定義されているかを示しています。

seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)

前述のアルゴリズムでは、以下の値が適用されます。

b = random number within the range of: 0 <= b <= 1

r = 2

ほとんどの SDK では MAX_BACKOFF = 20 seconds です。確認のため、特定の SDK ガイドまたはソースコードを参照してください。

SDK との互換性 AWS

以下の SDK は、このトピックで説明する機能と設定をサポートします。部分的な例外があれば、すべて記載されています。すべての JVM システムプロパティ設定は、 AWS SDK for Java とでのみサポートされます。 AWS SDK for Kotlin

SDK サポート 注意または詳細情報
AWS CLI v2 Yes
SDK for C++ Yes
SDK for Go V2 (1.x) Yes
SDK for Go 1.x (V1) No
SDK for Java 2.x Yes
SDK for Java 1.x Yes
3.x 用 JavaScript SDK Yes
2.x JavaScript 用の SDK No 最大再試行回数、ジッターを伴うエクスポネンシャルバックオフ、再試行バックオフのカスタムメソッドのオプションをサポートします。
SDK for Kotlin Yes
SDK for .NET 3.x Yes
SDK for PHP 3.x Yes
SDK for Python (Boto3) Yes
SDK for Ruby 3.x Yes
SDK for Rust Yes
用ツール PowerShell Yes