Руководство для начинающих по вызову сервисных операций с помощью aws-sdk-go-v2

В этой статье блога мы рассмотрим, как вызывать операции службы с помощью библиотеки aws-sdk-go-v2. Независимо от того, являетесь ли вы новичком или имеете некоторый опыт работы с AWS SDK и Golang, это руководство предоставит вам необходимую информацию и примеры кода для начала работы. Давайте погрузимся!

  1. Настройка учетных данных AWS.
    Прежде чем мы сможем начать выполнять вызовы API, нам необходимо настроить учетные данные AWS. aws-sdk-go-v2 предоставляет удобный способ настройки учетных данных с использованием переменных среды, общих файлов конфигурации или ролей IAM. Вот пример настройки учетных данных с использованием переменных среды:

    import (
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    )
    func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-west-2"),
        config.WithCredentialsProvider(aws.NewEnvCredentialsProvider()),
    )
    if err != nil {
        panic("unable to load SDK config, " + err.Error())
    }
    // Use the `cfg` object to make API calls
    }
  2. Выполнение простого вызова API.
    Как только мы настроим учетные данные, мы сможем начать выполнять вызовы API к сервисам AWS. Давайте рассмотрим пример вызова операции ListBucketsсервиса Amazon S3:

    import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    )
    func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-west-2"),
        config.WithCredentialsProvider(aws.NewEnvCredentialsProvider()),
    )
    if err != nil {
        panic("unable to load SDK config, " + err.Error())
    }
    client := s3.NewFromConfig(cfg)
    resp, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
    if err != nil {
        panic("failed to list buckets, " + err.Error())
    }
    for _, bucket := range resp.Buckets {
        fmt.Println(*bucket.Name)
    }
    }
  3. Разбиение на страницы.
    В некоторых случаях ответ от операции службы может быть разбит на страницы. aws-sdk-go-v2 предоставляет удобный способ управления нумерацией страниц с помощью поля NextToken. Вот пример разбиения на страницы результатов операции ListObjectsV2в Amazon S3:

    import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    )
    func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-west-2"),
        config.WithCredentialsProvider(aws.NewEnvCredentialsProvider()),
    )
    if err != nil {
        panic("unable to load SDK config, " + err.Error())
    }
    client := s3.NewFromConfig(cfg)
    var nextToken *string
    for {
        resp, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
            Bucket:  aws.String("my-bucket"),
            MaxKeys: 1000,
            ContinuationToken: nextToken,
        })
        if err != nil {
            panic("failed to list objects, " + err.Error())
        }
        for _, object := range resp.Contents {
            fmt.Println(*object.Key)
        }
        if !resp.IsTruncated {
            break
        }
        nextToken = resp.NextContinuationToken
    }
    }
  4. Обработка ошибок.
    При выполнении вызовов API важно правильно обрабатывать ошибки. aws-sdk-go-v2 предоставляет такие параметры обработки ошибок, как повтор неудачных запросов, регистрация ошибок и пользовательская обработка ошибок. Вот пример включения повторных попыток для операций службы:

    import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/s3"
    )
    func main() {
    cfg, err := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-west-2"),
        config.WithCredentialsProvider(aws.NewEnvCredentialsProvider()),
        config.WithRetryer(func() aws.Retryer {
            return aws.NewStandardRetryer(func(options *aws.StandardRetryerOptions) {
                options.MaxAttempts = 3
            })
        }),
    )
    if err != nil {
        panic("unable to load SDK config, " + err.Error())
    }
    client := s3.NewFromConfig(cfg)
    resp, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
    if err != nil {
        panic("failed to list buckets, " + err.Error())
    }
    for _, bucket := range resp.Buckets {
        fmt.Println(*bucket.Name)
    }
    }

В этой статье мы рассмотрели основы вызова операций службы с использованием библиотеки aws-sdk-go-v2. Мы обсудили настройку учетных данных AWS, выполнение простых вызовов API, обработку нумерации страниц и обработку ошибок. Вооружившись этими примерами, вы теперь можете приступить к созданию более сложных приложений с помощью AWS SDK и Golang. Приятного кодирования!