でのクライアントエンドポイントの設定 AWS SDK for Java 2.x - AWS SDK for Java 2.x

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

でのクライアントエンドポイントの設定 AWS SDK for Java 2.x

SDK for Java 2.x には、サービスエンドポイントを設定する複数の方法が用意されています。エンドポイントは、SDK が API コールを行うために使用する URL です AWS のサービス。デフォルトでは、SDK は設定した に基づいて AWS リージョン 、各サービスに適したエンドポイントを自動的に決定します。ただし、これらのエンドポイントをカスタマイズまたは上書きする必要があるシナリオがあります。

  • ローカルまたはサードパーティーのサービス実装 (LocalStack など) の使用

  • プロキシまたは VPC エンドポイント AWS のサービス を介した への接続

  • ベータ版またはプレリリース版のサービスエンドポイントに対するテスト

エンドポイント設定オプション

AWS SDK for Java 2.x には、エンドポイントを設定するいくつかの方法があります。

  • サービスクライアントビルダーを使用したコード内設定

  • 環境変数を使用した外部設定

  • JVM システムプロパティを使用した外部設定

  • 共有設定ファイルを使用した外部 AWS 設定

コード内エンドポイント設定

endpointOverride を使用する

エンドポイントを設定する最も直接的な方法は、サービスクライアントビルダーで endpointOverrideメソッドを使用することです。このメソッドは、カスタムエンドポイント URL を表すURIオブジェクトを受け入れます。

例 Amazon S3 クライアントのカスタムエンドポイントの設定
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .endpointOverride(URI.create("https://my-custom-s3-endpoint.example.com")) .build();

を使用する場合endpointOverride、エンドポイントが明示的に設定されていても、クライアントのリージョンを指定する必要があります。リージョンは、リクエストの署名に使用されます。

エンドポイント検出

一部の は、SDK が使用する最適なエンドポイントを自動的に検出できるエンドポイント検出 AWS のサービス をサポートしています。この機能は、サービスクライアントビルダーの endpointDiscoveryEnabledメソッドを使用して有効または無効にできます。

例 DynamoDB クライアントのエンドポイント検出の有効化
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; DynamoDbClient dynamoDb = DynamoDbClient.builder() .region(Region.US_WEST_2) .endpointDiscoveryEnabled(true) .build();

リクエストレベルのエンドポイント設定

場合によっては、デフォルトのエンドポイントで他のリクエストに同じクライアントを使用しているときに、特定のリクエストのエンドポイントを上書きする必要があります。は、リクエストの上書きを通じてこれ AWS SDK for Java 2.x をサポートします。

例 特定のリクエストのエンドポイントの上書き
import software.amazon.awssdk.core.SdkRequest; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.http.SdkHttpRequest; S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .build(); // Create a request GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("my-bucket") .key("my-key") .overrideConfiguration(c -> c.putHeader("Host", "custom-endpoint.example.com")) .build(); // Execute the request with the custom endpoint s3.getObject(getObjectRequest);

リクエストレベルのエンドポイントオーバーライドは制限されており、一部のサービスやシナリオでは機能しない場合があります。ほとんどの場合、クライアントレベルのエンドポイント設定を使用することをお勧めします。

外部エンドポイントの設定

環境変数の使用

環境変数を使用してエンドポイントを設定できます。SDK は、 形式の環境変数を通じてサービス固有のエンドポイント設定をサポートします。ここでAWS_ENDPOINT_URL_[SERVICE][SERVICE]は大文字のサービス識別子です。

例 環境変数を使用した S3 エンドポイントの設定
# For Linux/macOS export AWS_ENDPOINT_URL_S3=https://my-custom-s3-endpoint.example.com # For Windows set AWS_ENDPOINT_URL_S3=https://my-custom-s3-endpoint.example.com

次の環境変数を使用して、グローバルエンドポイント URL プレフィックスまたはサフィックスを設定することもできます。

  • AWS_ENDPOINT_URL - すべてのサービスのグローバルエンドポイントを設定します

  • AWS_ENDPOINT_URL_PREFIX - すべてのサービスエンドポイントにプレフィックスを追加します

  • AWS_ENDPOINT_URL_SUFFIX - すべてのサービスエンドポイントにサフィックスを追加します

JVM システムプロパティの使用

JVM システムプロパティを使用してエンドポイントを設定することもできます。形式は環境変数と似ていますが、別の命名規則を使用します。

例 JVM システムプロパティを使用した S3 エンドポイントの設定
java -Daws.endpointUrl.s3=https://my-custom-s3-endpoint.example.com -jar your-application.jar

グローバルエンドポイント設定は、システムプロパティからも使用できます。

  • aws.endpointUrl - すべてのサービスのグローバルエンドポイントを設定します

  • aws.endpointUrl.prefix - すべてのサービスエンドポイントにプレフィックスを追加します

  • aws.endpointUrl.suffix - すべてのサービスエンドポイントにサフィックスを追加します

共有 AWS 設定ファイルの使用

は、共有 AWS 設定ファイルを介したエンドポイント設定 AWS SDK for Java 2.x もサポートします。通常は (~/.aws/configLinux/macOS) または %USERPROFILE%\.aws\config (Windows) にあります。情報と例については、 AWS SDKsとツールのリファレンスガイドを参照してください。

設定の優先順位

複数のエンドポイント設定が存在する場合、SDK は次の優先順位 (最高から最低まで) に従います。

  1. リクエストレベルのオーバーライド (該当する場合)

  2. を介したクライアントレベルの設定 endpointOverride

  3. 環境変数

  4. JVM システムプロパティ

  5. 共有 AWS 設定ファイル

  6. 設定された に基づくデフォルトのエンドポイント AWS リージョン

サービス固有のエンドポイント設定

一部の AWS のサービス には、そのサービスに固有の追加のエンドポイント設定オプションがあります。ここにいくつか例を挙げます。

Amazon S3 エンドポイント設定

Amazon S3 は、 S3Configuration クラスを通じて複数のエンドポイント設定をサポートしています。

  • dualstackEnabled - IPv6 サポートを有効にする

  • accelerateModeEnabled - S3 Transfer Acceleration を有効にする

  • pathStyleAccessEnabled - 仮想ホスト形式の代わりにパス形式のアクセスを使用します

  • useArnRegionEnabled - クロスリージョンリクエストに ARN のリージョンを使用します

  • fipsModeEnabled - リクエストを FIPS 準拠のエンドポイントにルーティングします

例 S3-specificエンドポイントオプションの設定
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.S3Configuration; S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .serviceConfiguration(S3Configuration.builder() .accelerateModeEnabled(true) .dualstackEnabled(true) .pathStyleAccessEnabled(false) .fipsModeEnabled(true) .build()) .build();

DynamoDB エンドポイント設定

DynamoDB の場合、エンドポイント検出を使用するか、DynamoDB Local に接続してテストできます。

例 DynamoDB local への接続
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import java.net.URI; DynamoDbClient dynamoDb = DynamoDbClient.builder() .endpointOverride(URI.create("http://localhost:8000")) // The region is meaningless for DynamoDB local but required for the client builder. .region(Region.US_WEST_2) .build();

DynamoDB は、コードまたは外部設定を使用して設定できるアカウントベースのエンドポイントの使用もサポートしています。次の例は、クライアントの作成時にコードでアカウントベースのエンドポイントの使用を無効にする方法を示しています (デフォルト設定が推奨されます)。

DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .region(Region.US_EAST_1) .accountIdEndpointMode(AccountIdEndpointMode.DISABLED) .build();

ベストプラクティス

でエンドポイントを設定するときは AWS SDK for Java 2.x、次のベストプラクティスを考慮してください。

  • 環境固有のエンドポイントに外部設定を使用する — 環境変数、システムプロパティ、または環境 (開発、テスト、本番稼働) によって異なるエンドポイントの設定 AWS ファイルを使用します。

  • アプリケーション固有のエンドポイントにコード内設定を使用する — アプリケーションの設計に固有のエンドポイントには、クライアントビルダーの endpointOverrideメソッドを使用します。

  • 常にリージョンを指定する — エンドポイントを上書きする場合でも、リクエスト署名に使用されるリージョンを常に指定します。

  • グローバルエンドポイントの上書きには注意が必要です。グローバルエンドポイントの上書きを使用すると、すべてのサービスに影響する可能性がありますが、意図したとおりではない可能性があります。

  • セキュリティへの影響を考慮する — カスタムエンドポイントを使用する場合は、特に本番環境のワークロードに対して、適切なセキュリティ対策が講じられていることを確認してください。