기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
가를 AWS SDK for Rust 호출할 때 첫 번째 단계 AWS 서비스중 하나는 요청을 라우팅할 위치를 결정하는 것입니다. 이 프로세스를 엔드포인트 확인이라고 합니다.
서비스 클라이언트를 생성할 때 SDK에 대한 엔드포인트 확인을 구성할 수 있습니다. 엔드포인트 확인의 기본 구성은 일반적으로 좋지만 기본 구성을 수정하려는 몇 가지 이유가 있습니다. 두 가지 이유는 다음과 같습니다.
-
서비스의 사전 릴리스 버전 또는 서비스의 로컬 배포를 요청하려면
-
SDK에서 아직 모델링되지 않은 특정 서비스 기능에 액세스하려면
주의
엔드포인트 확인은 고급 SDK 주제입니다. 기본 설정을 변경하면 코드가 해제될 위험이 있습니다. 기본 설정은 프로덕션 환경의 대부분의 사용자에게 적용됩니다.
사용자 지정 엔드포인트는 모든 서비스 요청에 사용되도록 전역적으로 설정하거나 특정에 대한 사용자 지정 엔드포인트를 설정할 수 있습니다 AWS 서비스.
사용자 지정 엔드포인트는 공유 AWS config
파일의 환경 변수 또는 설정을 사용하여 구성할 수 있습니다. 이 접근 방식에 대한 자세한 내용은 SDK 및 도구 참조 안내서의 서비스별 엔드포인트를 참조하세요. AWS SDKs 모든에 대한 공유 config
파일 설정 및 환경 변수의 전체 목록은 서비스별 엔드포인트 식별자를 AWS 서비스참조하세요. https://docs.aws.amazon.com/sdkref/latest/guide/ss-endpoints-table.html
또는 다음 섹션과 같이 코드에서이 사용자 지정을 구성할 수도 있습니다.
사용자 지정 구성
클라이언트를 빌드할 때 사용할 수 있는 두 가지 방법으로 서비스 클라이언트의 엔드포인트 확인을 사용자 지정할 수 있습니다.
-
endpoint_url(url: Into<String>)
-
endpoint_resolver(resolver: impl crate::config::endpoint::ResolveEndpoint + `static)
두 속성을 모두 설정할 수 있습니다. 그러나 대부분 하나만 제공합니다. 일반적인 사용의 경우 endpoint_url
는 가장 자주 사용자 지정됩니다.
엔드포인트 URL 설정
서비스의 "기본" 호스트 이름을 나타내endpoint_url
도록 값을 설정할 수 있습니다. 그러나이 값은 클라이언트 ResolveEndpoint
인스턴스에 파라미터로 전달되므로 최종적인 것은 아닙니다. 그런 다음 ResolveEndpoint
구현은 해당 값을 검사하고 잠재적으로 수정하여 최종 엔드포인트를 결정할 수 있습니다.
엔드포인트 해석기 설정
서비스 클라이언트의 ResolveEndpoint
구현에 따라 SDK가 지정된 요청에 사용하는 최종 해결 엔드포인트가 결정됩니다. 서비스 클라이언트는 모든 요청에 대해 resolve_endpoint
메서드를 호출하고 더 이상 변경하지 않고 해석기가 반환하는 EndpointFuture
다음 예제에서는 스테이징 및 프로덕션과 같은 단계당 다른 엔드포인트를 해결하는 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 파라미터
resolve_endpoint
메서드는 엔드포인트 확인에 사용되는 속성을 포함하는 서비스별 파라미터를 허용합니다.
모든 서비스에는 다음과 같은 기본 속성이 포함됩니다.
명칭 | 유형 | 설명 |
---|---|---|
region |
String | 클라이언트의 AWS 리전 |
endpoint |
String | 값 집합의 문자열 표현 endpointUrl |
use_fips |
불 | 클라이언트 구성에서 FIPS 엔드포인트가 활성화되어 있는지 여부 |
use_dual_stack |
불 | 클라이언트 구성에서 듀얼 스택 엔드포인트가 활성화되었는지 여부 |
AWS 서비스 는 해상도에 필요한 추가 속성을 지정할 수 있습니다. 예를 들어 Amazon S3 엔드포인트 파라미터force_path_style
속성은 가상 호스트 주소 지정을 사용할 수 있는지 여부를 결정합니다.
자체 공급자를 구현하는 경우 엔드포인트 파라미터의 자체 인스턴스를 구성할 필요가 없습니다. SDK는 각 요청에 대한 속성을 제공하고 이를 구현에 전달합니다resolve_endpoint
.
를 사용한 endpoint_url
와를 사용한 비교 endpoint_resolver
다음 두 가지 구성, 즉를 사용하는 구성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();
를 설정하는 클라이언트는 엔드포인트 확인의 일부로 수정할 수 있는 (기본) 공급자에 전달되는 기본 URL을 endpoint_url
지정합니다.
를 설정하는 클라이언트는 Amazon S3 클라이언트가 사용하는 최종 URL을 endpoint_resolver
지정합니다.
예시
사용자 지정 엔드포인트는 종종 테스트에 사용됩니다. 클라우드 기반 서비스에 직접 호출하는 대신 로컬에서 호스팅되고 시뮬레이션된 서비스로 호출이 라우팅됩니다. 이러한 두 가지 옵션은 다음과 같습니다.
-
DynamoDB 로컬 - Amazon DynamoDB 서비스의 로컬 버전입니다.
-
LocalStack
- 로컬 시스템의 컨테이너에서 실행되는 클라우드 서비스 에뮬레이터입니다.
다음 예제에서는 이러한 두 테스트 옵션을 사용할 사용자 지정 엔드포인트를 지정하는 두 가지 방법을 보여줍니다.
코드에서 DynamoDB 로컬 직접 사용
이전 섹션에서 설명한 대로 코드에서 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);
전체 예제
config
파일을 사용하여 LocalStack 사용
공유 AWS config
파일에서 서비스별 엔드포인트를 설정할 수 있습니다. 다음 구성 프로필은 포트 localhost
에서에 연결endpoint_url
하도록 설정됩니다4566
. LocalStack 구성에 대한 자세한 내용은 LocalStack 문서 웹 사이트의 엔드포인트 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);
전체 예제