AWS SDK for Java 2.x に AWS リージョン を設定する - AWS SDK for Java 2.x

AWS SDK for Java 2.x に AWS リージョン を設定する

SDK クライアントは、クライアントの作成時に指定した特定の AWS リージョン の AWS のサービス に接続します。この設定により、アプリケーションはその地理的エリアの AWS リソースとやり取りできます。リージョンを明示的に設定せずにサービスクライアントを作成すると、SDK は外部設定からデフォルトのリージョンを使用します。

AWS リージョンを明示的に設定する

リージョンを明示的に設定するには、Region クラスで定義されている定数を使用することをお勧めします。これは、公開されている利用可能なすべてのリージョンを列挙したものです。

そのクラスで列挙されたリージョンが設定されたクライアントを作成するには、クライアントビルダーの region メソッドを使用します。

Ec2Client ec2 = Ec2Client.builder() .region(Region.US_WEST_2) .build();

使用するリージョンが Region クラスの列挙でない場合は、静的な of メソッドを使用して新しいリージョンを作成することができます。このメソッドを使用することで、SDK をアップグレードせずに、新しいリージョンにアクセスすることができます。

Region newRegion = Region.of("us-east-42"); Ec2Client ec2 = Ec2Client.builder() .region(newRegion) .build();
注記

ビルダーを使用してクライアントをビルドした後、そのクライアントはイミュータブルとなり、AWS リージョンは変更不可能です。同じサービスで複数の AWS リージョンを使用する必要がある場合は、複数のクライアント (リージョンごとに 1 つ) を作成する必要があります。

SDK による環境に基づくデフォルト AWS リージョン の自動的な決定

Amazon EC2 または AWS Lambda でコードを実行する場合に、コードが実行されているリージョンと同じ AWS リージョンを使用するようにクライアントを構成することができます。そうすることによって、コードとそれが実行される環境とが分離され、レイテンシーの低減や冗長化のために複数の AWS リージョンにデプロイすることが容易になります。

AWS リージョン のデフォルトプロバイダーチェーンを使用して環境からリージョンを決定するには、クライアントビルダーの create メソッドを使用します。

Ec2Client ec2 = Ec2Client.create();

他の方法でクライアントを設定することもできますが、リージョンを設定することはできません。SDK は、デフォルトのリージョンプロバイダーチェーンを使用して AWS リージョン を取得します。

Ec2Client ec2Client = Ec2Client.builder() .credentialsProvider(ProfileCredentialsProvider.builder() .profileName("my-profile") .build()) .build();

region メソッドを使用して AWS リージョンを明示的に設定しない場合は、SDK によってリージョンのデフォルトプロバイダーチェーンが確認され、使用するリージョンが判断されます。

デフォルト AWS リージョン プロバイダーチェーンについて

SDK は次の手順で AWS リージョンを検索します。

  1. ビルダー自体で region メソッドを使用して設定されている明示的なリージョンは、その他の設定より優先されます。

  2. SDK は JVM システムプロパティ aws.region を検索し、見つかった場合はその値を使用します。

  3. AWS_REGION 環境変数が確認されます。設定されている場合は、そのリージョンを使用してクライアントが設定されます。

    注記

    この環境変数は Lambda コンテナによって設定されます。

  4. SDK は、AWS 共有設定ファイルと認証情報ファイル内のアクティブなプロファイルをチェックします。region プロパティがあると、SDK はこのプロパティを使用します。

    default プロファイルは、AWS_PROFILE 環境変数または aws.profile JVM システムプロパティによって上書きされない限り、アクティブなプロファイルです。SDK が同じプロファイル (default プロファイルを含む) の両方のファイルで region プロパティを見つけた場合、SDK は共有認証情報ファイルの値を使用します。

  5. SDK は、Amazon EC2 インスタンスメタデータサービス (IMDS) を使用して現在実行中の Amazon EC2 インスタンスのリージョンを決定しようとします。

    • セキュリティを強化するには、SDK が IMDS のバージョン 1 を使用しないようにする必要があります。同じ設定を使用して、 IAM ロールの認証情報を安全に取得する セクションで説明されているバージョン 1 を無効にします。

  6. この時点で SDK によってリージョンがまだ見つかっていない場合は、クライアント作成が失敗し、例外が発生します。

AWS アプリケーション開発の一般的なアプローチとしては、ローカル開発では共有設定ファイル を使用してローカル開発のリージョンを設定し、AWS インフラストラクチャでのアプリケーションの実行時には、リージョンのデフォルトプロバイダーチェーンを使用してリージョンを決定します。これによって、クライアントの作成が大幅に簡略化され、アプリケーションの性が維持されます。

リージョンでサービスが使用可能かどうかを確認する

特定の AWS のサービス がリージョンで使用できるかどうかを確認するには、サービスクライアントで静的な serviceMetadata メソッドを使用します。

DynamoDbClient.serviceMetadata().regions().forEach(System.out::println);

前のスニペットは、DynamoDB サービスを持つ AWS リージョン コードの長いリストを出力します。

af-south-1 ap-east-1 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-south-1 ap-south-2 ap-southeast-1 ...

コードを使用して、サービスクライアントが使用するリージョンのリージョンクラスの列挙を検索できます。

たとえば、ap-northeast-2 コードを使用してリージョンで DynamoDB を使用する場合は、少なくとも次の設定を使用しt DynamoDB クライアントを作成します。

DynamoDbClient ddb = DynamoDbClient.builder() .region(Region.AP_NORTHEAST_2) .build();

特定のエンドポイントを選択する

サービスのプレビュー機能を一般公開前にテストする場合など、特定の状況では、リージョン内の特定のエンドポイントを指定する必要がある場合があります。このような状況では、endpointOverride メソッドを呼び出してサービスクライアントを設定できます。

例えば、特定のエンドポイントを指定して欧州 (アイルランド) リージョンを使用するように Amazon EC2 クライアントを設定するには、次のコードを使用します。

Ec2Client ec2 = Ec2Client.builder() .region(Region.EU_WEST_1) .endpointOverride(URI.create("https://ec2.eu-west-1.amazonaws.com")) .build();

すべての AWS のサービスで使用されるリージョンと対応するエンドポイントの最新リストについては、リージョンとエンドポイントを参照してください。