AWS SDK for Java
開発者ガイド

AWS リージョンの選択

リージョンを使用すると、特定の地域に物理的に存在する AWS のサービスにアクセスすることができます。これは、冗長性と、ユーザーがアクセスする場所の近くでのデータとアプリケーションの実行を維持するために有効です。

AWS リージョンでのサービス可用性の確認

AWS の特定のサービスがリージョンで使用できるかどうかを確認するには、使用するリージョンで isServiceSupported メソッドを使用します。

Region.getRegion(Regions.US_WEST_2) .isServiceSupported(AmazonDynamoDB.ENDPOINT_PREFIX);

指定できるリージョンに関しては、「Regions」クラスのドキュメントを参照して、サービスのエンドポイントプレフィックス使用してクエリを実行します。各サービスのエンドポイントプレフィックスはサービスインターフェイスで定義されています。たとえば、DynamoDB のエンドポイントプレフィックスは AmazonDynamoDB で定義されています。

リージョンの選択

AWS SDK for Java のバージョン 1.4 から、リージョン名を指定でき、SDK は自動的に適切なエンドポイントを選択します。自分でエンドポイントを選択する場合は、「特定のエンドポイントの選択」を参照してください。

リージョンを明示的に設定するには、「Regions」列挙型を使用することをお勧めします。これは、公開されている利用可能なすべてのリージョンを列挙したものです。その列挙型からリージョンを使用してクライアントを作成するには、以下のコードを使用します。

AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();

使用するリージョンが Regions 列挙型にない場合は、リージョンの名前を示す string を使用してリージョンを設定できます。

AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard() .withRegion("us-west-2") .build();

注記

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

特定のエンドポイントの選択

各 AWS クライアントは、setEndpoint メソッドを呼び出して、リージョン内の特定のエンドポイントを使用するように設定できます。

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

AmazonEC2 ec2 = new AmazonEC2(myCredentials); ec2.setEndpoint("https://ec2.eu-west-1.amazonaws.com");

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

環境に基づく AWS リージョンの自動的な決定

重要

このセクションは、クライアントビルダーを使用して AWS のサービスにアクセスする場合にのみ該当します。クライアントコンストラクタを使用して作成した AWS クライアントでは、環境からリージョンを決定することはなく、代わりにデフォルトの SDK リージョン (USEast1) を使用します。

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

コードが実行されているリージョンを SDK で自動的に検出するには、クライアントビルダーを使用する必要があります。

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

AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

これは、standard に続けて build を使用するのと同じです。

AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard() .build();

withRegion メソッドを使用してリージョンを明示的に設定しない場合は、SDK がリージョンのデフォルトプロバイダーチェーンに問い合わせて、使用するリージョンを決定しようとします。

デフォルトリージョンプロバイダーチェーン

リージョンルックアップ手順は以下のとおりです。

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

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

    注記

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

  3. SDK は AWS の共有設定ファイル (通常は ~/.aws/config にある) を確認します。リージョンプロパティがあると、SDK はこのプロパティを使用します。

    • AWS_CONFIG_FILE 環境変数を使用すると、共有設定ファイルの場所をカスタマイズできます。

    • AWS_PROFILE 環境変数または aws.profile システムプロパティを使用すると、SDK によってロードされるプロファイルをカスタマイズできます。

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

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

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