

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 에서 클라이언트 엔드포인트 구성 AWS SDK for Rust
<a name="endpoints"></a>

가를 AWS SDK for Rust 호출할 때 첫 번째 단계 AWS 서비스중 하나는 요청을 라우팅할 위치를 결정하는 것입니다. 이 프로세스를 엔드포인트 확인이라고 합니다.

서비스 클라이언트를 생성할 때 SDK에 대한 엔드포인트 확인을 구성할 수 있습니다. 엔드포인트 확인의 기본 구성은 일반적으로 괜찮지만 기본 구성을 수정하려는 몇 가지 이유가 있습니다. 두 가지 이유를 예로 들면 다음과 같습니다.
+ 서비스의 시험판 버전 또는 서비스의 로컬 배포를 요청하기 위해서입니다.
+ 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](https://docs.aws.amazon.com/sdkref/latest/guide/ss-endpoints-table.html) 

 또는 다음 섹션과 같이 코드에서 이 사용자 지정을 구성할 수도 있습니다.

## 사용자 지정 구성
<a name="custom-configuration"></a>

클라이언트를 빌드할 때 사용할 수 있는 두 가지 방법으로 서비스 클라이언트의 엔드포인트 확인을 사용자 지정할 수 있습니다.

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

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

두 속성을 모두 설정할 수 있습니다. 그러나 대부분의 경우 하나만 제공하면 됩니다. 일반 사용의 경우 `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` 메서드는 엔드포인트 확인에 사용되는 속성을 포함하는 서비스별 파라미터를 허용합니다.

모든 서비스에는 다음 기본 속성이 포함됩니다.


| 이름 | Type | 설명 | 
| --- | --- | --- | 
| region | 문자열 | 클라이언트의 AWS 리전 | 
| endpoint | 문자열 | 값 집합 endpointUrl의 문자열 표현 | 
| use\$1fips | 부울 | 클라이언트의 구성에서 FIPS 엔드포인트가 활성화되었는지 여부 | 
| use\$1dual\$1stack | 부울 | 클라이언트의 구성에서 듀얼 스택 엔드포인트가 활성화되었는지 여부 | 

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>

다음 두 가지 구성, 즉 `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>

사용자 지정 엔드포인트는 종종 테스트에 사용됩니다. 클라우드 기반 서비스를 직접 호출하는 대신 로컬에서 호스팅되고 시뮬레이션된 서비스로 직접 호출이 라우팅됩니다. 이러한 두 가지 옵션은 다음과 같습니다.
+ [DynamoDB 로컬](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) – Amazon DynamoDB 서비스의 로컬 버전입니다.
+ [LocalStack](https://github.com/localstack/localstack) - 로컬 시스템의 컨테이너에서 실행되는 클라우드 서비스 에뮬레이터입니다.

 다음 예제에서는 이 두 테스트 옵션을 사용할 사용자 지정 엔드포인트를 지정하는 두 가지 방법을 보여줍니다.

### 코드에서 DynamoDB 로컬 직접 사용
<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에 있습니다.