再試行とタイムアウト - AWS SDK for .NET

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

再試行とタイムアウト

AWS SDK for .NET では、AWS のサービスへの HTTP リクエストの再試行回数とタイムアウト値を設定できます。再試行とタイムアウトのデフォルト値がアプリケーションで適切でない場合は、特定の要件に対してそれらの値を調整できますが、それによってアプリケーションの動作にどのように影響するかを理解しておくことが重要です。

再試行とタイムアウトに使用する値を決定するには、以下の点を検討します。

  • ネットワーク接続の速度が低下している場合、または AWS のサービスに到達できない場合に、AWS SDK for .NET およびアプリケーションがどのように対応するか。呼び出しがすぐに失敗するか、またはユーザーに代わって呼び出しが再試行され続けるか、どちらが適切か。

  • 応答性が必要なユーザー対応アプリケーションまたはウェブサイトであるか、またはレイテンシーの増加に耐性があるバックグラウンド処理ジョブであるか。

  • アプリケーションが低レイテンシーの信頼性の高いネットワークでデプロイされているか、または信頼性が低い接続でリモートの場所にデプロイされているか。

再試行

概要

AWS SDK for .NET では、サーバー側のスロットリングまたは接続中断によって失敗したリクエストを再試行できます。サービス設定クラスの 2 つのプロパティを使用して、サービスクライアントの再試行動作を指定します。サービス設定クラスは、 AWS SDK for .NET API リファレンス の抽象 Amazon.Runtime.ClientConfig クラスからこれらのプロパティを継承します。

  • RetryMode は、Amazon.Runtime.RequestRetryMode 列挙で定義されている 3 つの再試行モードのいずれかを指定します。

    アプリケーションのデフォルト値は、AWS_RETRY_MODE 環境変数または共有 AWS config ファイルの retry_mode 設定によって制御されます。

  • MaxErrorRetry では、サービスクライアントレベルで許可される再試行の回数を指定します。SDK では、指定した回数だけ操作が再試行された後に、失敗となり、例外がスローされます。

    アプリケーションのデフォルト値は、AWS_MAX_ATTEMPTS 環境変数または共有 AWS config ファイルの max_attempts 設定によって制御されます。

これらのプロパティの詳細については、 AWS SDK for .NET API リファレンスの抽象 Amazon.Runtime.ClientConfig クラスを参照してください。RetryMode の各値は、次の表に示すように、デフォルトでは MaxErrorRetry の特定の値に対応します。

RetryMode Corresponding MaxErrorRetry (Amazon DynamoDB) Corresponding MaxErrorRetry (all others)
Legacy 10 4
Standard 10 2
Adaptive (experimental) 10 2

Behavior

アプリケーションの起動時

アプリケーションの起動時に、RetryMode および MaxErrorRetry のデフォルト値が SDK によって設定されます。これらのデフォルト値は、他の値を指定しない限り、サービスクライアントを作成するときに使用されます。

  • 環境でプロパティが設定されていない場合は、RetryMode のデフォルトが Legacy として設定され、MaxErrorRetry のデフォルトが上記の表の対応する値で設定されます。

  • 環境で再試行モードが設定されている場合は、その値が RetryMode のデフォルトとして使用されます。MaxErrorRetry のデフォルトは、最大エラー数の値も環境で設定されていない限り、上記の表の対応する値で設定されます (次の説明を参照)。

  • 環境で最大エラー数の値が設定されている場合は、その値が MaxErrorRetry のデフォルトとして使用されます。Amazon DynamoDB はこのルールの例外です。MaxErrorRetry のデフォルトの DynamoDB 値は、常に上記の表の値になります。

アプリケーションの実行時

サービスクライアントを作成すると、RetryMode および MaxErrorRetry の次のデフォルト値を使用できます。または、前述したように、他の値を指定することもできます。他の値を指定するには、サービスクライアントの作成時に AmazonDynamoDBConfigAmazonSQSConfig などのサービス設定オブジェクトを作成して含めます。

サービスクライアントの作成後にこれらの値を変更することはできません。

考慮事項

再試行が発生すると、リクエストのレイテンシーが増加します。アプリケーションでのリクエストレイテンシーの合計とエラー発生率の制限に基づいて、再試行回数を設定する必要があります。

タイムアウト

AWS SDK for .NET では、サービスクライアントレベルで、リクエストのタイムアウトとソケットの読み取り/書き込みのタイムアウト値を設定できます。これらの値は、 Timeoutおよび抽象 Amazon.Runtime.ClientConfig クラスのReadWriteTimeoutプロパティで指定されます。これらの値は、AWSサービスクライアントHttpWebRequestオブジェクトによって作成されたオブジェクトの プロパティTimeoutReadWriteTimeoutプロパティとして渡されます。デフォルトでは、Timeout の値は 100 秒であり、ReadWriteTimeout の値は 300 秒です。

ネットワークのレイテンシーが大きい場合、または操作が再試行される条件が存在する場合に、長いタイムアウト値と大きい再試行回数を使用すると、一部の SDK 操作が応答していないように見えることがあります。

注記

ポータブルクラスライブラリ (PCL) をターゲットAWS SDK for .NETとする のバージョンは、 HttpClient クラスではなく HttpWebRequest クラスを使用し、Timeout プロパティのみをサポートします。

デフォルトのタイムアウト値の例外を次に示します。これらの値は、タイムアウト値を明示的に設定するとオーバーライドされます。

次の例では、標準再試行モード、3 回の最大再試行、10 秒のタイムアウト、および 10 秒の読み取り/書き込みタイムアウト (該当する場合) を指定する方法を示しています。AmazonS3Client コンストラクタには AmazonS3Config オブジェクトが指定されています。

var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK for .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });