AWS SDK for Java 2.x のコードでのサービスクライアントの設定 - AWS SDK for Java 2.x

AWS SDK for Java 2.x のコードでのサービスクライアントの設定

外部でのサービスクライアントの設定の代わりに、またはその追加として、コードを使用したプログラミングでサービスクライアントを設定できます。

サービスクライアントをコードで設定することで、利用可能な多くのオプションをきめ細かく管理できます。外部で設定できる設定のほとんどは、コードで設定することもできます。

コードでの基本設定

たとえば、次のスニペットでは、Amazon S3 サービスクライアントの AWS リージョン をコードで EU_SOUTH_2 に設定します。

S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .build();

前のスニペットは、静的ファクトリメソッド builder() を示しています。builder() メソッドは、サービスクライアントをカスタマイズできる builder オブジェクトを返します。fluent セッターは builder オブジェクトを返します (このケースでは S3ClientBuilder インスタンス)。そのため、メソッドの呼び出しを連鎖させて利便性とコードの可読性を向上させることができます。必要なプロパティを設定した後、build() メソッドを呼び出してクライアントを作成します。

コードでの高度な設定

次のスニペットは、追加の設定オプションを示しています。

ClientOverrideConfiguration clientOverrideConfiguration = ClientOverrideConfiguration.builder() .apiCallAttemptTimeout(Duration.ofSeconds(1)) .addMetricPublisher(CloudWatchMetricPublisher.create()) .build(); S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .overrideConfiguration(clientOverrideConfiguration) .httpClientBuilder( ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy:8080")) .build()) ).build();

前のスニペットには、サービスクライアントを設定するための複数のエントリポイントがあります。

  • すべてのサービスクライアントに共通する設定オプションを提供する ClientOverrideConfiguration.Builder オブジェクト。これらの設定は、HTTP 実装に依存しない AWS 固有の動作です。

  • 別の HTTP クライアントビルダー実装による HTTP クライアント設定。ApacheHttpClient.Builder はその一例です。サービスクライアントは、設定された HTTP クライアントをサービスクライアントに関連付ける httpClientBuilder() メソッドを提供します。

  • region()credentialsProvider() などのクライアントビルダー自体のメソッド

AWS SDK for Java 2.x は、個別のオブジェクトを作成してサービスクライアントメソッドに渡す代わりに、Lambda 式を受け入れてこれらのオブジェクトをインラインで構築するメソッドを提供します。ビルダーの設定メソッドの名前は同じですが、署名は異なります。例:

前に示した、このアプローチを使用した S3 クライアントの設定は、1 つのコードブロックで行うことができます。

S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .overrideConfiguration(b -> b .apiCallAttemptTimeout(Duration.ofSeconds(1)) .addMetricPublisher(CloudWatchMetricPublisher.create())) .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy:8080")) .build())) .build();

コードでは使用できない設定オプション

次の設定は SDK の基本的な初期化プロセスに影響するため、外部でのみ設定可能で、コードによる設定はできません。

ファイルの場所設定

これらの設定は、共有設定ファイルと認証情報ファイルの場所を制御します。SDK がファイルを読み込んだ後にプログラムで上書きすることはできません。

  • AWS_CONFIG_FILE (環境変数) / aws.configFile (JVM システムプロパティ)

  • AWS_SHARED_CREDENTIALS_FILE (環境変数) / aws.sharedCredentialsFile (JVM システムプロパティ)

これらの設定は、SDK が設定を検索する場所を決定するため、SDK が設定ファイルを読み込む前に設定する必要があります。SDK が初期化されると、これらの値を変更しても変化はありません。

インスタンスメタデータサービスの無効化

  • AWS_EC2_METADATA_DISABLED (環境変数) / aws.disableEc2Metadata (JVM システムプロパティ)

この設定は、SDK が EC2 インスタンスメタデータサービスの使用を試行するかどうかを制御します。SDK が初期化されると、この設定をプログラムで変更することはできません。

プロファイルの選択

  • AWS_PROFILE (環境変数) / aws.profile (JVM システムプロパティ)

この設定は、共有設定ファイルと認証情報ファイルからロードするプロファイルを SDK に指示します。ロード後にこの値を変更しても変化はありません。

コンテナの認証情報パス

  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  • AWS_CONTAINER_CREDENTIALS_FULL_URI

  • AWS_CONTAINER_AUTHORIZATION_TOKEN

  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE

これらの環境変数を使用して、コンテナサービスから認証情報を取得する方法を SDK に指示します。サービスクライアントの初期化中に認証情報プロバイダーチェーンが確立されると、これらの設定を変更することはできません。

デフォルトの HTTP 実装の選択

  • SYNC_HTTP_SERVICE_IMPL (環境変数) / software.amazon.awssdk.http.service.impl (JVM システムプロパティ)

  • ASYNC_HTTP_SERVICE_IMPL (環境変数) / software.amazon.awssdk.http.async.service.impl (JVM システムプロパティ)

これらのグローバル設定は、個々のサービスクライアントでコードによる上書きが行われない限り、SDK がすべてのサービスクライアントで使用する HTTP クライアント実装を決定します。これらを設定は SDK が HTTP クライアントを初期化する前にする必要があり、後で変更することはできません。