翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CRT AWS ベースの HTTP クライアントを設定する
AWS CRT ベースの HTTP クライアントには、同期 AwsCrtHttpClient
-
SDK 起動時間の短縮
-
より小さなメモリフットプリント
-
レイテンシータイムの短縮
-
接続のヘルス管理
-
DNS ロードバランサー
AWS SDK の CRT ベースのコンポーネント
このトピックで説明されている AWS CRT ベースの HTTP クライアントと AWS CRT ベースの S3 クライアントは SDK の異なるコンポーネントです。
同期および非同期のAWS CRT ベースの HTTP クライアントは、SDK HTTP インターフェイスを実装したもので、一般的な HTTP 通信に使用されます。これらは SDK の他の同期 または 非同期の HTTP クライアントに代わるものですが、その他の利点もあります。
AWS CRT ベースの S3 クライアントは S3AsyncClientS3AsyncClient
インターフェースの Java ベース実装に代わるもので、いくつかの利点があります。
どちらのコンポーネントも AWS Common Runtime のライブラリを使用していますが、CRT ベースの HTTP AWS クライアントは aws-c-s3 ライブラリ
CRT AWS ベースの HTTP クライアントにアクセスする
CRT AWS ベースの HTTP クライアントを使用する前に、最小バージョン 2.22.0 のaws-crt-client
アーティファクトをプロジェクトの依存関係に追加します。
Maven pom.xml
ファイルをセットアップするには、次のいずれかのオプションを使用します。
注記
ランタイムの依存関係のサイズを小さくする必要がある場合、たとえばアプリケーションが AWS Lambda 関数で実行されている場合などに、プラットフォーム固有の jar オプションを使用できます。
デフォルトでは、 は Linux、Windows、macOS AWS など、複数のプラットフォームのバイナリを含む CRT アーティファクトの uber-jar aws-crt-client
を使用します。
<project>
<properties>
<aws.sdk.java.version>2.29.10*
</aws.sdk.java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-crt-client</artifactId>
</dependency>
</dependencies>
</project>
*赤で表示されているバージョンを、使用する Java SDK のバージョンに置き換えます。Maven Central
CRT AWS ベースの HTTP クライアントの使用と設定
サービスクライアントの構築とともに CRT AWS ベースの HTTP クライアントを設定することも、複数のサービスクライアント間で共有するように 1 つのインスタンスを設定することもできます。
どちらの方法でも、ビルダーを使用して CRT AWS ベースの HTTP クライアントインスタンスのプロパティを設定します
ベストプラクティス: インスタンスをサービスクライアント専有にする
AWS CRT ベースの HTTP クライアントのインスタンスを設定する必要がある場合は、サービスクライアント と共にインスタンスを構築して専用にすることをお勧めします。これを行うには、サービスクライアントのビルダーの httpClientBuilder
メソッドを使用します。これにより、HTTP クライアントのライフサイクルは SDK によって管理されるため、不要になったときに CRT AWS ベースの HTTP クライアントインスタンスが閉じられない場合にメモリリークが発生する可能性を回避できます。
次の例では、S3 サービスクライアントを作成し、 connectionTimeout
と maxConcurrency
の値を使用して AWS CRT ベースの HTTP クライアントを設定します。
インポート
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
コード
// Singleton: Use s3Client for all requests.
S3Client s3Client = S3Client.builder()
.httpClientBuilder(AwsCrtHttpClient
.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100))
.build();
// Perform work with the s3Client.
// Requests completed: Close the s3Client.
s3Client.close();
別の方法: インスタンスを共有する
アプリケーションのリソースとメモリの使用量を減らすために、CRT AWS ベースの HTTP クライアントを設定し、複数のサービスクライアント間で共有できます。HTTP 接続プールは共有されるため、リソースの使用量が少なくなります。
注記
AWS CRT ベースの HTTP クライアントインスタンスを共有する場合は、破棄する準備ができたらインスタンスを閉じる必要があります。サービスクライアントが閉じられても、SDK はインスタンスを閉じません。
次の例では、 connectionTimeout
と maxConcurrency
の値を使用して AWS CRT ベースの HTTP クライアントインスタンスを設定します。設定された httpClient
インスタンスは、各サービスクライアントのビルダーのメソッドに渡されます。サービスクライアントと HTTP クライアントが不要になると、それらは明示的に閉じられます。HTTP クライアントは最後に閉じられます。
インポート
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
コード
// Create an AwsCrtHttpClient shared instance.
SdkHttpClient crtHttpClient = AwsCrtHttpClient.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100)
.build();
// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = S3Client.builder()
.httpClient(crtHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.crea
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
.httpClient(crtHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.crea
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
// Requests completed: Close all service clients.
s3Client.close();
dynamoDbClient.close();
crtHttpClient.close(); // Explicitly close crtHttpClient.
CRT AWS ベースの HTTP クライアントをデフォルトとして設定する
Maven ビルドファイルは、サービスクライアントのデフォルトの HTTP クライアントとして SDK が AWS CRT ベースの HTTP クライアントを使用するように設定できます。
そのためには、デフォルトの HTTP クライアント依存関係を持つ exclusions
要素を各サービスクライアントアーティファクトに追加します。
次のpom.xml
例では、SDK は S3 サービスに AWS CRT ベースの HTTP クライアントを使用します。コード内のサービスクライアントが S3AsyncClient
の場合、SDK は AwsCrtAsyncHttpClient
を使用します。サービスクライアントが S3Client の場合、SDK は AwsCrtHttpClient
を使用します。この設定では、デフォルトの Netty ベースの非同期 HTTP クライアントと、デフォルトの Apache ベースの同期 HTTP は使用できません。
<project>
<properties>
<aws.sdk.version>VERSION
</aws.sdk.version>
</properties>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${aws.sdk.version}</version>
<exclusions>
<exclusion>
<groupId>software.amazon.awssdk</groupId>
<artifactId>netty-nio-client</artifactId>
</exclusion>
<exclusion>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-crt-client</artifactId>
</dependency>
</dependencies>
</project>
Maven central リポジトリにアクセスして、最新のバージョン
注記
1 つの pom.xml
ファイル内で複数のサービスクライアントが宣言されている場合は、すべて exclusions
XML 要素を必要とします。
Java システムプロパティを使用する
アプリケーションのデフォルトの HTTP として AWS CRT ベースの HTTP クライアントを使用するには、Java システムプロパティsoftware.amazon.awssdk.http.async.service.impl
を の値に設定しますsoftware.amazon.awssdk.http.crt.AwsCrtSdkHttpService
。
アプリケーションの起動時に設定するには、次のようなコマンドを実行します。
java app.jar -Dsoftware.amazon.awssdk.http.async.service.impl=\ software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
次のコードスニペットを使用して、アプリケーションコードでシステムプロパティを設定します。
System.setProperty("software.amazon.awssdk.http.async.service.impl",
"software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");
注記
システムプロパティを使用して AWS CRT ベースの HTTP クライアントの使用を設定する場合は、 poml.xml
ファイル内のaws-crt-client
アーティファクトへの依存関係を追加する必要があります。
AWS CRT ベースの HTTP クライアントの詳細設定
接続ヘルス設定や最大アイドル時間など、CRT AWS ベースの HTTP クライアントのさまざまな設定を使用できます。AwsCrtAsyncHttpClient
で利用可能な設定オプションAwsCrtHttpClient
にも同じオプションを設定できます。
接続のヘルス設定
HTTP クライアントビルダーの connectionHealthConfiguration
メソッドを使用して、CRT AWS ベースの HTTP クライアントの接続ヘルス設定を構成できます。
次の例では、接続ヘルス設定と接続の最大アイドル時間で設定された AWS CRT ベースの HTTP クライアントインスタンスを使用する S3 サービスクライアントを作成します。
インポート
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
コード
// Singleton: Use the s3Client for all requests.
S3Client s3Client = S3Client.builder()
.httpClientBuilder(AwsCrtHttpClient
.builder()
.connectionHealthConfiguration(builder -> builder
.minimumThroughputInBps(32000L)
.minimumThroughputTimeout(Duration.ofSeconds(3)))
.connectionMaxIdleTime(Duration.ofSeconds(5)))
.build();
// Perform work with s3Client.
// Requests complete: Close the service client.
s3Client.close();
HTTP/2 サポート
HTTP/2 プロトコルは CRT AWS ベースの HTTP クライアントではまだサポートされていませんが、今後のリリースが予定されています。
それまでの間、KinesisAsyncClient
プロキシ設定例
次のコードスニペットは、コード内でプロキシの設定を行うために使用する ProxyConfiguration.Builder
インポート
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
コード
SdkHttpClient crtHttpClient = AwsCrtHttpClient.builder()
.proxyConfiguration(ProxyConfiguration.builder()
.scheme("https")
.host("myproxy")
.port(1234)
.username("username")
.password("password")
.nonProxyHosts(Set.of("localhost", "host.example.com"))
.build())
.build();
プロキシ設定に対応する Java システムプロパティは、以下のコマンドラインスニペットに示されています。
$ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \ -Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
重要
HTTPS プロキシのシステムプロパティのいずれかを使用するには、scheme
プロパティをコード内で https
に設定する必要があります。スキームプロパティがコードで設定されていない場合、スキームのデフォルトは HTTP になり、SDK は http.*
システムプロパティのみを検索します。
環境変数を使用する同等の設定は次のとおりです。
// Set the following environment variables.
// $ export HTTPS_PROXY="https://username:password@myproxy:1234"
// $ export NO_PROXY="localhost|host.example.com"
// Set the 'useSystemPropertyValues' to false on the proxy configuration.
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
.proxyConfiguration(ProxyConfiguration.builder()
.scheme("https")
.useSystemPropertyValues(Boolean.FALSE)
.build())
.build();
// Run the application.
// $ java -cp ... App