

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

# AWS SDK for Rust でのウェイターの使用
<a name="waiters"></a>

 ウェイターは、クライアント側の抽象化で、リソースが目的の状態に達するまで、またはそのリソースが目的の状態に入らないと判断されるまで、リソースをポーリングします。これは、Amazon Simple Storage Service などの結果整合性のあるサービスや、Amazon Elastic Compute Cloud などのリソースを非同期で作成するサービスを使用する場合の一般的なタスクです。リソースのステータスを定期的にポーリングするロジックを自分で記述するのは、手間がかかりエラーの原因にもなります。ウェイターの目的は、この責任を顧客コードから外し、AWS オペレーションのタイミングに関する深い知識を持つ AWS SDK for Rust に移すことです。

ウェイターのサポートを提供する AWS のサービスには、`{{<service>}}::waiters` モジュールが含まれます。
+ `{{<service>}}::client::Waiters` トレイトによって、クライアントのウェイターメソッドを提供します。メソッドは `Client` 構造体に対して実装されます。すべてのウェイターメソッドは、`wait_until_{{<Condition>}}` の標準的な命名規則に従います。
  + Amazon S3 の場合、このトレイトは [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/client/trait.Waiters.html](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/client/trait.Waiters.html) です。

次の例では、Amazon S3 を使用しています。ただし、1 つ以上のウェイターが定義されている AWS のサービス については、概念は同じです。

次のコード例は、バケット作成後にその存在を待つためのポーリングロジックを記述する代わりに、ウェイター関数を使用する方法を示しています。

```
use std::time::Duration;
use aws_config::BehaviorVersion;
// Import Waiters trait to get `wait_until_<Condition>` methods on Client.
use aws_sdk_s3::client::Waiters;


let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;
    
let s3 = aws_sdk_s3::Client::new(&config);

// This initiates creating an S3 bucket and potentially returns before the bucket exists.
s3.create_bucket()
    .bucket("my-bucket")
    .send()
    .await?;

// When this function returns, the bucket either exists or an error is propagated.
s3.wait_until_bucket_exists()
    .bucket("my-bucket")
    .wait(Duration::from_secs(5))
    .await?;

// The bucket now exists.
```

**注記**  
 各待機メソッドは、目的の条件またはエラーに達した際の最終レスポンスで取得するために使用できる `Result<FinalPoll<...>, WaiterError<...>> ` を返します。詳細については、「Rust API ドキュメント」の「[FinalPoll](https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/waiters/struct.FinalPoll.html)」および「[WaiterError](https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/waiters/error/enum.WaiterError.html)」を参照してください。