기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
오류 처리
SDK를 사용하여 고품질 애플리케이션을 구축하려면가 오류를 AWS SDK for Rust 반환하는 방법과 시기를 이해하는 것이 중요합니다. 다음 섹션에서는 SDK에서 발생할 수 있는 다양한 오류와 이를 적절하게 처리하는 방법을 설명합니다.
모든 작업은 오류 Result
유형이 로 설정된 유형을 반환합니다SdkError<E, R = HttpResponse>
SdkError
는 변형이라고 하는 몇 가지 가능한 유형이 있는 열거형입니다.
서비스 오류
가장 일반적인 유형의 오류는 입니다SdkError::ServiceError
가 발생하면 요청이 로 성공적으로 전송되었지만 처리할 AWS 서비스 수 없음을 SdkError::ServiceError
의미합니다. 이는 요청의 파라미터 오류 또는 서비스 측의 문제로 인해 발생할 수 있습니다.
오류 응답 세부 정보는 오류 변형에 포함됩니다. 다음 예제에서는 기본 ServiceError
변형을 편리하게 가져오고 다양한 오류 사례를 처리하는 방법을 보여줍니다.
// Needed to access the '.code()' function on the error type: use aws_sdk_s3::error::ProvideErrorMetadata; let result = s3.get_object() .bucket("my-bucket") .key("my-key") .send() .await; match result { Ok(_output) => { /* Success. Do something with the output. */ } Err(err) => match err.into_service_error() { GetObjectError::InvalidObjectState(value) => { println!("invalid object state: {:?}", value); } GetObjectError::NoSuchKey(_) => { println!("object didn't exist"); } // err.code() returns the raw error code from the service and can be // used as a last resort for handling unmodeled service errors. err if err.code() == Some("SomeUnmodeledError") => {} err => return Err(err.into()) } };
오류 메타데이터
모든 서비스 오류에는 서비스별 특성을 가져와서 액세스할 수 있는 추가 메타데이터가 있습니다.
-
특성은 서비스에서 반환된 사용 가능한 기본 원시 오류 코드 및 오류 메시지에 대한 액세스를 제공합니다.<service>
::error::ProvideErrorMetadata-
Amazon S3의 경우이 특성은 입니다
aws_sdk_s3::error::ProvideErrorMetadata
.
-
서비스 오류 문제를 해결할 때 유용할 수 있는 정보를 얻을 수도 있습니다.
-
특성은 확장 메서드를 추가하여 서비스에서 생성된 고유한 AWS 요청 ID를 검색합니다.<service>
::operation::RequestId-
Amazon S3의 경우이 특성은 입니다
aws_sdk_s3::operation::RequestId
.
-
-
특성은<service>
::operation::RequestIdExtextended_request_id()
메서드를 추가하여 추가 확장 요청 ID를 가져옵니다.-
일부 서비스에서만 지원됩니다.
-
Amazon S3의 경우이 특성은 입니다
aws_sdk_s3::operation::RequestIdExt
.
-
를 사용하여 세부 오류 인쇄 DisplayErrorContext
SDK의 오류는 일반적으로 다음과 같은 장애 체인의 결과입니다.
-
커넥터가 오류를 반환했기 때문에 요청을 디스패치하지 못했습니다.
-
자격 증명 공급자가 오류를 반환했기 때문에 커넥터가 오류를 반환했습니다.
-
자격 증명 공급자가 서비스를 호출하고 해당 서비스가 오류를 반환했기 때문에 오류를 반환했습니다.
-
보안 인증 요청에 올바른 권한이 없어 서비스가 오류를 반환했습니다.
기본적으로이 오류를 표시하면 "디스패치 실패"만 출력됩니다. 여기에는 오류를 해결하는 데 도움이 되는 세부 정보가 없습니다. SDK for Rust는 라는 간단한 오류 리포터를 제공합니다DisplayErrorContext
.
-
구조체는 전체 오류 컨텍스트를 출력하는 기능을 추가합니다.<service>
::error::DisplayErrorContext-
Amazon S3의 경우이 구조는 입니다
aws_sdk_s3::error::DisplayErrorContext
.
-
표시할 오류를 래핑하고 인쇄할 때는 다음과 유사한 훨씬 더 자세한 메시지를 DisplayErrorContext
제공합니다.
dispatch failure: other: Session token not found or invalid. DispatchFailure( DispatchFailure { source: ConnectorError { kind: Other(None), source: ProviderError( ProviderError { source: ProviderError( ProviderError { source: ServiceError( ServiceError { source: UnauthorizedException( UnauthorizedException { message: Some("Session token not found or invalid"), meta: ErrorMetadata { code: Some("UnauthorizedException"), message: Some("Session token not found or invalid"), extras: Some({"aws_request_id": "1b6d7476-f5ec-4a16-9890-7684ccee7d01"}) } } ), raw: Response { status: StatusCode(401), headers: Headers { headers: { "date": HeaderValue { _private: H0("Thu, 04 Jul 2024 07:41:21 GMT") }, "content-type": HeaderValue { _private: H0("application/json") }, "content-length": HeaderValue { _private: H0("114") }, "access-control-expose-headers": HeaderValue { _private: H0("RequestId") }, "access-control-expose-headers": HeaderValue { _private: H0("x-amzn-RequestId") }, "requestid": HeaderValue { _private: H0("1b6d7476-f5ec-4a16-9890-7684ccee7d01") }, "server": HeaderValue { _private: H0("AWS SSO") }, "x-amzn-requestid": HeaderValue { _private: H0("1b6d7476-f5ec-4a16-9890-7684ccee7d01") } } }, body: SdkBody { inner: Once( Some( b"{ \"message\":\"Session token not found or invalid\", \"__type\":\"com.amazonaws.switchboard.portal#UnauthorizedException\"}" ) ), retryable: true }, extensions: Extensions { extensions_02x: Extensions, extensions_1x: Extensions } } } ) } ) } ), connection: Unknown } } )