翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クライアントエンドポイントを設定する
が を AWS SDK for Kotlin 呼び出すとき AWS のサービスの最初のステップの 1 つは、リクエストをルーティングする場所を決定することです。このプロセスは、エンドポイント解決と呼ばれます。
サービスクライアントを構築するときに、SDK のエンドポイント解決を設定できます。エンドポイント解決のデフォルト設定では通常問題ありませんが、デフォルト設定を変更する理由はいくつかあります。これには以下のように 2 つの理由があります。
-
サービスのプレリリースバージョンまたはサービスのローカルデプロイにリクエストを行います。
-
SDK でまだモデル化されていない特定のサービス機能へのアクセス。
警告
エンドポイント解決は、高度な SDK トピックです。デフォルト設定を変更すると、コードが機能しなくなるリスクがあります。デフォルト設定は、本番環境のほとんどのユーザーに適用されます。
カスタム設定
クライアントの構築時に使用できる 2 つのプロパティを使用して、サービスクライアントのエンドポイント解決をカスタマイズできます。
-
endpointUrl: Url -
endpointProvider: EndpointProvider
endpointUrl を設定する
endpointUrl の値を設定して、サービスの「ベース」ホスト名を指定できます。ただし、この値はクライアントの EndpointProvider インスタンスにパラメータとして渡されるため、最終値ではありません。その後、EndpointProvider実装はその値を検査して変更し、最終的なエンドポイントを決定できます。
例えば、Amazon Simple Storage Service (Amazon S3) クライアントにendpointUrl値を指定して GetObjectオペレーションを実行すると、デフォルトのエンドポイントプロバイダー実装によってバケット名がホスト名値に挿入されます。
実際には、ユーザーはサービスの開発インスタンスまたはプレビューインスタンスを指すendpointUrl値を設定します。
endpointProvider を設定する
サービスクライアントのEndpointProvider実装によって、最終的なエンドポイント解決が決まります。次のコードブロックに示すEndpointProviderインターフェイスは、 resolveEndpointメソッドを公開します。
public fun interface EndpointProvider<T> { public suspend fun resolveEndpoint(params: T): Endpoint }
サービスクライアントは、すべてのリクエストに対して resolveEndpointメソッドを呼び出します。サービスクライアントは、プロバイダーから返されたEndpoint値を使用し、それ以上の変更はありません。
EndpointProvider のプロパティ
resolveEndpoint メソッドは、エンドポイント解決で使用されるプロパティを含むサービス固有のEndpointParametersオブジェクトを受け入れます。
すべてのサービスには、次の基本プロパティが含まれます。
| Name | 型 | 説明 |
|---|---|---|
region |
文字列 | クライアントの AWS リージョン |
endpoint |
String | endpointUrl の値セットの文字列表現 |
useFips |
ブール値 | クライアントの設定で FIPS エンドポイントが有効かどうか |
useDualStack |
ブール値 | クライアントの設定でデュアルスタックエンドポイントが有効かどうか |
サービスは、解決に必要な追加のプロパティを指定できます。例えば、Amazon S3 S3EndpointParametersにはバケット名と複数の Amazon S3-specific機能設定が含まれています。例えば、forcePathStyle プロパティは仮想ホストアドレス指定を使用できるかどうかを決定します。
独自のプロバイダーを実装する場合、 の独自のインスタンスを作成する必要はありませんEndpointParameters。SDK は、各リクエストのプロパティを提供し、resolveEndpoint の実装に渡します。
endpointUrl、または endpointProvider
次の 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 に関する注意事項
Amazon S3 は、バケット仮想ホスティングなどのカスタマイズされたエンドポイントのカスタマイズによってモデル化された機能の多くを備えた複雑なサービスです。仮想ホスティングは、バケット名がホスト名に挿入される Amazon S3 の機能です。
このため、Amazon S3 サービスクライアントのEndpointProvider実装を置き換えないことをお勧めします。解決動作を拡張する必要がある場合は、エンドポイントに関する追加の考慮事項を含めてローカル開発スタックにリクエストを送信することで、デフォルトの実装をラップすることをお勧めします。次のendpointProvider例は、このアプローチの実装例を示しています。
例
endpointUrl の例
次のコードスニペットは、Amazon S3 クライアントの一般的なサービスエンドポイントを上書きする方法を示しています。
val client = S3Client.fromEnvironment { endpointUrl = Url.parse("https://custom-s3-endpoint.local") // EndpointProvider is left as the default. }
endpointProvider の例
次のコードスニペットは、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
次のサンプルプログラムは、 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) // ... } }