Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Object Storage
    • Все инструменты
      • Все SDK
      • AWS SDK для Java
      • AWS SDK для JavaScript
      • AWS SDK для Python (boto)
      • AWS SDK для .NET
      • AWS SDK для C++
      • AWS SDK для PHP
      • AWS SDK для Go
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Подготовка к работе
  • Установка
  • Настройка
  • Настройка директории для аутентификационных данных
  • Использование переменных окружения
  • Примеры кода
  1. Инструменты
  2. SDK
  3. AWS SDK для Go

AWS SDK для Go

Статья создана
Vadim Adamlyuk
Улучшена
Обновлена 7 марта 2025 г.
  • Подготовка к работе
  • Установка
  • Настройка
    • Настройка директории для аутентификационных данных
    • Использование переменных окружения
  • Примеры кода

AWS SDK для Go — это комплект средств разработки для работы с сервисами AWS на языке программирования Go.

Подготовка к работеПодготовка к работе

  1. Создайте сервисный аккаунт.

  2. Назначьте сервисному аккаунту роли, которые нужны для вашего проекта, например storage.editor на бакет — для работы с конкретным бакетом, или на каталог — для работы со всеми бакетами в каталоге. Подробнее о ролях см. на странице Управление доступом с помощью Yandex Identity and Access Management.

    Чтобы работать с объектами в зашифрованном бакете, у пользователя или сервисного аккаунта вместе с ролью storage.configurer должны быть следующие роли на ключ шифрования:

    • kms.keys.encrypter — для чтения ключа, шифрования и загрузки объектов;
    • kms.keys.decrypter — для чтения ключа, расшифровки и скачивания объектов;
    • kms.keys.encrypterDecrypter — включает разрешения, предоставляемые ролями kms.keys.encrypter и kms.keys.decrypter.

    Подробнее см. Сервисные роли Key Management Service.

  3. Создайте статический ключ доступа.

    В результате вы получите данные статического ключа доступа. Для аутентификации в Object Storage вам понадобятся:

    • key_id — идентификатор статического ключа доступа;
    • secret — секретный ключ.

    Сохраните key_id и secret, так как повторное получение значения ключа будет невозможно.

Примечание

Сервисный аккаунт может просматривать список бакетов только в том каталоге, в котором он был создан.

Сервисный аккаунт может выполнять действия с объектами в бакетах, которые созданы в каталогах, отличных от каталога сервисного аккаунта. Для этого назначьте сервисному аккаунту роли на нужный каталог или бакет в нем.

УстановкаУстановка

Для установки AWS SDK для Go воспользуйтесь инструкцией на сайте производителя.

НастройкаНастройка

Настройка директории для аутентификационных данныхНастройка директории для аутентификационных данных

  1. Создайте директорию для хранения аутентификационных данных и перейдите в нее:

    Для macOS и Linux:

    mkdir ~/.aws/
    

    Для Windows:

    mkdir C:\Users\<имя_пользователя>\.aws\
    
  2. В директории .aws создайте файл credentials и скопируйте в него аутентификационные данные, полученные ранее:

    [default]
    aws_access_key_id = <идентификатор_статического_ключа>
    aws_secret_access_key = <секретный_ключ>
    
  3. Создайте файл config с параметрами региона по умолчанию и скопируйте в него следующую информацию:

    [default]
    region = ru-central1
    endpoint_url = https://storage.yandexcloud.net
    

    Примечание

    Некоторые приложения, предназначенные для работы с Amazon S3, не позволяют указывать регион, поэтому Object Storage принимает также значение us-east-1.

Для доступа к Object Storage используйте эндпоинт https://storage.yandexcloud.net.

Использование переменных окруженияИспользование переменных окружения

AWS SDK для Go по умолчанию использует аутентификационные данные из переменных окружения, если они заданы. Эти переменные имеют приоритет над аутентификационными данными, которые указаны в файле .aws/credentials.

Поддерживаются следующие переменные окружения:

  • AWS_ACCESS_KEY_ID — идентификатор статического ключа;
  • AWS_SECRET_ACCESS_KEY — секретный ключ;
  • AWS_SESSION_TOKEN — (опционально) токен сессии. Подробнее см. Доступ в бакет с помощью Security Token Service.

Чтобы задать переменные окружения, выполните следующие действия в зависимости от вашей операционной системы:

Linux/macOS
Windows

В терминале выполните команду:

export AWS_ACCESS_KEY_ID=<идентификатор_статического_ключа>
export AWS_SECRET_ACCESS_KEY=<секретный_ключ>
export AWS_SESSION_TOKEN=<опциональный_токен_сессии>

В PowerShell выполните команду:

$Env:AWS_ACCESS_KEY_ID=<идентификатор_статического_ключа>
$Env:AWS_SECRET_ACCESS_KEY=<секретный_ключ>
$Env:AWS_SESSION_TOKEN=<опциональный_токен_сессии>

Примеры кодаПримеры кода

Развитие AWS SDK v.1 для Go прекращено в июле 2024 г. Рекомендуем использовать актуальный пакет средств разработки AWS SDK v.2.

Получение списка имен бакетовПолучение списка имен бакетов

AWS SDK v.2
AWS SDK v.1
package main

import (
    "context"
    "log"

    "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() {

    // Подгружаем конфигурацию из ~/.aws/*
    cfg, err := config.LoadDefaultConfig(context.TODO())
    if err != nil {
        log.Fatal(err)
    }

    // Создаем клиента для доступа к хранилищу S3
    client := s3.NewFromConfig(cfg)

    // Запрашиваем список бакетов
    result, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
    if err != nil {
        log.Fatal(err)
    }

    for _, bucket := range result.Buckets {
        log.Printf("bucket=%s creation time=%s", aws.ToString(bucket.Name), bucket.CreationDate.Local().Format("2006-01-02 15:04:05 Monday"))
    }
}
package main

import (
    "context"
    "fmt"
    "log"

    "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() {

    // Создаем кастомный обработчик эндпоинтов, который для сервиса S3 и региона ru-central1 выдаст корректный URL
    customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
        if service == s3.ServiceID && region == "ru-central1" {
            return aws.Endpoint{
                PartitionID:   "yc",
                URL:           "https://storage.yandexcloud.net",
                SigningRegion: "ru-central1",
            }, nil
        }
        return aws.Endpoint{}, fmt.Errorf("unknown endpoint requested")
    })

    // Подгружаем конфигурацию из ~/.aws/*
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver))
    if err != nil {
        log.Fatal(err)
    }

    // Создаем клиента для доступа к хранилищу S3
    client := s3.NewFromConfig(cfg)

    // Запрашиваем список бакетов
    result, err := client.ListBuckets(context.TODO(), &s3.ListBucketsInput{})
    if err != nil {
        log.Fatal(err)
    }

    for _, bucket := range result.Buckets {
        log.Printf("bucket=%s creation time=%s", aws.ToString(bucket.Name), bucket.CreationDate.Format("2006-01-02 15:04:05 Monday"))
    }
}

Получение списка объектов в бакетеПолучение списка объектов в бакете

Чтобы получить список объектов в бакете, передайте его имя в параметре командной строки -b.

AWS SDK v.2
AWS SDK v.1
package main

import (
    "context"
    "flag"
    "fmt"
    "log"

    "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() {
    // Получаем имя бакета из аргумента командной строки
    bucketName := flag.String("b", "", "The name of the bucket")
    flag.Parse()

    if *bucketName == "" {
        fmt.Println("You must supply the name of a bucket (-b BUCKET)")
        return
    }

    // Подгружаем конфигурацию из ~/.aws/*
    cfg, err := config.LoadDefaultConfig(context.TODO())
    if err != nil {
        log.Fatal(err)
    }

    // Создаем клиента для доступа к хранилищу S3
    client := s3.NewFromConfig(cfg)

    // Запрашиваем список всех файлов в бакете
    result, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
        Bucket: aws.String(*bucketName),
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, object := range result.Contents {
        log.Printf("object=%s size=%d Bytes last modified=%s", aws.ToString(object.Key), aws.ToInt64(object.Size), object.LastModified.Local().Format("2006-01-02 15:04:05 Monday"))
    }
}
package main

import (
    "context"
    "fmt"
    "log"
    "flag"

    "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() {
    // Получаем имя бакета из аргумента командной строки
    bucketName := flag.String("b", "", "The name of the bucket")
    flag.Parse()

    if *bucketName == "" {
        fmt.Println("You must supply the name of a bucket (-b BUCKET)")
        return
    }

    // Создаем кастомный обработчик эндпоинтов, который для сервиса S3 и региона ru-central1 выдаст корректный URL
    customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
        if service == s3.ServiceID && region == "ru-central1" {
            return aws.Endpoint{
                PartitionID:   "yc",
                URL:           "https://storage.yandexcloud.net",
                SigningRegion: "ru-central1",
            }, nil
        }
        return aws.Endpoint{}, fmt.Errorf("unknown endpoint requested")
    })

    // Подгружаем конфигурацию из ~/.aws/*
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithEndpointResolverWithOptions(customResolver))
    if err != nil {
        log.Fatal(err)
    }

    // Создаем клиента для доступа к хранилищу S3
    client := s3.NewFromConfig(cfg)

    // Запрашиваем список всех файлов в бакете
    result, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
        Bucket: aws.String(*bucketName),
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, object := range result.Contents {
        log.Printf("object=%s size=%d Bytes last modified=%s", aws.ToString(object.Key), object.Size, object.LastModified.Format("2006-01-02 15:04:05 Monday"))
    }
}

Также см. примеры кода и справочник Go SDK API.

Была ли статья полезна?

Предыдущая
AWS SDK для PHP
Следующая
GeeseFS
Проект Яндекса
© 2025 ООО «Яндекс.Облако»