

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

# AWS SDK for Java 2.x でのクライアントエンドポイントの設定
<a name="endpoint-config"></a>

SDK for Java 2.x には、サービスエンドポイントを設定する複数の方法があります。エンドポイントは、SDK が AWS のサービス への API コールを行うために使用する URL です。デフォルトでは、SDK は設定した AWS リージョン に基づいて、各サービスに適したエンドポイントを自動的に決定します。ただし、これらのエンドポイントをカスタマイズまたは上書きする必要がある場合があります。
+ ローカルまたはサードパーティーのサービス実装 (LocalStack など) の使用
+ プロキシまたは VPC エンドポイントを介した AWS のサービス への接続
+ ベータまたはプレリリースサービスエンドポイントに対するテスト

## エンドポイント設定オプション
<a name="endpoint-configuration-options"></a>

 AWS SDK for Java 2.x には、エンドポイントを設定するいくつかの方法があります。
+ サービスクライアントビルダーを使用したコード内設定
+ 環境変数を使用した外部設定
+ JVM システムプロパティを使用した外部設定
+ 共有 AWS 設定ファイルを使用した外部設定

## コード内エンドポイント設定
<a name="in-code-endpoint-configuration"></a>

### の使用`endpointOverride`
<a name="endpoint-override"></a>

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

**Example 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` を使用する場合、エンドポイントが明示的に設定されている場合も、クライアントのリージョンを指定する必要があります。リージョンは、リクエストの署名に使用されます。

### エンドポイント検出
<a name="endpoint-discovery"></a>

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

**Example 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();
```

## リクエストレベルのエンドポイント設定
<a name="request-level-endpoint-configuration"></a>

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

**Example 特定のリクエストのエンドポイントの上書き**  

```
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("amzn-s3-demo-bucket")
        .key("my-key")
        .overrideConfiguration(c -> c.putHeader("Host", "custom-endpoint.example.com"))
        .build();

// Execute the request with the custom endpoint
s3.getObject(getObjectRequest);
```

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

## エンドポイントの外部設定
<a name="external-endpoint-configuration"></a>

### 環境変数の使用
<a name="environment-variables-for-endpoints"></a>

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

**Example 環境変数を使用した 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 システムプロパティの使用
<a name="jvm-system-properties-for-endpoints"></a>

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

**Example 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 設定ファイルの使用
<a name="aws-config-file-for-endpoints"></a>

 AWS SDK for Java 2.x は、共有 AWS 設定ファイルを介したエンドポイント設定もサポートします。設定ファイルは通常は `~/.aws/config` (Linux/macOS) または `%USERPROFILE%\.aws\config` (Windows) にあります。詳細と例については、「[AWS SDK およびツールリファレンスガイド](https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html#ss-endpoints-config)」を参照してください。

## 設定の優先順位
<a name="endpoint-configuration-precedence"></a>

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

1. リクエストレベルの上書き (該当する場合)

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

1. 環境変数

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

1. 共有 AWS 設定ファイル

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

## サービス固有のエンドポイント設定
<a name="service-specific-endpoint-configuration"></a>

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

### Amazon S3 エンドポイント設定
<a name="s3-endpoint-configuration"></a>

 Amazon S3 は、 `S3Configuration` クラスを使用した複数のエンドポイント設定をサポートしています。
+ `dualstackEnabled` - IPv6 サポートを有効にします。
+ `accelerateModeEnabled` - S3 Transfer Acceleration を有効にします。
+ `pathStyleAccessEnabled` - 仮想ホスト形式の代わりにパス形式のアクセスを使用します。
+ `useArnRegionEnabled` - クロスリージョンリクエストに ARN のリージョンを使用します。
+ `fipsModeEnabled` - リクエストを FIPS 準拠のエンドポイントにルーティングします。

**Example S3 固有エンドポイントオプションの設定**  

```
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 エンドポイント設定
<a name="dynamodb-endpoint-configuration"></a>

 DynamoDB の場合、テストのためにエンドポイント検出を使用するか、[DynamoDB local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) に接続できます。

**Example 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 は、コードまたは外部設定を使用して設定できる[アカウントベースのエンドポイント](https://docs.aws.amazon.com/sdkref/latest/guide/feature-account-endpoints.html)の使用もサポートしています。次の例は、クライアントの作成時にコードでアカウントベースのエンドポイントの使用を無効にする方法を示しています (デフォルト設定が*推奨*されます）。

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

## ベストプラクティス
<a name="endpoint-configuration-best-practices"></a>

 AWS SDK for Java 2.x でエンドポイントを設定する場合は、次のベストプラクティスを考慮してください。
+  *環境固有のエンドポイントに外部設定を使用する* — 環境変数、システムプロパティ、または環境 (開発、テスト、本番稼働) に応じて異なるエンドポイントの AWS 設定ファイルを使用します。
+  *アプリケーション固有のエンドポイントにコード内設定を使用する* — アプリケーションの設計に固有のエンドポイントには、クライアントビルダーの `endpointOverride` メソッドを使用します。
+  *常にリージョンを指定する* — エンドポイントを上書きするときも、リクエスト署名に使用されるリージョンを常に指定します。
+  *グローバルエンドポイントの上書きに注意する* — グローバルエンドポイントの上書きを使用すると、意図しないサービスも含めたすべてのサービスに影響する可能性があります。
+  *セキュリティへの影響を考慮する* — カスタムエンドポイントを使用する場合は、特に本番環境のワークロードに対して、適切なセキュリティ対策が講じられていることを確認してください。