

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

# でのクライアントエンドポイントの設定 AWS SDK for Rust
<a name="endpoints"></a>

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

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

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

カスタムエンドポイントは、すべてのサービスリクエストに使用されるようにグローバルに設定することも、特定の のカスタムエンドポイントを設定することもできます AWS のサービス。

カスタムエンドポイントは、共有 AWS `config`ファイルの環境変数または設定を使用して設定できます。この手法の詳細については、「*AWS SDK とツールのリファレンスガイド*」の「[サービス固有のエンドポイント](https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html)」を参照してください。すべての共有`config`ファイル設定と環境変数の完全なリストについては AWS のサービス、[「サービス固有のエンドポイントの識別子](https://docs.aws.amazon.com/sdkref/latest/guide/ss-endpoints-table.html)」を参照してください。

 代わりに、以下のセクションに示すように、このカスタマイズをコードで設定することもできます。

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

サービスクライアントのエンドポイント解決は、クライアントの構築時に使用できる 2 つの方法でカスタマイズできます。

1. `endpoint_url(url: Into<String>)`

1. `endpoint_resolver(resolver: impl crate::config::endpoint::ResolveEndpoint + `static)`

両方のプロパティを設定できます。ただし、ほとんどの場合、設定するのは 1 つのみです。一般的な用途では、`endpoint_url` は最も頻繁にカスタマイズされます。

### エンドポイント URL の設定
<a name="set-endpoint-url"></a>

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

### エンドポイントリゾルバーの設定
<a name="set-endpoint-resolver"></a>

サービスクライアントの `ResolveEndpoint` 実装によって、SDK が特定のリクエストに使用する最終的に解決されたエンドポイントが決まります。サービスクライアントは、すべてのリクエストに対して `resolve_endpoint` メソッドを呼び出し、リゾルバーから返される [https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/endpoint/struct.EndpointFuture.html](https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/endpoint/struct.EndpointFuture.html) 値をそのまま使用します。

次の例では、Amazon S3 クライアント向けにカスタムエンドポイント解決の実装を提供し、ステージングや本番稼働など、ステージごとに異なるエンドポイントを解決する方法を示しています。

```
use aws_sdk_s3::config::endpoint::{ResolveEndpoint, EndpointFuture, Params, Endpoint};

#[derive(Debug)]
struct StageResolver { stage: String }
impl ResolveEndpoint for StageResolver {
    fn resolve_endpoint(&self, params: &Params) -> EndpointFuture<'_> {
        let stage = &self.stage;
        EndpointFuture::ready(Ok(Endpoint::builder().url(format!("{stage}.myservice.com")).build()))
    }
}


let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

let resolver = StageResolver { stage: std::env::var("STAGE").unwrap() };

let s3_config = aws_sdk_s3::config::Builder::from(&config)
    .endpoint_resolver(resolver)
    .build();

let s3 = aws_sdk_s3::Client::from_conf(s3_config);
```

**注記**  
エンドポイントリゾルバー、および拡張により `ResolveEndpoint` トレイトは各サービスに固有であるため、サービスクライアント設定でのみ設定できます。一方、エンドポイント URL は、共有設定 (そこから派生するすべてのサービスに適用されます) 使用して設定することも、特定のサービスに対して設定することもできます。

#### ResolveEndpoint パラメータ
<a name="resolveendpoint-parameters"></a>

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

サービスごとに、以下のベースプロパティが含まれます。


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

AWS のサービス は、解決に必要な追加のプロパティを指定できます。例えば、Amazon S3 [エンドポイントパラメータ](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/config/endpoint/struct.Params.html)には、バケット名と複数の Amazon S3 固有の機能設定が含まれます。例えば、`force_path_style` プロパティは仮想ホストアドレス指定を使用できるかどうかを決定します。

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

### `endpoint_url` の使用と `endpoint_resolver` の使用の比較
<a name="endpoint-url-or-endpoint-resolver"></a>

次の 2 つの設定 (`endpoint_url` を使用する設定と `endpoint_resolver` を使用する設定) は、クライアントエンドポイント解決動作が同じではないことを理解することが重要です。

```
use aws_sdk_s3::config::endpoint::{ResolveEndpoint, EndpointFuture, Params, Endpoint};

#[derive(Debug, Default)]
struct CustomResolver;
impl ResolveEndpoint for CustomResolver {
    fn resolve_endpoint(&self, _params: &Params) -> EndpointFuture<'_> {
        EndpointFuture::ready(Ok(Endpoint::builder().url("https://endpoint.example").build()))
    }
}

let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;

// use endpoint url
aws_sdk_s3::config::Builder::from(&config)
    .endpoint_url("https://endpoint.example")
    .build();
    
// Use endpoint resolver
aws_sdk_s3::config::Builder::from(&config)
    .endpoint_resolver(CustomResolver::default())
    .build();
```

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

`endpoint_resolver` を設定するクライアントは、Amazon S3 クライアントが使用する*最終的な* URL を指定します。

## 例
<a name="endpointsExamples"></a>

カスタムエンドポイントはテストによく使用されます。クラウドベースのサービスを呼び出す代わりに、呼び出しはローカルにホストされたシミュレートされたサービスにルーティングされます。以下のような 2 種類のオプションがあります。
+ [DynamoDB local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) – Amazon DynamoDB サービスのローカルバージョンです。
+ [LocalStack](https://github.com/localstack/localstack) – ローカルマシンのコンテナで実行されるクラウドサービスエミュレータです。

 次の例では、これら 2 つのテストオプションを使用するために、カスタムエンドポイントを指定する 2 種類の方法を示しています。

### DynamoDB local をコードで直接使用する
<a name="endpointsExamplesddb"></a>

前のセクションで説明したように、`endpoint_url` をコードで直接設定して、ローカル DynamoDB サーバーを指すようにベースエンドポイントをオーバーライドできます。コード:

```
    let config = aws_config::defaults(aws_config::BehaviorVersion::latest())
        .test_credentials()
        // DynamoDB run locally uses port 8000 by default.
        .endpoint_url("http://localhost:8000")
        .load()
        .await;
    let dynamodb_local_config = aws_sdk_dynamodb::config::Builder::from(&config).build();

    let client = aws_sdk_dynamodb::Client::from_conf(dynamodb_local_config);
```

[完全な例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/dynamodb/src/bin/list-tables-local.rs)は GitHub で入手できます。

### `config` ファイルを使用して LocalStack を使用する
<a name="endpointsExamplesLs"></a>

共有 AWS `config`ファイルで[サービス固有のエンドポイント](https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html)を設定できます。次の設定プロファイルは、ポート `4566` で `localhost` に接続するように `endpoint_url` を設定します。LocalStack 設定の詳細については、*LocalStack ドキュメント*ウェブサイトの「[エンドポイント URL 経由の LocalStack へのアクセス](https://docs.localstack.cloud/references/network-troubleshooting/endpoint-url/)」を参照してください。

```
[profile {{localstack}}]
region=us-east-1
endpoint_url = http://localhost:4566
```

SDK は、共有 `config` ファイルの変更を検出し、`localstack` プロファイルを使用する際に SDK クライアントに適用します。この手法を使用すると、コードにエンドポイントへの参照を含める必要がなく、次のようになります。

```
    // set the environment variable `AWS_PROFILE=localstack` when running
    // the application to source `endpoint_url` and point the SDK at the
    // localstack instance
    let config = aws_config::defaults(BehaviorVersion::latest()).load().await;

    let s3_config = aws_sdk_s3::config::Builder::from(&config)
        .force_path_style(true)
        .build();

    let s3 = aws_sdk_s3::Client::from_conf(s3_config);
```

[完全な例](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/localstack)は GitHub で入手できます。