翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
再試行
AWS SDK for Rust には、デフォルトの再試行動作とカスタマイズ可能な設定オプションが用意されています。を呼び出すと、予期しない例外が返 AWS のサービス されることがあります。呼び出しを再試行すると、スロットリングや一時的なエラーなど、特定のタイプのエラーが成功する可能性があります。
再試行動作は、共有 AWS config
ファイルの環境変数または設定を使用してグローバルに設定できます。このアプローチの詳細については、「 SDK とツールのリファレンスガイド」の「再試行動作」を参照してください。 AWS SDKs また、再試行戦略の実装に関する詳細情報と、異なる戦略を選択する方法も含まれています。
または、次のセクションに示すように、これらのオプションをコードで設定することもできます。
デフォルトの再試行設定
すべてのサービスクライアントは、デフォルトで RetryConfig
standard
再試行戦略設定になります。デフォルトでは、呼び出しは 3 回試行されます (最初の試行と 2 回の再試行)。さらに、各再試行は、再試行ストームを避けるために、短いランダムな時間遅延します。この規則は、ほとんどのユースケースに適していますが、高スループットシステムなどの特定の状況では適さない場合があります。
SDKs では、一部のタイプのエラーのみが再試行可能と見なされます。再試行可能なエラーの例は次のとおりです。
-
ソケットタイムアウト
-
サービス側のスロットリング
-
HTTP 5XX レスポンスなどの一時的なサービスエラー
以下の例は再試行可能とは見なされません。
-
パラメータがないか無効です
-
認証/セキュリティエラー
-
設定ミスの例外
最大試行回数、遅延回数、バックオフ回数を設定することで、standard
再試行戦略をカスタマイズできます。
最大試行回数
変更した を RetryConfig
aws_config::defaults
。
const CUSTOM_MAX_ATTEMPTS: u32 = 5;
let retry_config = RetryConfig::standard()
// Set max attempts. When max_attempts is 1, there are no retries.
// This value MUST be greater than zero.
// Defaults to 3.
.with_max_attempts(CUSTOM_MAX_ATTEMPTS);
let config = aws_config::defaults(BehaviorVersion::latest())
.retry_config(retry_config)
.load()
.await;
遅延とバックオフ
再試行が必要な場合、デフォルトの再試行戦略は後続の試行を行う前に待機します。最初の再試行の遅延は小さいですが、後の再試行では指数関数的に増加します。最大遅延量は、大きくなりすぎないように制限されます。
ランダムジッターは、すべての試行間の遅延に適用されます。ジッターは、再試行ストームを引き起こす可能性のある大規模なフリートの影響を軽減するのに役立ちます。エクスポネンシャルバックオフとジッターの詳細については、 AWS アーキテクチャブログの「エクスポネンシャルバックオフとジッター
変更した を RetryConfig
aws_config::defaults
。次のコードは、最初の再試行を最大 100 ミリ秒遅らせるように設定し、再試行間の最大時間は 5 秒です。
let retry_config = RetryConfig::standard()
// Defaults to 1 second.
.with_initial_backoff(Duration::from_millis(100))
// Defaults to 20 seconds.
.with_max_backoff(Duration::from_secs(5));
let config = aws_config::defaults(BehaviorVersion::latest())
.retry_config(retry_config)
.load()
.await;
アダプティブ再試行モード
standard
モード再試行戦略の代わりに、adaptive
モード再試行戦略は、スロットリングエラーを最小限に抑えるための理想的なリクエストレートを求める高度なアプローチです。
注記
アダプティブ再試行は高度な再試行モードです。通常、この戦略の使用はお勧めしません。「 SDK とツールのリファレンスガイド」の「再試行動作」を参照してください。 AWS SDKs
アダプティブ再試行には、標準再試行のすべての機能が含まれます。これにより、スロットリングされていないリクエストと比較したスロットリングされたリクエストのレートを測定するクライアント側のレートリミッターが追加されます。また、トラフィックが安全な帯域幅内にとどまるよう制限し、スロットリングエラーが発生するのが理想的です。
レートは、変化するサービス条件やトラフィックパターンにリアルタイムで適応し、それに応じてトラフィックのレートを増減する可能性があります。クリティカルなことに、レートリミッターはトラフィックの多いシナリオでの最初の試行を遅らせる可能性があります。
コードでadaptive
再試行戦略を選択するには、変更した を指定しますRetryConfig
let config = aws_config::defaults(BehaviorVersion::latest())
.retry_config(RetryConfig::adaptive())
.load()
.await;