翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CRTベースのHTTPクライアントを設定する
AWS CRTベースのHTTPクライアントには、同期AwsCrtHttpClientおよび非同期 が含まれますAwsCrtAsyncHttpClient。 AWS CRTベースのHTTPクライアントには、次のHTTPクライアントの利点があります。
-
SDK 起動時間の短縮
-
より小さなメモリフットプリント
-
レイテンシータイムの短縮
-
接続のヘルス管理
-
DNS ロードバランシング
AWS CRTの ベースのコンポーネント SDK
このトピックで説明されている AWS CRTベースのHTTPクライアントと AWS CRTベースの S3 クライアントは、 の異なるコンポーネントですSDK。
同期および非同期 AWS CRTベースのHTTPクライアントは、実装SDKHTTPクライアントインターフェイスであり、一般的なHTTP通信に使用されます。これらは、 の他の同期クライアントまたは非同期HTTPクライアントに代わるものでSDK、追加の利点があります。
AWS CRTベースの S3 クライアントは S3AsyncClient インターフェイスの実装であり、Amazon S3 サービスの操作に使用されます。これは S3AsyncClient
インターフェースの Java ベース実装に代わるもので、いくつかの利点があります。
どちらのコンポーネントも AWS Common Runtime のライブラリを使用していますが、 AWS CRTベースのHTTPクライアントは aws-c-s3 つのライブラリを使用しておらず、S3 マルチパートアップロードAPI機能をサポートしていません。対照的に、 AWS CRTベースの S3 クライアントは、S3 マルチパートアップロードAPI機能をサポートするために構築されました。
AWS CRTベースのHTTPクライアントにアクセスする
AWS CRTベースのHTTPクライアントを使用する前に、最小バージョンが 2.22.0 のaws-crt-client
アーティファクトをプロジェクトの依存関係に追加します。
次の Maven は、部品表 (BOM) メカニズムを使用して宣言された AWS CRTベースのHTTPクライアントpom.xml
を示しています。
<project>
<properties>
<aws.sdk.version>2.27.21
</aws.sdk.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>
Maven central リポジトリにアクセスして、最新バージョンを確認します。
AWS CRTベースのHTTPクライアントの使用と設定
AWS CRTベースのクライアントは、サービスHTTPクライアントの構築とともに設定することも、複数のサービスクライアント間で共有するように 1 つのインスタンスを設定することもできます。
どちらの方法でも、ビルダーを使用して AWS CRTベースのHTTPクライアントインスタンスのプロパティを設定します。
ベストプラクティス: インスタンスをサービスクライアント専有にする
AWS CRTベースのHTTPクライアントのインスタンスを設定する必要がある場合は、サービスクライアント とともにインスタンスを構築して、インスタンスを専念することをお勧めします。これを行うには、サービスクライアントのビルダーの httpClientBuilder
メソッドを使用します。これにより、HTTPクライアントのライフサイクルは によって管理されます。これによりSDK、 AWS CRT不要になった ベースのHTTPクライアントインスタンスが閉じられない場合にメモリリークが発生する可能性を回避できます。
次の例では、S3 サービスクライアントを作成し、 connectionTimeout
および maxConcurrency
値を持つ AWS CRTベースのHTTPクライアントを設定します。
- Synchronous client
-
インポート
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();
- Asynchronous client
-
インポート
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
コード
// Singleton: Use s3AsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
.httpClientBuilder(AwsCrtAsyncHttpClient
.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100))
.build();
// Perform work with the s3AsyncClient.
// Requests completed: Close the s3AsyncClient.
s3AsyncClient.close();
別の方法: インスタンスを共有する
アプリケーションのリソースとメモリの使用量を減らすために、 AWS CRTベースのHTTPクライアントを設定し、複数のサービスクライアント間で共有できます。HTTP 接続プールは共有されるため、リソースの使用量が減少します。
AWS CRTベースのHTTPクライアントインスタンスを共有する場合は、廃棄の準備ができたら、そのインスタンスを閉じる必要があります。SDK は、サービスクライアントが閉じられたときにインスタンスを閉じません。
次の例では、 AWS CRTベースのHTTPクライアントインスタンスを connectionTimeout
および maxConcurrency
値で設定します。設定された httpClient
インスタンスは、各サービスクライアントのビルダーのメソッドに渡されます。サービスクライアントとHTTPクライアントが不要になった場合、明示的に閉じられます。HTTP クライアントは最後に閉じられます。
- Synchronous client
-
インポート
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.
- Asynchronous client
-
インポート
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
コード
// Create an AwsCrtAsyncHttpClient shared instance.
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100)
.build();
// Singletons: Use the s3AsyncClient and dynamoDbAsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
.httpClient(crtAsyncHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
DynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbAsyncClient.builder()
.httpClient(crtAsyncHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
// Requests completed: Close all service clients.
s3AsyncClient.close();
dynamoDbAsyncClient.close();
crtAsyncHttpClient.close(); // Explicitly close crtAsyncHttpClient.
AWS CRTベースのHTTPクライアントをデフォルトとして設定する
Maven ビルドファイルは、 SDKが AWS CRTベースのHTTPクライアントをサービスクライアントのデフォルトHTTPクライアントとして使用するように設定できます。
これを行うには、デフォルトのHTTPクライアント依存関係を持つ exclusions
要素を各サービスクライアントアーティファクトに追加します。
次のpom.xml
例では、 は S3 サービスに AWS CRTベースのHTTPクライアントSDKを使用します。コード内のサービスクライアントが の場合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 中央リポジトリを参照してください。 VERSION
値。
1 つのpom.xml
ファイルで複数のサービスクライアントが宣言されている場合、すべて exclusions
XML要素が必要です。
Java システムプロパティを使用する
AWS CRTベースのHTTPクライアントを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クライアントの高度な設定
接続ヘルス設定や最大アイドル時間など、 AWS CRTベースのHTTPクライアントのさまざまな設定を使用できます。AwsCrtAsyncHttpClient
で利用可能な設定オプションを確認できます。AwsCrtHttpClient
にも同じオプションを設定できます。
接続のヘルス設定
AWS CRTベースのHTTPクライアントの接続ヘルス設定は、HTTPクライアントビルダーの connectionHealthConfiguration
メソッドを使用して設定できます。
次の例では、接続ヘルス設定と接続の最大アイドル時間で設定された AWS CRTベースのHTTPクライアントインスタンスを使用する S3 サービスクライアントを作成します。
- Synchronous client
-
インポート
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();
- Asynchronous client
-
インポート
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
コード
// Singleton: Use the s3AsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
.httpClientBuilder(AwsCrtAsyncHttpClient
.builder()
.connectionHealthConfiguration(builder -> builder
.minimumThroughputInBps(32000L)
.minimumThroughputTimeout(Duration.ofSeconds(3)))
.connectionMaxIdleTime(Duration.ofSeconds(5)))
.build();
// Perform work with s3AsyncClient.
// Requests complete: Close the service client.
s3AsyncClient.close();
HTTP/2 サポート
HTTP/2 プロトコルは AWS CRTベースのHTTPクライアントではまだサポートされていませんが、今後のリリースが予定されています。
その間、 KinesisAsyncClientや などの HTTP/2 サポートを必要とするサービスクライアントを使用している場合はTranscribeStreamingAsyncClient、NettyNioAsyncHttpClient代わりに の使用を検討してください。
プロキシ設定例
次のコードスニペットは、コード内でプロキシの設定を行うために使用する ProxyConfiguration.Builder
の使用方法を示しています。
- Synchronous client
-
インポート
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();
- Asynchronous client
-
インポート
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
コード
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.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に設定されます。 はhttp.*
システムプロパティのみSDKを検索します。
環境変数を使用する同等のセットアップは次のとおりです。
// 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