翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Apache ベースのHTTPクライアントを設定する
の同期サービスクライアントは、ApacheHttpClientApacheHttpClient
は Apache に基づいていますHttpClient
SDK また、 には も用意されておりUrlConnectionHttpClientUrlConnectionHttpClient
の設定の詳細については、「URLConnectionベースのHTTPクライアントを設定する」を参照してください。
で使用できる設定オプションの全セットを確認するにはApacheHttpClient
、ApacheHttpClient.Builder
ApacheHttpClient
へのアクセス
ほとんどの場合、明示的な設定を行わずに ApacheHttpClient
を使用することになります。サービスクライアントを宣言すると、 SDKは を標準値ApacheHttpClient
で設定します。
ApacheHttpClient
を明示的に設定したり、複数のサービスクライアントで使用したりする場合は、設定できるようにする必要があります。
設定が不要です
Maven のサービスクライアントへの依存を宣言すると、 はapache-client
アーティファクトへのランタイム依存SDKを追加します。これにより、コンパイル時ではなく、ランタイム時にその ApacheHttpClient
クラスをコードで使用できるようになります。Apache ベースのHTTPクライアントを設定していない場合は、依存関係を指定する必要はありません。
Maven pom.xml
ファイルの次のXMLスニペットでは、 で宣言された依存関係によって Apache ベースのHTTPクライアント<artifactId>s3</artifactId>
が自動的に取得されます。そのために依存関係を特別に宣言する必要はありません。
<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設定変更を行うことはできません。
設定が必要です
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
を使用および設定する
サービスクライアントを構築すると同時に ApacheHttpClient
のインスタンスを設定することも、単一インスタンスを複数のサービスクライアント間で共有するように設定することもできます。
どちらの方法でも、 ApacheHttpClient.Builder
を使用して Apache ベースのHTTPクライアントのプロパティを設定します。
ベストプラクティス: ApacheHttpClient
インスタンスをサービスクライアント専有にする
ApacheHttpClient
のインスタンスを設定する必要がある場合は、専有 ApacheHttpClient
インスタンスを構築することをお勧めします。これを行うには、サービスクライアントのビルダーの httpClientBuilder
メソッドを使用します。これにより、HTTPクライアントのライフサイクルは によって管理されます。これによりSDK、不要になったときにApacheHttpClient
インスタンスが閉じられない場合にメモリリークが発生する可能性を回避できます。
次の例では、S3Client
を作成して、maxConnections
と connectionTimeout
の値で ApacheHttpClient
の埋め込みインスタンス設定します。HTTP インスタンスは、 の httpClientBuilder
メソッドを使用して作成されますS3Client.Builder
。
インポート
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
インスタンスを共有する
アプリケーションのリソースとメモリの使用量を低く抑えるため、ApacheHttpClient
を設定して複数のサービスクライアント間で共有できます。HTTP 接続プールは共有されるため、リソースの使用量が減少します。
注記
ApacheHttpClient
インスタンスを共有する場合、破棄の準備が整った時点でインスタンスを閉じる必要があります。SDK は、サービスクライアントが閉じられたときにインスタンスを閉じません。
次の例では、2 つのサービスHTTPクライアントで使用される Apache ベースのクライアントを設定します。設定された 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.
プロキシの設定例
次のコードスニペットは、Apache HTTPクライアント のプロキシ設定ビルダー
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_PROXY 環境変数をサポートしていません。