

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

# で HTTP クライアントを設定する AWS SDK for Java 2.x
<a name="http-configuration"></a>

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

## Java の SDK で使用可能な HTTP クライアント
<a name="http-clients-available"></a>

### 同期クライアント
<a name="http-config-sync"></a>

SDK for Java の同期 HTTP クライアントは [SdkHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/SdkHttpClient.html) インターフェイスを実装しています。`S3Client` や `DynamoDbClient` などの同期サービスクライアントでは、同期 HTTP クライアントを使用する必要があります。 AWS SDK for Java には 3 つの同期 HTTP クライアントがあります。

**ApacheHttpClient (デフォルト)**  
[ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) は、同期サービスクライアントのデフォルトの HTTP クライアントです。`ApacheHttpClient` の設定の詳細については、「[Apache ベースの HTTP クライアントの設定](http-configuration-apache.md)」を参照してください。

**AwsCrtHttpClient**  
[AwsCrtHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtHttpClient.html) は、高いスループットとノンブロッキング IO を提供します。これは、 AWS 共通ランタイム (CRT) Http クライアント上に構築されています。`AwsCrtHttpClient` の設定と、サービスクライアントと一緒に使用する方法については、「[CRT AWS ベースの HTTP クライアントを設定する](http-configuration-crt.md)」を参照してください。

**UrlConnectionHttpClient**  
アプリケーションが使用する jar とサードパーティライブラリの数を最小限に抑えるには、[UrlConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html) を使用できます。`UrlConnectionHttpClient` の設定の詳細については、「[URLConnection ベースの HTTP クライアントを設定する](http-configuration-url.md)」を参照してください。

**Apache5HttpClient**  
[Apache5HttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache5/Apache5HttpClient.html) は、Apache 5.x HttpClient 上に構築`ApacheHttpClient`された の更新バージョンです。 * HttpClient バージョン 5.x * は Apache によってアクティブに保守されているバージョンであり、Java 21 の仮想スレッドサポートを含む最新の Java エコシステムの互換性と SLF4J によるログ記録の柔軟性を強化`ApacheHttpClient`することで、 で使用される以前のバージョンが改善されています。 `Apache5HttpClient`は AWS 、SDK for Java 2.x の将来のバージョンでデフォルトの同期クライアント`ApacheHttpClient`として を置き換えます。同じ API と機能を備えているため、ドロップイン置換に最適です。`Apache5HttpClient` の設定の詳細については、「[Apache 5.x ベースの HTTP クライアントを設定する](http-configuration-apache5.md)」を参照してください。

### 非同期クライアント
<a name="http-config-async"></a>

SDK for Java の非同期 HTTP クライアントは [SdkAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/async/SdkAsyncHttpClient.html) インターフェイスを実装しています。`S3AsyncClient` や `DynamoDbAsyncClient` などの非同期サービスクライアントでは、非同期 HTTP クライアントを使用する必要があります。 AWS SDK for Java には 2 つの非同期 HTTP クライアントがあります。

**NettyNioAsyncHttpClient (デフォルト)**  
[NettyNIOAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/nio/netty/NettyNioAsyncHttpClient.html) は、非同期クライアントが使用するデフォルトの HTTP クライアントです。`NettyNioAsyncHttpClient` の設定の詳細については、「[Netty ベースの HTTP クライアントの設定](http-configuration-netty.md)」を参照してください。

**AwsCrtAsyncHttpClient**  
[AwsCrtAsyncHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/AwsCrtAsyncHttpClient.html) は、 AWS 共通ランタイム (CRT) HTTP クライアントに基づいています。`AwsCrtAsyncHttpClient` の設定の詳細については、「[CRT AWS ベースの HTTP クライアントを設定する](http-configuration-crt.md)」を参照してください。

## HTTP クライアントの推奨事項
<a name="http-clients-recommend"></a>

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

### HTTP クライアントの比較
<a name="http-clients-recommend-compare"></a>

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


| HTTP クライアント | 同期または非同期 | どのようなときに使うか | 制限/欠点 | 
| --- | --- | --- | --- | 
|  Apache ベースの HTTP クライアント *(デフォルトの同期 HTTP クライアント)* | 同期 | 高スループットよりも低レイテンシーを好む場合に使用します  | 他の HTTP クライアントと比較して起動時間が遅い | 
| URLConnection ベースの HTTP クライアント | 同期 | サードパーティの依存関係を制限するという厳しい要件がある場合に使用します | • Amazon APIGateway Update オペレーションなどの一部の APIs で必要とされる HTTP PATCH メソッドをサポートしていません<br />• 設定可能なアイドル接続タイムアウトはサポートされていません。詳細については[、URLConnection ベースの HTTP クライアントを設定する](http-configuration-url.md)」を参照してください。 | 
| AWS CRT ベースの同期 HTTP クライアント1  | 同期 | • アプリケーションが で実行されている場合に使用します。 AWS Lambda<br />• 低レイテンシーよりも高スループットを好む場合に使用します<br />• 同期 SDK クライアントを好む場合に使用します | 以下の Java システムプロパティはサポートされなくなりました。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/sdk-for-java/latest/developer-guide/http-configuration.html) | 
|  Netty ベースの HTTP クライアント *(デフォルトの非同期 HTTP クライアント)* | 非同期 | • アプリケーションが TLS 設定の Java システムプロパティ ( など`javax.net.ssl.keyStore`) に依存している場合に使用します。 | 他の HTTP クライアントと比較して起動時間が遅い | 
|  AWS CRT ベースの非同期 HTTP クライアント1  | 非同期 | • アプリケーションが AWS Lambdaで実行されている場合に使用します<br />• 低レイテンシーよりも高スループットを好む場合に使用します• 非同期 SDK クライアントを好む場合に使用します | 以下の Java システムプロパティはサポートされなくなりました。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/sdk-for-java/latest/developer-guide/http-configuration.html) | 

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

## スマート設定のデフォルト
<a name="http-config-smart-defaults"></a>

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

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

スマート設定のデフォルトおよびアプリケーションに最適なデフォルトモードの値を選択する方法の詳細については、「[AWS SDKs and Tools リファレンスガイド](https://docs.aws.amazon.com/sdkref/latest/guide/feature-smart-config-defaults.html)」を参照してください。

アプリケーションのデフォルトモードを設定する 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 ]

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

```
[default]
defaults_mode = auto
```

------

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

`httpClientBuilder()` メソッドで HTTP クライアントを構築すると、設定は構築するインスタンスにのみ適用されます。この例を[こちら](http-configuration-netty.md#http-config-netty-one-client)に示します。この例の Netty ベースの HTTP クライアントは、`connectTimeoutInMillis` および `tlsNegotiationTimeoutInMillis` にグローバルに設定されているデフォルトモード値のをすべて上書きします。