

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

# クライアントエンドポイントを設定する
<a name="config-endpoint"></a>

が を AWS SDK for Kotlin 呼び出すとき AWS のサービスの最初のステップの 1 つは、リクエストをルーティングする場所を決定することです。このプロセスは、エンドポイント解決と呼ばれます。

サービスクライアントを構築するときに、SDK のエンドポイント解決を設定できます。エンドポイント解決のデフォルト設定では通常問題ありませんが、デフォルト設定を変更する理由はいくつかあります。これには以下のように 2 つの理由があります。
+ サービスのプレリリースバージョンまたはサービスのローカルデプロイにリクエストを行います。
+ SDK でまだモデル化されていない特定のサービス機能へのアクセス。

**警告**  
エンドポイント解決は、高度な SDK トピックです。デフォルト設定を変更すると、コードが機能しなくなるリスクがあります。デフォルト設定は、本番環境のほとんどのユーザーに適用されます。

## カスタム設定
<a name="config-endpoint-custom-config"></a>

クライアントの構築時に使用できる 2 つのプロパティを使用して、サービスクライアントのエンドポイント解決をカスタマイズできます。

1. `endpointUrl: Url`

1. `endpointProvider: EndpointProvider`

### `endpointUrl` を設定する
<a name="config-endpoint-custom-config-endpointurl"></a>

`endpointUrl` の値を設定して、サービスの「ベース」ホスト名を指定できます。ただし、この値はクライアントの `EndpointProvider` インスタンスにパラメータとして渡されるため、最終値ではありません。その後、`EndpointProvider`実装はその値を検査して変更し、最終的なエンドポイントを決定できます。

例えば、Amazon Simple Storage Service (Amazon S3) クライアントに`endpointUrl`値を指定して `GetObject`オペレーションを実行すると、デフォルトのエンドポイントプロバイダー実装によってバケット名がホスト名値に挿入されます。

実際には、ユーザーはサービスの開発インスタンスまたはプレビューインスタンスを指す`endpointUrl`値を設定します。

### `endpointProvider` を設定する
<a name="config-endpoint-custom-config-endpointprovider"></a>

サービスクライアントの`EndpointProvider`実装によって、最終的なエンドポイント解決が決まります。次のコードブロックに示す`EndpointProvider`インターフェイスは、 `resolveEndpoint`メソッドを公開します。

```
public fun interface EndpointProvider<T> {
    public suspend fun resolveEndpoint(params: T): Endpoint
}
```

サービスクライアントは、すべてのリクエストに対して `resolveEndpoint`メソッドを呼び出します。サービスクライアントは、プロバイダーから返された`Endpoint`値を使用しますが、それ以上の変更はありません。

#### `EndpointProvider` のプロパティ
<a name="config-endpoint-custom-config-endpointprovider-params"></a>

`resolveEndpoint` メソッドは、エンドポイント解決で使用されるプロパティを含むサービス固有の`EndpointParameters`オブジェクトを受け入れます。

すべてのサービスには、次の基本プロパティが含まれます。


****  

| 名前 | 型 | 説明 | 
| --- | --- | --- | 
| region | 文字列 | クライアントの AWS リージョン | 
| endpoint | String | endpointUrl の値セットの文字列表現 | 
| useFips | ブール値 | クライアントの設定で FIPS エンドポイントが有効かどうか | 
| useDualStack | ブール値 | クライアントの設定でデュアルスタックエンドポイントが有効かどうか | 

サービスは、解決に必要な追加のプロパティを指定できます。例えば、Amazon S3 [https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.endpoints/-s3-endpoint-parameters/index.html](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3.endpoints/-s3-endpoint-parameters/index.html)にはバケット名といくつかの Amazon S3-specific機能設定が含まれています。例えば、`forcePathStyle` プロパティは仮想ホストアドレス指定を使用できるかどうかを決定します。

独自のプロバイダーを実装する場合、 の独自のインスタンスを作成する必要はありません`EndpointParameters`。SDK は、各リクエストのプロパティを提供し、`resolveEndpoint` の実装に渡します。

### `endpointUrl`、または `endpointProvider`
<a name="config-endpoint-custom-config-which"></a>

次の 2 つのステートメントは、同等のエンドポイント解決動作を持つクライアントを生成しないことを理解することが重要です。

```
// Use endpointUrl.
S3Client.fromEnvironment { 
    endpointUrl = Url.parse("https://endpoint.example")
}

// Use endpointProvider.
S3Client.fromEnvironment {
    endpointProvider = object : S3EndpointProvider {
        override suspend fun resolveEndpoint(params: S3EndpointParameters): Endpoint = Endpoint("https://endpoint.example")
    }
}
```

`endpointUrl` プロパティを設定するステートメントは、 (デフォルト) プロバイダーに渡される*ベース* URL を指定します。これはエンドポイント解決の一部として変更できます。

を設定するステートメントは、 が`S3Client`使用する*最終的な* URL `endpointProvider`を指定します。

両方のプロパティを設定できますが、ほとんどの場合、カスタマイズが必要なプロパティの 1 つを指定します。一般的な SDK ユーザーとして、ほとんどの場合、 `endpointUrl`値を指定します。

### Amazon S3 に関する注意事項
<a name="config-endpoint-custom-config-s3"></a>

Amazon S3 は、バケット仮想ホスティングなどのカスタマイズされたエンドポイントのカスタマイズによってモデル化された機能の多くを備えた複雑なサービスです。仮想ホスティングは、バケット名がホスト名に挿入される Amazon S3 の機能です。

このため、Amazon S3 サービスクライアントの`EndpointProvider`実装を置き換えないことをお勧めします。解決動作を拡張する必要がある場合は、エンドポイントに関する追加の考慮事項とともにローカル開発スタックにリクエストを送信することで、デフォルトの実装をラップすることをお勧めします。次の`endpointProvider`例は、このアプローチの実装例を示しています。

## 例
<a name="config-endpoint-examples"></a>

### `endpointUrl` の例
<a name="config-endpoint-examples-endpointurl"></a>

次のコードスニペットは、Amazon S3 クライアントの一般的なサービスエンドポイントを上書きする方法を示しています。

```
val client = S3Client.fromEnvironment {
    endpointUrl = Url.parse("https://custom-s3-endpoint.local")
    // EndpointProvider is left as the default.
}
```

### `endpointProvider` の例
<a name="config-endpoint-examples-endpointprovider"></a>

次のコードスニペットは、Amazon S3 のデフォルトの実装をラップするカスタムエンドポイントプロバイダーを提供する方法を示しています。

```
import aws.sdk.kotlin.services.s3.endpoints.DefaultS3EndpointProvider
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointParameters
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointProvider
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint

public class CustomS3EndpointProvider : S3EndpointProvider {
    override suspend fun resolveEndpoint(params: S3EndpointParameters) =
        if (/* Input params indicate we must route another endpoint for whatever reason. */) {
            Endpoint(/* ... */)
        } else {
            // Fall back to the default resolution.
            DefaultS3EndpointProvider().resolveEndpoint(params)
        }
}
```

### `endpointUrl` および `endpointProvider`
<a name="config-endpoint-examples-both"></a>

次のサンプルプログラムは、 `endpointUrl`と `endpointProvider`の設定間の相互作用を示しています。これは高度なユースケースです。

```
import aws.sdk.kotlin.services.s3.S3Client
import aws.sdk.kotlin.services.s3.endpoints.DefaultS3EndpointProvider
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointParameters
import aws.sdk.kotlin.services.s3.endpoints.S3EndpointProvider
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint

fun main() = runBlocking {
    S3Client.fromEnvironment {
        endpointUrl = Url.parse("https://example.endpoint")
        endpointProvider = CustomS3EndpointProvider()
    }.use { s3 ->
        // ...
    }
}

class CustomS3EndpointProvider : S3EndpointProvider {
    override suspend fun resolveEndpoint(params: S3EndpointParameters) {
        // The resolved string value of the endpointUrl set in the client above is available here.
        println(params.endpoint) 
        // ...
    }
}
```