HTTP クライアント - AWS SDK for Java 2.x

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

HTTP クライアント

サービスHTTPクライアントに使用するようにクライアントを変更したり、 を使用してHTTPクライアントのデフォルト設定を変更したりできます AWS SDK for Java 2.x。このセクションでは、 のHTTPクライアントと設定について説明しますSDK。

HTTP SDK for Java で利用可能な クライアント

同期クライアント

SDK for Java の同期HTTPクライアントは、 SdkHttpClientインターフェイスを実装します。S3Client や などの同期サービスクライアントではDynamoDbClient、同期HTTPクライアントを使用する必要があります。 AWS SDK for Java には 3 つの同期HTTPクライアントがあります。

ApacheHttpClient (デフォルト)

ApacheHttpClient は、同期サービスHTTPクライアントのデフォルトクライアントです。ApacheHttpClient の設定の詳細については、「Apache ベースの HTTP クライアントの設定」を参照してください。

AwsCrtHttpClient

AwsCrtHttpClient は、高スループットとノンブロッキング IO を提供します。これは、 AWS 共通ランタイム (CRT) Http クライアント上に構築されています。AwsCrtHttpClient の設定と、サービスクライアントと一緒に使用する方法については、「AWS CRT ベースの HTTP クライアントを設定する」を参照してください。

UrlConnectionHttpClient

アプリケーションが使用する jar とサードパーティーライブラリの数を最小限に抑えるには、 を使用できますUrlConnectionHttpClientUrlConnectionHttpClient の設定の詳細については、「URLConnection ベースの HTTP クライアントを設定する」を参照してください。

非同期クライアント

SDK for Java の非同期HTTPクライアントは、 SdkAsyncHttpClientインターフェイスを実装します。S3AsyncClient や などの非同期サービスクライアントではDynamoDbAsyncClient、非同期HTTPクライアントを使用する必要があります。 AWS SDK for Java には 2 つの非同期HTTPクライアントがあります。

NettyNioAsyncHttpClient (デフォルト)

NettyNioAsyncHttpClient は、非同期HTTPクライアントで使用されるデフォルトのクライアントです。NettyNioAsyncHttpClient の設定の詳細については、「Netty ベースの HTTP クライアントの設定」を参照してください。

AwsCrtAsyncHttpClient

AwsCrtAsyncHttpClient は、 AWS 共通ランタイム (CRT) HTTPクライアントに基づいています。AwsCrtAsyncHttpClient の設定の詳細については、「AWS CRT ベースの HTTP クライアントを設定する」を参照してください。

HTTP クライアントのレコメンデーション

HTTP クライアントの実装を選択すると、いくつかの要因が関係します。決定には以下の情報を参考にしてください。

推奨事項フローチャート

次のフローチャートは、使用するHTTPクライアントを決定するのに役立つ一般的なガイダンスを提供します。

HTTP クライアントレコメンデーションのフローチャート。

HTTP クライアント比較

次の表は、各HTTPクライアントの詳細な情報を示しています。

HTTP クライアント 同期または非同期 どのようなときに使うか 制限/欠点
Apache ベースのHTTPクライアント

(デフォルトの同期HTTPクライアント)

同期 高スループットよりも低レイテンシーを好む場合に使用します 他のHTTPクライアントと比較して起動時間が遅い
URLConnectionベースのHTTPクライアント 同期 サードパーティの依存関係を制限するという厳しい要件がある場合に使用します Amazon APIGateway Update オペレーションAPISなどの一部の で必要な HTTPPATCHメソッドをサポートしていません
AWS CRTベースの同期HTTPクライアント1 同期

• アプリケーションが で実行されている場合に使用します。 AWS Lambda

• 低レイテンシーよりも高スループットを好む場合に使用します

• 同期SDKクライアントを希望する場合に使用します。

以下の Java システムプロパティはサポートされていません。

  • javax.net.ssl。keyStore

  • javax.net.ssl。keyStorePassword

  • javax.net.ssl。trustStore

  • javax.net.ssl。trustStorePassword

Netty ベースのHTTPクライアント

(デフォルトの非同期HTTPクライアント)

非同期

• アプリケーションが Kinesis などの HTTP/2 サポートAPIsを必要とする を呼び出す場合に使用します。 API SubscribeToShard

他のHTTPクライアントと比較して起動時間が遅い
AWS CRTベースの非同期HTTPクライアント1 非同期

• アプリケーションが AWS Lambdaで実行されている場合に使用します

• 低レイテンシーよりも高スループットを好む場合に使用します

• 非同期SDKクライアントを好む場合に使用します

KinesisAsynClientや などの HTTP/2 サポートを必要とするサービスクライアントをサポートしていません TranscribeStreamingAsyncClient

以下の Java システムプロパティはサポートされていません。

  • javax.net.ssl。keyStore

  • javax.net.ssl。keyStorePassword

  • javax.net.ssl。trustStore

  • javax.net.ssl。trustStorePassword

1利点が追加されたため、可能であれば AWS CRTベースのHTTPクライアントを使用することをお勧めします。

スマート設定のデフォルト

AWS SDK for Java 2.x (バージョン 2.17.102 以降) には、スマート設定のデフォルト機能が用意されています。この機能は、2 つのHTTPクライアントプロパティと、HTTPクライアントに影響を与えない他のプロパティを最適化します。

スマート設定のデフォルトは、指定したデフォルトモードの値に基づいて、connectTimeoutInMillis および tlsNegotiationTimeoutInMillis プロパティに適切な値を設定します。デフォルトモードの値は、アプリケーションの特性に基づいて選択します。

スマート設定のデフォルトと、アプリケーションに最適なデフォルトのモード値を選択する方法の詳細については、AWS SDKs「」および「ツールリファレンスガイド」を参照してください。

アプリケーションのデフォルトモードを設定する 4 つの方法は以下のとおりです。

Service client

サービスクライアントビルダーを使用して、サービスクライアントでデフォルトモードを直接設定します。以下の例は、DynamoDbClient のデフォルトモードの出力形式を auto に設定します。

DynamoDbClient ddbClient = DynamoDbClient.builder() .defaultsMode(DefaultsMode.AUTO) .build();
System property

aws.defaultsMode システムプロパティを使用してデフォルトモードを指定できます。Java でシステムプロパティを設定する場合は、サービスクライアントを初期化する前にプロパティを設定する必要があります。

以下の例は、Java のシステムプロパティを使用して auto にデフォルトモードを設定する方法を示しています。

System.setProperty("aws.defaultsMode", "auto");

以下の例は、java コマンドの -D オプションを使用して auto にデフォルトモードを設定する方法を示しています。

java -Daws.defaultsMode=auto
Environment variable

環境変数 AWS_DEFAULTS_MODE の値を設定して、アプリケーションのデフォルトモードを選択します。

以下の情報は、環境変数を使用して auto にデフォルトモードの値を設定するコマンドを示しています。

オペレーティングシステム 環境変数を設定するコマンド

Linux、macOS、または Unix

export AWS_DEFAULTS_MODE=auto

Windows

set AWS_DEFAULTS_MODE=auto
AWS config file

次の例に示すように、共有 AWS configファイルにdefaults_mode設定プロパティを追加できます。

[default] defaults_mode = auto

システムプロパティ、環境変数、または AWS 設定ファイルを使用してデフォルトモードをグローバルに設定すると、HTTPクライアントを構築するときに設定を上書きできます。

httpClientBuilder() メソッドを使用して HTTPクライアントを構築する場合、設定は構築するインスタンスにのみ適用されます。この例をこちらに示します。この例の Netty ベースのHTTPクライアントは、 connectTimeoutInMillisおよび にグローバルに設定されたデフォルトのモード値を上書きしますtlsNegotiationTimeoutInMillis