AWS SDK for Java 2.x でのウェイターの使用 - AWS SDK for Java 2.x

AWS SDK for Java 2.x でのウェイターの使用

AWS SDK for Java 2.x のウェイターユーティリティを使用すると、AWS リソースに対して操作を実行する前に、それらのリソースが指定された状態にあることを検証できます。

ウェイターは、DynamoDB テーブルや Amazon S3 バケットなどの AWS リソースを、目的の状態に到達するまで (または、リソースが目的の状態に到達しないと判断されるまで) ポーリングするために使用されるアブストラクションです。煩雑でエラーが発生しやすい AWS リソースを継続的にポーリングするロジックを作成する代わりに、ウェイターを使用してリソースをポーリングし、リソースの準備ができた後もコードを実行し続けるようにすることができます。

前提条件

AWS SDK for Java を使用してプロジェクトでウェイターを使用する前に、AWS SDK for Java 2.xの設定の手順を完了する必要があります。

AWS SDK for Java のバージョン 2.15.0 以降を使用するように、プロジェクトの依存関係を (例: pom.xml または build.gradle ファイルで) 設定する必要もあります。

例:

<project> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>

ウェーターの使用

ウェイターオブジェクトをインスタンス化するには、最初にサービスクライアントを作成します。サービスクライアントの waiter() メソッドをウェイターオブジェクトの値として設定します。ウェイターインスタンスが存在するようになったら、適切なコードを実行するようにその応答オプションを設定します。

同期プログラミング

次のコードスニペットは、DynamoDB テーブルが存在するようになり、かつ、[ACTIVE] (アクティブ) 状態になるまで待機する方法を示しています。

DynamoDbClient dynamo = DynamoDbClient.create(); DynamoDbWaiter waiter = dynamo.waiter(); WaiterResponse<DescribeTableResponse> waiterResponse = waiter.waitUntilTableExists(r -> r.tableName("myTable")); // print out the matched response with a tableStatus of ACTIVE waiterResponse.matched().response().ifPresent(System.out::println);

非同期プログラミング

次のコードスニペットは、DynamoDB テーブルが存在しなくなるまで待機する方法を示しています。

DynamoDbAsyncClient asyncDynamo = DynamoDbAsyncClient.create(); DynamoDbAsyncWaiter asyncWaiter = asyncDynamo.waiter(); CompletableFuture<WaiterResponse<DescribeTableResponse>> waiterResponse = asyncWaiter.waitUntilTableNotExists(r -> r.tableName("myTable")); waiterResponse.whenComplete((r, t) -> { if (t == null) { // print out the matched ResourceNotFoundException r.matched().exception().ifPresent(System.out::println); } }).join();

ウェイターを設定する

ビルダーで overrideConfiguration() を使用して、ウェイターの設定をカスタマイズできます。一部の操作では、リクエストを実行する際にカスタム設定を適用できます。

ウェーターを設定する

次のコードスニペットは、ウェイターの設定を上書きする方法を示しています。

// sync DynamoDbWaiter waiter = DynamoDbWaiter.builder() .overrideConfiguration(b -> b.maxAttempts(10)) .client(dynamoDbClient) .build(); // async DynamoDbAsyncWaiter asyncWaiter = DynamoDbAsyncWaiter.builder() .client(dynamoDbAsyncClient) .overrideConfiguration(o -> o.backoffStrategy( FixedDelayBackoffStrategy.create(Duration.ofSeconds(2)))) .scheduledExecutorService(Executors.newScheduledThreadPool(3)) .build();

特定のリクエストの設定をオーバーライドする

次のコードスニペットは、リクエストごとにウェイターの設定を上書きする方法を示しています。すべての操作でカスタマイズ可能な設定があるわけではないことに注意してください。

waiter.waitUntilTableNotExists(b -> b.tableName("myTable"), o -> o.maxAttempts(10)); asyncWaiter.waitUntilTableExists(b -> b.tableName("myTable"), o -> o.waitTimeout(Duration.ofMinutes(1)));

コードの例

DynamoDB でウェイターを使用する詳細な例については、AWS コード例リポジトリの CreateTable.java を参照してください。

Amazon S3 でウェイターを使用する詳細な例については、AWS コード例リポジトリの S3BucketOps.java を参照してください。