Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Построение пайплайна CI/CD в GitLab
    • Работа с API-шлюзом по протоколу WebSocket
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Автоматическое копирование объектов из одного бакета Object Storage в другой
    • Визуализация логов в Grafana с помощью плагина Cloud Logging
    • Канареечный релиз функции Cloud Functions
    • Интерактивная отладка функций Cloud Functions
    • Создание функции Node.js с помощью TypeScript
    • Запуск контейнерного приложения в Serverless Containers
    • Передача событий Yandex Cloud Postbox в Data Streams и их анализ с помощью DataLens
    • Использование API Gateway для настройки синтеза речи в SpeechKit
    • Подключение к YDB из функции Cloud Functions на Python
    • Подключение к базе данных YDB из функции Cloud Functions на Node.js
    • Защита API Gateway при помощи Smart Web Security
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Автоматическая загрузка данных в Yandex SpeechSense с помощью Yandex Workflows
    • Настройка реагирования в Cloud Logging и Yandex Cloud Functions
    • Настройка интеграций Workflows с Tracker, YandexGPT и Yandex Cloud Postbox
    • Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers

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

  • Перед началом работы
  • Необходимые платные ресурсы
  • Создайте сервисный аккаунт
  • Создайте функцию Cloud Functions
  • Добавьте теги
  • Создайте API-шлюз
  • Проверьте работу приложения
  • Как удалить созданные ресурсы
  1. Бессерверные технологии
  2. Канареечный релиз функции Cloud Functions

Канареечный релиз функции Cloud Functions

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 апреля 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Создайте сервисный аккаунт
  • Создайте функцию Cloud Functions
  • Добавьте теги
  • Создайте API-шлюз
  • Проверьте работу приложения
  • Как удалить созданные ресурсы

Создайте канареечный релиз функции Cloud Functions с помощью API Gateway.

Чтобы создать канареечный релиз:

  1. Подготовьте облако к работе.
  2. Создайте сервисный аккаунт.
  3. Создайте функцию Cloud Functions.
  4. Добавьте теги.
  5. Создайте API-шлюз.
  6. Протестируйте приложение.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

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

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость ресурсов поддержки веб-приложения входят:

  • Плата за количество запросов к API-шлюзу и исходящий трафик (см. тарифы Yandex API Gateway).
  • Плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Yandex Cloud Functions).

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

Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором хотите создать сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта: canary-sa.
  5. Нажмите Добавить роль и выберите роль editor.
  6. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

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

    yc iam service-account create --name canary-sa
    

    Результат:

    id: nfersamh4sjq********
    folder_id: b1gc1t4cb638********
    created_at: "2023-09-21T10:36:29.726397755Z"
    name: canary-sa
    

    Сохраните идентификатор сервисного аккаунта canary-sa (id) и каталога, в котором его создали (folder_id).

  2. Назначьте сервисному аккаунту роль editor на каталог:

    yc resource-manager folder add-access-binding <идентификатор_каталога> \
      --role editor \
      --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

    Результат:

    done (1s)
    

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Опишите в конфигурационном файле параметры сервисного аккаунта:

    resource "yandex_iam_service_account" "canary-sa" {
      name        = "canary-sa"
      folder_id   = "<идентификатор_каталога>"
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "editor" {
      folder_id = "<идентификатор_каталога>"
      role      = "editor"
      member    = "serviceAccount:${yandex_iam_service_account.canary-sa id}"
    }
    

    Где:

    • name — имя сервисного аккаунта. Обязательный параметр.
    • folder_id — идентификатор каталога. Необязательный параметр. По умолчанию будет использовано значение, указанное в настройках провайдера.
    • role — назначаемая роль.

    Более подробную информацию о параметрах ресурса yandex_iam_service_account в Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится информация о сервисном аккаунте. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание сервисного аккаунта: введите в терминал слово yes и нажмите Enter.

      После этого будет создан сервисный аккаунт. Проверить появление сервисного аккаунта можно в консоли управления или с помощью команды CLI:

      yc iam service-account list
      

Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.

Чтобы назначить сервисному аккаунту роль editor на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.

Создайте функцию Cloud FunctionsСоздайте функцию Cloud Functions

Создайте две версии функции:

  • версию для текущего релиза;
  • версию для канареечного релиза, которая будет тестироваться на некоторой доле запросов.

Вы можете использовать собственную функцию или создать любую функцию из списка.

Добавьте тегиДобавьте теги

Первой версии функции добавьте тег stable, второй — canary.

CLI
Terraform
API

Чтобы добавить тег версии, выполните команду:

yc serverless function version set-tag --id <идентификатор_версии> --tag <тег>

Результат:

id: b09ch6pmpohf********
function_id: b097d9ous3ge********
created_at: "2023-08-22T09:12:38.464Z"
runtime: python311
entrypoint: test.handler
resources:
  memory: "134217728"
execution_timeout: 5s
image_size: "4096"
status: ACTIVE
tags:
  - $latest
  - stable

Чтобы добавить тег версии:

  1. В конфигурационном файле добавьте блок tags для ресурса yandex_function и укажите список тегов формате tags = ["<имя_тега>"].

    Пример описания функции в конфигурации Terraform:

    resource "yandex_function" "test-function" {
        name               = "canary-function"
        user_hash          = "canary-function"
        runtime            = "python311"
        entrypoint         = "main"
        memory             = "128"
        execution_timeout  = "10"
        service_account_id = "<идентификатор_сервисного_аккаунта>"
        tags               = ["my_tag"]
        content {
            zip_filename = "<путь_к_ZIP-архиву>"
        }
    }
    

    Более подробную информацию о параметрах ресурса yandex_function см. в документации провайдера.

  2. Проверьте конфигурацию командой:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  3. Выполните команду:

    terraform plan
    

    В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  4. Примените изменения конфигурации:

    terraform apply
    
  5. Подтвердите изменения: введите в терминал слово yes и нажмите Enter.

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

yc serverless function version list --function-name <имя_функции>

Чтобы добавить тег версии функции, воспользуйтесь методом REST API setTag для ресурса Function или вызовом gRPC API FunctionService/SetTag.

Создайте API-шлюзСоздайте API-шлюз

Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором хотите создать API-шлюз.

  2. В списке сервисов выберите API Gateway.

  3. Нажмите кнопку Создать API-шлюз.

  4. В поле Имя введите canary.

  5. В блок Спецификация добавьте спецификацию:

    openapi: 3.0.0
    info:
      title: Sample API
      version: 1.0.0
    
    x-yc-apigateway:
      variables:
        function.tag:
          default: "stable"
          enum:
            - "stable"
            - "canary"
    
    paths:
      /:
        get:
          x-yc-apigateway-integration:
            type: cloud_functions
            function_id: <идентификатор_функции>
            tag: "${var.function.tag}"
            service_account_id: <идентификатор_сервисного_аккаунта>
    
  6. В разделе Управление переменными активируйте переключатель Канареечный релиз.

  7. В поле Доля запросов в канареечном релизе укажите 50.

  8. В поле Переменные для канареечного релиза укажите function.tag=canary.

  9. Нажмите кнопку Создать.

  1. Сохраните следующую спецификацию в файл spec.yaml:

    openapi: 3.0.0
    info:
      title: Sample API
      version: 1.0.0
    
    x-yc-apigateway:
      variables:
        function.tag:
          default: "stable"
          enum:
            - "stable"
            - "canary"
    
    paths:
      /:
        get:
          x-yc-apigateway-integration:
            type: cloud_functions
            function_id: <идентификатор_функции>
            tag: "${var.function.tag}"
            service_account_id: <идентификатор_сервисного_аккаунта>
    
  2. Выполните команду:

    yc serverless api-gateway create --name canary --spec=spec.yaml --canary-weight=50 --canary-variables function.tag=canary
    

    Где:

    • --name — имя API-шлюза.
    • --spec — файл со спецификацией.
    • --canary-weight — доля запросов в канареечном релизе.
    • --canary-variables — переменные для канареечного релиза.

    Результат:

    done (5s)
    id: d5d1ud9bli1e********
    folder_id: b1gc1t4cb638********
    created_at: "2023-09-25T16:01:48.926Z"
    name: canary
    status: ACTIVE
    domain: d5dm1lba80md********.i9******.apigw.yandexcloud.net
    log_group_id: ckgefpleo5eg********
    connectivity: {}
    log_options:
      folder_id: b1gc1t4cb638********
    canary:
      weight: "50"
      variables:
        function.tag:
          string_value: canary
    

Чтобы создать API-шлюз:

  1. Опишите в конфигурационном файле параметры ресурса yandex_api_gateway:

    resource "yandex_api_gateway" "canary-api-gateway" {
      name        = "canary"
      canary {
        weight    = 50
        variables = {
          function.tag = "canary"
        }
      }
      spec = <<-EOT
        openapi: 3.0.0
         info:
           title: Sample API
           version: 1.0.0
    
         x-yc-apigateway:
           variables:
             function.tag:
               default: "stable"
               enum:
                 - "stable"
                 - "canary"
    
         paths:
           /:
             get:
               x-yc-apigateway-integration:
                 type: cloud_functions
                 function_id: <идентификатор_функции>
                 tag: "${var.function.tag}"
                 service_account_id: <идентификатор_сервисного_аккаунта>
      EOT
    }
    

    Где:

    • name — имя API-шлюза. Формат имени:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    • canary.0.weight — доля запросов в канареечном релизе.

    • canary.0.variables — переменные для канареечного релиза.

    • spec — спецификация API-шлюза.

    Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов: введите в терминал слово yes и нажмите Enter.

      После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления или с помощью команд CLI:

      yc serverless api-gateway get <имя_API-шлюза>
      

Чтобы создать API-шлюз, воспользуйтесь методом REST API create для ресурса ApiGateway или вызовом gRPC API ApiGatewayService/Create.

Проверьте работу приложенияПроверьте работу приложения

Сделайте несколько запросов к созданному API-шлюзу. Около половины запросов должны быть обработаны версией функции с тегом canary.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Удалите API-шлюз.
  2. Удалите функцию.

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

Предыдущая
Визуализация логов в Grafana с помощью плагина Cloud Logging
Следующая
Интерактивная отладка функций Cloud Functions
Проект Яндекса
© 2025 ООО «Яндекс.Облако»