Gerenciamento de erros no AWS SDK para Go V2 - AWS SDK para Go v2 da

Gerenciamento de erros no AWS SDK para Go V2

O AWS SDK para Go retorna erros que satisfazem o tipo de interface de error do Go. Use o método Error() para obter uma string formatada da mensagem de erro do SDK sem nenhum tratamento especial. Os erros retornados pelo SDK podem implementar um método Unwrap. O método Unwrap é usado pelo SDK para fornecer informações contextuais adicionais sobre erros, ao mesmo tempo que concede acesso ao erro subjacente ou à cadeia de erros. O método Unwrap deve ser usado com errors.As para gerenciar cadeias de erros de desempacotamento.

É importante que a aplicação verifique se ocorreu um erro após invocar uma função ou um método que possa retornar um tipo de interface de error. A forma mais básica de gerenciamento de erros se parece com este exemplo:

if err != nil { // Handle error return }

Registro em log de erros

Tradicionalmente, a forma mais simples de gerenciamento de erros é registrar em log ou imprimir a mensagem de erro antes de retornar ou sair da aplicação.

import "log" // ... if err != nil { log.Printf("error: %s", err.Error()) return }

Erros do cliente de serviço

O SDK encapsula todos os erros retornados pelos clientes do serviço com o tipo de erro smithy.OperationError. OperationError fornece informações contextuais sobre o nome do serviço e a operação associada a um erro subjacente. Essas informações podem ser úteis para aplicações que executam lotes de operações para um ou mais serviços, com um mecanismo centralizado de gerenciamento de erros. A aplicação pode usar errors.As para acessar esses metadados de OperationError.

import "log" import "github.com/aws/smithy-go" // ... if err != nil { var oe *smithy.OperationError if errors.As(err, &oe) { log.Printf("failed to call service: %s, operation: %s, error: %v", oe.Service(), oe.Operation(), oe.Unwrap()) } return }

Respostas de erro de API

As operações de serviço podem retornar tipos de erro modelados para indicar erros específicos. Esses tipos modelados podem ser usados com errors.As para desempacotar e determinar se a falha na operação foi causada por um erro específico. Por exemplo, CreateBucket do Amazon S3 poderá retornar um erro BucketAlreadyExists se já existir um bucket com o mesmo nome.

Por exemplo, para verificar se um erro foi de BucketAlreadyExists:

import "log" import "github.com/aws/aws-sdk-go-v2/service/s3/types" // ... if err != nil { var bne *types.BucketAlreadyExists if errors.As(err, &bne) { log.Println("error:", bne) } return }

Todos os erros de resposta da API de serviço implementam o tipo de interface smithy.APIError. Essa interface pode ser usada para gerenciar respostas de erro de serviço modeladas ou não modeladas. Esse tipo concede acesso ao código de erro e à mensagem retornados pelo serviço. Além disso, esse tipo indica se o erro ocorreu devido ao cliente ou ao servidor, quando essa informação é conhecida.

import "log" import "github.com/aws/smithy-go" // ... if err != nil { var ae smithy.APIError if errors.As(err, &ae) { log.Printf("code: %s, message: %s, fault: %s", ae.ErrorCode(), ae.ErrorMessage(), ae.ErrorFault().String()) } return }

Recuperar identificadores de solicitação

Ao trabalhar com o AWS Support, podem pedir o identificador da solicitação que identifica a solicitação que você está tentando solucionar. Você pode usar http.ResponseError e o método ServiceRequestID() para recuperar o identificador da solicitação associado à resposta de erro.

import "log" import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... if err != nil { var re *awshttp.ResponseError if errors.As(err, &re) { log.Printf("requestID: %s, error: %v", re.ServiceRequestID(), re.Unwrap()); } return }

Identificadores de solicitação do Amazon S3

As solicitações do Amazon S3 contêm identificadores adicionais que podem ser usados para ajudar o AWS Support a solucionar sua solicitação. Você pode usar s3.ResponseError e chamar ServiceRequestID() e ServiceHostID() para recuperar o ID da solicitação e o ID do host.

import "log" import "github.com/aws/aws-sdk-go-v2/service/s3" // ... if err != nil { var re s3.ResponseError if errors.As(err, &re) { log.Printf("requestID: %s, hostID: %s request failure", re.ServiceRequestID(), re.ServiceHostID()); } return }