Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Инструменты
  • Правила тарификации
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы
  1. Разработка на Go
  2. Использование SDK

Использование SDK для функции на Go

Статья создана
Yandex Cloud
Обновлена 21 апреля 2025 г.

Среда выполнения не содержит предустановленной библиотеки для работы с API Yandex Cloud. Для её использования требуется добавить зависимость в приложение на Go. Исходный код библиотеки находится на GitHub.

SDK (Software Development Kit) позволяет управлять ресурсами Yandex Cloud от имени сервисного аккаунта, который указан в параметрах функции.

Пример:Пример:

Следующая функция получает на вход запрос с двумя полями: ID папки (FolderId) и тег (Tag), авторизуется в SDK, получает список всех виртуальных машин Compute Cloud в заданной папке, фильтрует их по заданному тегу, и запускает остановленные машины. В качестве результата возвращает сообщение-отчёт с количеством запущенных машин.

Важно

Функцию необходимо вызывать с помощью Yandex Cloud CLI или с помощью HTTP-запроса с параметром ?integration=raw.

package main

import (
  "context"
  "fmt"
  "github.com/yandex-cloud/go-genproto/yandex/cloud/compute/v1"
  "github.com/yandex-cloud/go-genproto/yandex/cloud/operation"
  "github.com/yandex-cloud/go-sdk"
)

func startComputeInstance(ctx context.Context, sdk *ycsdk.SDK, id string) (*operation.Operation, error) {
  // Операция запуска Compute Instance с указанным ID
  return sdk.Compute().Instance().Start(ctx, &compute.StartInstanceRequest{
    InstanceId: id,
  })
}

type Request struct {
  FolderId string `json:"folderId"`
  Tag      string `json:"tag"`
}

type Response struct {
  StatusCode int         `json:"statusCode"`
  Body       interface{} `json:"body"`
}

func StartComputeInstances(ctx context.Context, request *Request) (*Response, error) {
  // Авторизация в SDK при помощи сервисного аккаунта
  sdk, err := ycsdk.Build(ctx, ycsdk.Config{
    // Вызов InstanceServiceAccount автоматически запрашивает IAM-токен и формирует
    // при помощи него данные для авторизации в SDK
    Credentials: ycsdk.InstanceServiceAccount(),
  })
  if err != nil {
    return nil, err
  }
  // Получение списка Compute Instance по заданному запросом FolderId
  listInstancesResponse, err := sdk.Compute().Instance().List(ctx, &compute.ListInstancesRequest{
    FolderId: request.FolderId,
  })
  if err != nil {
    return nil, err
  }
  instances := listInstancesResponse.GetInstances()
  count := 0
  // Фильтрация списка Compute Instance, фильтр: выключена, в тегах содержится тег, заданный запросом
  for _, i := range instances {
    labels := i.Labels
    if _, ok := labels[request.Tag]; ok && i.Status != compute.Instance_RUNNING {
      // Запуск удовлетворяющих фильтру Compute Instance
      _, err := startComputeInstance(ctx, sdk, i.GetId())
      if err != nil {
        return nil, err
      }
      count++
    }
  }
  return &Response{
    StatusCode: 200,
    Body:       fmt.Sprintf("Started %d instances", count),
  }, nil
}

Файл go.mod:

module example

go 1.14

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

Предыдущая
Обработка ошибок
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»