のバージョン 4 (V4) SDK for .NET はプレビュー中です。プレビューでこの新しいバージョンに関する情報を確認するには、 AWS SDK for .NET (バージョン 4 プレビュー) デベロッパーガイドを参照してください。
SDK の V4 はプレビュー中であるため、コンテンツは変更される可能性があることに注意してください。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
再試行とタイムアウト
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
環境変数または共有設定ファイルの retry_mode AWS 設定を使用して制御できます。
-
MaxErrorRetry
では、サービスクライアントレベルで許可される再試行の回数を指定します。SDK では、指定した回数だけ操作が再試行された後に、失敗となり、例外がスローされます。アプリケーションのデフォルト値は、
AWS_MAX_ATTEMPTS
環境変数または共有設定ファイルの max_attempts AWS 設定を使用して制御できます。
これらのプロパティの詳細な説明は、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 |
行動
アプリケーションの起動時
アプリケーションの起動時に、RetryMode
および MaxErrorRetry
のデフォルト値が SDK によって設定されます。これらのデフォルト値は、他の値を指定しない限り、サービスクライアントを作成するときに使用されます。
-
環境でプロパティが設定されていない場合は、
RetryMode
のデフォルトが Legacy として設定され、MaxErrorRetry
のデフォルトが上記の表の対応する値で設定されます。 -
環境で再試行モードが設定されている場合は、その値が
RetryMode
のデフォルトとして使用されます。MaxErrorRetry
のデフォルトは、最大エラー数の値も環境で設定されていない限り、上記の表の対応する値で設定されます (次の説明を参照)。 -
環境で最大エラー数の値が設定されている場合は、その値が
MaxErrorRetry
のデフォルトとして使用されます。Amazon DynamoDB はこのルールの例外です。MaxErrorRetry
のデフォルトの DynamoDB 値は、常に上記の表の値になります。
アプリケーションの実行時
サービスクライアントを作成すると、RetryMode
および MaxErrorRetry
の次のデフォルト値を使用できます。または、前述したように、他の値を指定することもできます。他の値を指定するには、サービスクライアントを作成する際に、AmazonDynamoDBConfig や AmazonSQSConfig など、サービス設定オブジェクトを作成して含めます。
サービスクライアントの作成後にこれらの値を変更することはできません。
考慮事項
再試行が発生すると、リクエストのレイテンシーが増加します。アプリケーションでのリクエストレイテンシーの合計とエラー発生率の制限に基づいて、再試行回数を設定する必要があります。
タイムアウト
AWS SDK for .NET では、リクエストタイムアウトとソケットの読み取り/書き込みタイムアウト値をサービスクライアントレベルで設定できます。これらの値は、抽象 Amazon.Runtime.ClientConfig クラスの Timeout
プロパティと ReadWriteTimeout
プロパティで指定されます。これらの値は、 AWS サービスクライアントオブジェクトによって作成された HttpWebRequestTimeout
および ReadWriteTimeout
プロパティとして渡されます。デフォルトでは、Timeout
の値は 100 秒であり、ReadWriteTimeout
の値は 300 秒です。
ネットワークのレイテンシーが大きい場合、または操作が再試行される条件が存在する場合に、長いタイムアウト値と大きい再試行回数を使用すると、一部の SDK 操作が応答していないように見えることがあります。
注記
ポータブルクラスライブラリ (PCL) をターゲット AWS SDK for .NET とする のバージョンは、 クラスではなく HttpClientHttpWebRequest
クラスを使用し、タイムアウト
デフォルトのタイムアウト値の例外を次に示します。これらの値は、タイムアウト値を明示的に設定するとオーバーライドされます。
-
AmazonS3Client.PutObjectAsync()、AmazonS3Client.UploadPartAsync()、AmazonGlacierClient.UploadArchiveAsync() など、呼び出されるメソッドによってストリームがアップロードされると、
Timeout
およびReadWriteTimeout
は最大値に設定されます。 -
.NET Framework をターゲット AWS SDK for .NET とする のバージョンは
Timeout
、すべての AmazonS3Client および AmazonGlacierClient オブジェクトの最大値ReadWriteTimeout
に と を設定します。 -
ポータブルクラスライブラリ (PCL) と .NET Core をターゲット AWS SDK for .NET とする のバージョンは、すべての AmazonS3Client および AmazonGlacierClient オブジェクトの最大値
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 SDK for .NET that target .NET Core.
ReadWriteTimeout = TimeSpan.FromSeconds(10),
RetryMode = RequestRetryMode.Standard,
MaxErrorRetry = 3
});