Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion des erreurs
Il est important de comprendre comment et quand les erreurs de Kit AWS SDK pour Rust retour sont renvoyées pour créer des applications de haute qualité à l'aide du SDK. Les sections suivantes décrivent les différentes erreurs que vous pouvez rencontrer dans le SDK et comment les gérer de manière appropriée.
Chaque opération renvoie un Result
type dont le type d'erreur est défini sur SdkError<E,
R = HttpResponse>
SdkError
est une énumération avec plusieurs types possibles, appelés variants.
Erreurs de service
Le type d'erreur le plus courant est SdkError::ServiceError
Lorsque vous rencontrez un, SdkError::ServiceError
cela signifie que votre demande a été envoyée avec succès Service AWS mais n'a pas pu être traitée. La raison peut en être une erreur des paramètres de la demande ou un problème côté service.
Les détails de la réponse d'erreur sont inclus dans la variante d'erreur. L'exemple suivant montre comment accéder facilement à la ServiceError
variante sous-jacente et gérer les différents cas d'erreur :
// 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()) } };
Métadonnées d'erreur
Chaque erreur de service comporte des métadonnées supplémentaires accessibles en important des traits spécifiques au service.
-
Le
trait donne accès à tout code d'erreur brut sous-jacent disponible et à tout message d'erreur renvoyé par le service.<service>
::error::ProvideErrorMetadata-
Pour Amazon S3, cette caractéristique est
aws_sdk_s3::error::ProvideErrorMetadata
.
-
Vous pouvez également obtenir des informations qui peuvent être utiles pour résoudre les erreurs de service :
-
Le
trait ajoute des méthodes d'extension pour récupérer l'ID de AWS demande unique généré par le service.<service>
::operation::RequestId-
Pour Amazon S3, cette caractéristique est
aws_sdk_s3::operation::RequestId
.
-
-
Le
trait ajoute la<service>
::operation::RequestIdExtextended_request_id()
méthode pour obtenir un ID de demande supplémentaire et étendu.-
Pris en charge uniquement par certains services.
-
Pour Amazon S3, cette caractéristique est
aws_sdk_s3::operation::RequestIdExt
.
-
Erreur détaillée lors de l'impression avec DisplayErrorContext
Les erreurs du SDK sont généralement le résultat d'une série de défaillances telles que :
-
L'envoi d'une demande a échoué car le connecteur a renvoyé une erreur.
-
Le connecteur a renvoyé une erreur car le fournisseur d'informations d'identification a renvoyé une erreur.
-
Le fournisseur d'informations d'identification a renvoyé une erreur car il a appelé un service et ce service a renvoyé une erreur.
-
Le service a renvoyé une erreur car la demande d'informations d'identification n'était pas autorisée correctement.
Par défaut, l'affichage de cette erreur indique uniquement un « échec d'expédition ». Cela ne contient pas de détails permettant de résoudre l'erreur. Le SDK pour Rust fournit un simple rapporteur d'erreurs appeléDisplayErrorContext
.
-
La
structure ajoute des fonctionnalités pour afficher le contexte d'erreur complet.<service>
::error::DisplayErrorContext-
Pour Amazon S3, cette structure est
aws_sdk_s3::error::DisplayErrorContext
.
-
Lorsque nous encapsulons l'erreur à afficher et que nous l'imprimonsDisplayErrorContext
, nous obtenons un message beaucoup plus détaillé similaire au suivant :
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 } } )