As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Gerenciamento de erros
Entender como e quando os erros AWS SDK para Rust retornam é importante para criar aplicativos de alta qualidade usando o SDK. As seções a seguir descrevem os diferentes erros que você pode encontrar no SDK e como lidar com eles adequadamente.
Cada operação retorna um Result
tipo com o tipo de erro definido como SdkError<E,
R = HttpResponse>
SdkError
é uma enumeração com vários tipos possíveis, chamados de variantes.
Erros de serviço
O tipo de erro mais comum é SdkError::ServiceError
Quando você encontra umSdkError::ServiceError
, isso significa que sua solicitação foi enviada com sucesso para o AWS service (Serviço da AWS) , mas não pôde ser processada. Isso pode ser por causa de erros nos parâmetros da requisição ou problemas no lado do serviço.
Os detalhes da resposta ao erro estão incluídos na variante de erro. O exemplo a seguir mostra como acessar convenientemente a ServiceError
variante subjacente e lidar com diferentes casos de erro:
// 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()) } };
Metadados de erro
Cada erro de serviço tem metadados adicionais que podem ser acessados importando características específicas do serviço.
-
A
característica fornece acesso a qualquer código de erro bruto subjacente disponível e mensagem de erro retornada do serviço.<service>
::error::ProvideErrorMetadata-
Para o Amazon S3, essa característica é.
aws_sdk_s3::error::ProvideErrorMetadata
-
Você também pode obter informações que podem ser úteis para solucionar erros de serviço:
-
A
característica adiciona métodos de extensão para recuperar o ID de AWS solicitação exclusivo que foi gerado pelo serviço.<service>
::operation::RequestId-
Para o Amazon S3, essa característica é.
aws_sdk_s3::operation::RequestId
-
-
A
característica adiciona o<service>
::operation::RequestIdExtextended_request_id()
método para obter um ID de solicitação adicional estendido.-
Compatível apenas com alguns serviços.
-
Para o Amazon S3, essa característica é.
aws_sdk_s3::operation::RequestIdExt
-
Erro detalhado de impressão com DisplayErrorContext
Os erros no SDK geralmente são o resultado de uma cadeia de falhas, como:
-
O envio de uma solicitação falhou porque o conector retornou um erro.
-
O conector retornou um erro porque o provedor de credenciais retornou um erro.
-
O provedor de credenciais retornou um erro porque chamou um serviço e esse serviço retornou um erro.
-
O serviço retornou um erro porque a solicitação de credenciais não tinha a autorização correta.
Por padrão, a exibição desse erro só gera “falha de despacho”. Isso carece de detalhes que ajudem a solucionar o erro. O SDK para Rust fornece um relator de erros simples chamado. DisplayErrorContext
-
A
estrutura adiciona funcionalidade para gerar o contexto de erro completo.<service>
::error::DisplayErrorContext-
Para o Amazon S3, essa estrutura é.
aws_sdk_s3::error::DisplayErrorContext
-
Quando agrupamos o erro a ser exibido e o imprimimos, DisplayErrorContext
fornece uma mensagem muito mais detalhada, semelhante à seguinte:
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 } } )