ZOZO Advent Calendar 2021 の16日目の記事です。
AWS SDK for Java
AWS SDK for JavaにはAWSのサービスを利用するためのJava APIが用意されています。
その中で接続タイムアウトやリクエスト再試行などのクライアントの設定を変更することができます。
AWS SDK for Javaには、バージョン1(v1)とバージョン2(v2)があり、アップデートする際に使用するそれぞれのバージョンの主なクラスとメソッドの対応をまとめました。
v1、v2オプション対応表
以下のようにメソッドチェーンを使用して設定することを想定しています。
new ClientConfiguration()
.withConnectionTimeout(connectionTimeout)
.withClientExecutionTimeout(clientExecutionTimeout)
.withRequestTimeout(requestTimeout)
.withSocketTimeout(socketTimeout)
.withMaxConnections(maxConnections)
.withMaxErrorRetry(maxErrorRetries);
設定内容 | v1 クラス | v1 メソッド | - | v2 クラス | v2 メソッド |
---|---|---|---|---|---|
接続タイムアウトまでの時間 | ClientConfiguration | withConnectionTimeout | → | ApacheHttpClient | connectionTimeout |
クライアントがAPI呼び出しの実行を完了するのにかかる時間 | ClientConfiguration | withClientExecutionTimeout | → | ClientOverrideConfiguration | apiCallTimeout |
リクエストをタイムアウトするまでの時間 | ClientConfiguration | withRequestTimeout | → | ClientOverrideConfiguration | apiCallAttemptTimeout |
ソケット通信をタイムアウトするまでの時間 | ClientConfiguration | withSocketTimeout | → | ApacheHttpClient | socketTimeout |
HTTP接続の最大数 | ClientConfiguration | withMaxConnections | → | ApacheHttpClient | maxConnections |
最大リトライ数 | ClientConfiguration | withMaxErrorRetry | → | ClientOverrideConfiguration | retryPolicy |
注意点
v1からv2にアップデートするにあたり、以下の注意点があります。
- v1の引数は、プリミティブ型であるのに対し、v2の引数は参照型に変更されています。
- v1ではClientConfigurationクラスにほとんどの設定できましたが、v2ではサービスクライアントの中で以下のように設定する必要があります。
以下はDynamoDBClientを使用した場合の例です。
DynamoDbClient.builder()
.overrideConfiguration(ClientOverrideConfiguration.builder()
.apiCallTimeout(Duration.ofMillis(clientExecutionTimeout))
.apiCallAttemptTimeout(Duration.ofMillis(requestTimeout))
.retryPolicy(
RetryPolicy.builder().numRetries(maxErrorRetries).build())
.build())
.httpClient(ApacheHttpClient.builder()
.connectionTimeout(Duration.ofMillis(connectionTimeout))
.socketTimeout(Duration.ofMillis(socketTimeout))
.maxConnections(maxConnections)
.build())
.build();
まとめ
AWS SDKのv1とv2のそれぞれでクライアントの設定は公式ドキュメントでもまとめられていますが、バージョンアップ時のそれぞれの対応表がなく困ったので、まとめました。AWS SDK v2へのバージョンアップへのきっかけになれば幸いです。