

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

# Apache ベースの HTTP クライアントの設定
<a name="http-configuration-apache"></a>

の同期サービスクライアントは、デフォルトで Apache ベースの HTTP クライアントである [ApacheHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.html) AWS SDK for Java 2.x を使用します。SDK の `ApacheHttpClient` は Apache[HttpClient](https://hc.apache.org/httpcomponents-client-4.5.x/index.html) をベースにしています。

SDK には [URLConnectionHttpClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClient.html) も用意されており、ロードは速くなりますが、機能が少なくなっています。`UrlConnectionHttpClient` の設定の詳細については、「[URLConnection ベースの HTTP クライアントを設定する](http-configuration-url.md)」を参照してください。

`ApacheHttpClient` で使用できるすべての設定オプションを確認するには、「[ApacheHttpClient.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html)」と「[ProxyConfiguration.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ProxyConfiguration.Builder.html)」を参照してください。

## `ApacheHttpClient` へのアクセス
<a name="http-apache-dependency"></a>

ほとんどの場合、明示的な設定を行わずに `ApacheHttpClient` を使用することになります。サービスクライアントを宣言すると、SDK が標準値を使用して `ApacheHttpClient` を自動的に設定します。

`ApacheHttpClient` を明示的に設定したり、複数のサービスクライアントで使用したりする場合は、設定できるようにする必要があります。

### 設定が不要です
<a name="http-config-apache-no-config"></a>

Maven でサービスクライアントへの依存関係を宣言すると、SDK は `apache-client` アーティファクトに*ランタイム*依存関係を追加します。これにより、コンパイル時ではなく、ランタイム時にその `ApacheHttpClient` クラスをコードで使用できるようになります。Apache ベースの HTTP クライアントを設定していない場合は、依存関係を指定する必要はありません。

次の Maven `pom.xml` ファイルの XML スニペットでは、`<artifactId>s3</artifactId>` で宣言された依存関係によって Apache ベースの HTTP クライアントが自動的に取り込まれます。そのために依存関係を特別に宣言する必要はありません。

```
<dependencyManagement>
   <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.27.21</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient-->
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
</dependencies>
```

これらの依存関係では、`ApacheHttpClient` ライブラリはランタイムのクラスパス上にのみ存在するため、明示的に HTTP 設定を変更することはできません。

### 設定が必要です
<a name="http-config-apache-yes-config"></a>

`ApacheHttpClient` を設定するには、*コンパイル*時間に `apache-client` ライブラリに依存関係を追加する必要があります。

次の Maven `pom.xml` ファイルの例を参照して、「`ApacheHttpClient`」を設定します。

```
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>software.amazon.awssdk</groupId>
                <artifactId>bom</artifactId>
                <version>2.27.21</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>s3</artifactId>
        </dependency>
        <!-- By adding the apache-client dependency, ApacheHttpClient will be added to 
             the compile classpath so you can configure it. -->
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>apache-client</artifactId>
        </dependency>
    </dependencies>
```

## `ApacheHttpClient` を使用および設定する
<a name="http-apache-config"></a>

サービスクライアントを構築すると同時に `ApacheHttpClient` のインスタンスを設定することも、複数のサービスクライアントで共有するために単一のインスタンスを設定することもできます。

いずれの方法でも、`[ApacheHttpClient.Builder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ApacheHttpClient.Builder.html)` を使用して Apache ベースの HTTP クライアントのプロパティを設定します。

### ベストプラクティス: `ApacheHttpClient` インスタンスをサービスクライアント専用にする
<a name="http-config-apache-recomm"></a>

`ApacheHttpClient` のインスタンスを設定する必要がある場合は、専有 `ApacheHttpClient` インスタンスを構築することをお勧めします。これを行うには、サービスクライアントのビルダーの `httpClientBuilder` メソッドを使用します。この方法では、HTTP クライアントのライフサイクルが SDK によって管理されるため、不要になったときに `ApacheHttpClient` インスタンスを閉じなかった場合にメモリリークが発生するのを防ぐことができます。

次の例では、`S3Client` を作成して、`maxConnections` と `connectionTimeout` の値で `ApacheHttpClient` の埋め込みインスタンス設定します。HTTP インスタンスは、`S3Client.Builder` の`httpClientBuilder` メソッドを使用して作成されます。

 **インポート** 

```
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
```

 **コード** 

```
S3Client s3Client = S3Client   // Singleton: Use the s3Client for all requests.
    .builder()
    .httpClientBuilder(ApacheHttpClient.builder()
        .maxConnections(100)
        .connectionTimeout(Duration.ofSeconds(5))
    ).build();

// Perform work with the s3Client.

s3Client.close();   // Requests completed: Close all service clients.
```

### 別の方法: `ApacheHttpClient` インスタンスを共有する
<a name="http-config-apache-alt"></a>

アプリケーションのリソースとメモリの使用量を低く抑えるため、`ApacheHttpClient` を設定して複数のサービスクライアント間で共有できます。HTTP 接続プールは共有されるため、リソースの使用量が少なくなります。

**注記**  
`ApacheHttpClient` インスタンスを共有する場合、破棄の準備が整った時点でインスタンスを閉じる必要があります。サービスクライアントが閉じられても、SDK はインスタンスを閉じません。

次の例では、2 つのサービスクライアントで使用される Apache ベースの HTTP クライアントを設定します。設定された `ApacheHttpClient` インスタンスは、各ビルダーの `httpClient` メソッドに渡されます。サービスクライアントと HTTP クライアントが不要になると、コードによって明示的に閉じられます。HTTP クライアントは最後に閉じられます。

**インポート**

```
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
```

 **コード** 

```
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
        .maxConnections(100).build();

// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = 
    S3Client.builder()
            .httpClient(apacheHttpClient).build();

DynamoDbClient dynamoDbClient = 
    DynamoDbClient.builder()
                  .httpClient(apacheHttpClient).build();

// Perform work with the s3Client and dynamoDbClient.

// Requests completed: Close all service clients.
s3Client.close();
dynamoDbClient.close();
apacheHttpClient.close();  // Explicitly close apacheHttpClient.
```

## プロキシの設定例
<a name="http-configuration-apache-proxy-conf-ex"></a>

次のコードスニペットは、[Apache HTTP クライアントのプロキシ設定ビルダー](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache/ProxyConfiguration.Builder.html)を使用しています。

```
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
                .proxyConfiguration(ProxyConfiguration.builder()
                        .endpoint(URI.create("http://example.com:1234"))
                        .username("username")
                        .password("password")
                        .addNonProxyHost("localhost")
                        .addNonProxyHost("host.example.com")
                        .build())
                .build();
```

プロキシ設定に対応する Java システムプロパティは、以下のコマンドラインスニペットに示されています。

```
$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \
-Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
```

環境変数を使用する同等のセットアップは次のとおりです。

```
// Set the following environment variables.
// $ export HTTP_PROXY="http://username:password@example.com:1234"
// $ export NO_PROXY="localhost|host.example.com"

// Set the 'useSystemPropertyValues' to false on the proxy configuration.
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder()
                .proxyConfiguration(ProxyConfiguration.builder()
                        .useSystemPropertyValues(Boolean.FALSE)
                        .build())
                .build();

// Run the application.
// $ java -cp ... App
```

**注記**  
Apache HTTP クライアントは現在 HTTPS プロキシシステムプロパティまたは HTTPS\$1PROXY 環境変数をサポートしていません。