Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Object Storage
    • Все руководства
    • Получение статистики запросов к объекту с использованием S3 Select
    • Получение статистики посещения сайта с использованием S3 Select
    • Получение статистики запросов к объектам с использованием Yandex Query
    • Анализ поресурсной детализации расходов
    • Шифрование на стороне сервера
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Анализ логов с использованием DataLens
    • Монтирование бакетов к файловой системе хостов Yandex Data Processing
    • Использование Object Storage в Yandex Data Processing
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Подключение бакета как диска в Windows
    • Миграция данных из Yandex Data Streams с помощью Yandex Data Transfer
    • Использование гибридного хранилища в Yandex Managed Service for ClickHouse®
    • Загрузка данных из Yandex Managed Service for OpenSearch в Yandex Object Storage с помощью Yandex Data Transfer
    • Автоматическое копирование объектов из бакета в бакет
    • Регулярное асинхронное распознавание аудиофайлов в бакете
    • Обучение модели в Yandex DataSphere на данных из Object Storage
    • Подключение к Object Storage из VPC
    • Перенос данных в Yandex Managed Service for PostgreSQL с использованием Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for Greenplum® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Загрузка данных из Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Хостинг статического сайта на фреймворке Gatsby в Object Storage
    • Миграция базы данных из Managed Service for PostgreSQL в Object Storage
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
    • Импорт данных из Yandex Managed Service for MySQL® в Yandex Data Processing с помощью Sqoop
    • Миграция данных из Yandex Object Storage в Yandex Managed Service for MySQL® с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL® в Yandex Object Storage
    • Выгрузка данных Greenplum® в холодное хранилище Yandex Object Storage
    • Загрузка данных из Яндекс Директ в витрину Yandex Managed Service for ClickHouse® с использованием Yandex Cloud Functions, Yandex Object Storage и Yandex Data Transfer
    • Миграция данных из Elasticsearch в Yandex Managed Service for OpenSearch
    • Загрузка состояний Terraform в Object Storage
    • Блокировка состояний Terraform с помощью Managed Service for YDB
    • Визуализация данных Yandex Query
    • Публикация обновлений для игр
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veeam Backup
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Резервное копирование кластера Managed Service for Kubernetes в Object Storage
    • Разработка пользовательской интеграции в API Gateway
    • Сокращатель ссылок
    • Хранение журналов работы приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Telegram-бота
    • Репликация логов в Object Storage с помощью Fluent Bit
    • Репликация логов в Object Storage с помощью Data Streams
    • Загрузка аудитных логов в SIEM ArcSight
    • Загрузка аудитных логов в SIEM Splunk
    • Создание сервера MLFlow для логирования экспериментов и артефактов
    • Работа с данными с помощью Yandex Query
    • Федеративные запросы к данным с помощью Query
    • Распознавание архива изображений в Vision OCR
    • Конвертация видео в GIF на Python
    • Автоматизация задач с помощью Managed Service for Apache Airflow™
    • Обработка файлов детализации в сервисе Yandex Cloud Billing
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Поиск событий Yandex Cloud в Yandex Query
    • Поиск событий Yandex Cloud в Object Storage
    • Создание внешней таблицы на базе таблицы из бакета с помощью конфигурационного файла
    • Миграция базы данных из Google BigQuery в Managed Service for ClickHouse®
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

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

  • Поддерживаемые инструменты
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Добавьте сертификат в Certificate Manager
  • Создайте облачную сеть и подсети
  • Создайте бакеты в Object Storage
  • Загрузите файлы сервиса в бакеты
  • Создайте группу безопасности
  • Создайте группы бэкендов в Application Load Balancer
  • Создайте HTTP-роутер и виртуальные хосты
  • Создайте L7-балансировщик
  • Создайте CDN-ресурс
  • Настройте DNS для сервиса
  • Проверьте работу сервиса и переключение между версиями
  • Первая проверка
  • Канареечное развертывание версии 2
  • Сине-зеленое развертывание для отката к версии 1
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Сине-зеленое и канареечное развертывание версий сервиса

Организация сине-зеленого и канареечного развертывания версий веб-сервиса

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Поддерживаемые инструменты
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Добавьте сертификат в Certificate Manager
  • Создайте облачную сеть и подсети
  • Создайте бакеты в Object Storage
  • Загрузите файлы сервиса в бакеты
  • Создайте группу безопасности
  • Создайте группы бэкендов в Application Load Balancer
  • Создайте HTTP-роутер и виртуальные хосты
  • Создайте L7-балансировщик
  • Создайте CDN-ресурс
  • Настройте DNS для сервиса
  • Проверьте работу сервиса и переключение между версиями
    • Первая проверка
    • Канареечное развертывание версии 2
    • Сине-зеленое развертывание для отката к версии 1
  • Как удалить созданные ресурсы

Настройте архитектуру веб-сервиса, которая позволит переключаться между версиями по распространенным схемам развертывания: с помощью сине-зеленого развертывания (blue-green deployment) и канареечного развертывания (canary deployment).

Обе схемы используют пару бэкендов: «синий» и «зеленый». Сначала на одном из бэкендов (например, на «синем») размещается стабильная версия, доступная пользователям, а другой («зеленый») используется для тестирования следующей версии. Когда тестирование окончено, бэкенды меняются ролями:

  • При сине-зеленом развертывании весь пользовательский трафик одномоментно перераспределяется с одного бэкенда на другой.
  • При канареечном развертывании переключение происходит постепенно, начиная с части пользователей.

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

В данном руководстве в качестве бэкендов используются бакеты Yandex Object Storage, а за переключение между ними отвечает L7-балансировщик Yandex Application Load Balancer. Запросы пользователей передаются балансировщику через сеть распространения контента Yandex Cloud CDN, чтобы сократить время доставки контента.

В качестве примеров будут использованы доменные имена cdn.yandexcloud.example и cdn-staging.yandexcloud.example.

Для выполнения шагов можно использовать различные поддерживаемые инструменты.

Чтобы построить архитектуру для сине-зеленого и канареечного развертывания:

  1. Подготовьте облако к работе.
  2. Добавьте сертификат в Certificate Manager
  3. Создайте облачную сеть и подсети.
  4. Создайте бакеты в Object Storage.
  5. Загрузите файлы сервиса в бакеты.
  6. Создайте группы бэкендов в Application Load Balancer.
  7. Создайте HTTP-роутер и виртуальные хосты.
  8. Создайте L7-балансировщик.
  9. Создайте CDN-ресурс.
  10. Настройте DNS для сервиса.
  11. Проверьте работу сервиса и переключение между версиями.

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

Поддерживаемые инструментыПоддерживаемые инструменты

Бо́льшую часть шагов можно выполнить с помощью любого из стандартных инструментов: консоли управления, интерфейсов командной строки (CLI) Yandex Cloud и AWS, Terraform и API Yandex Cloud. В каждом шаге перечислены поддерживаемые для него инструменты.

Некоторые инструменты поддерживаются не для всех шагов:

  • Через CLI и Terraform сейчас нельзя:
    • создать группу бэкендов в Application Load Balancer с бакетами в качестве бэкендов;
    • получить доменное имя CDN-балансировщика при настройке DNS для сервиса;
    • отключать и включать кеширование CDN-ресурса при проверке работы сервиса и переключения между версиями.
  • Через API сейчас нельзя получить доменное имя CDN-балансировщика при настройке DNS для сервиса.

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

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

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

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

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

В качестве примера будет использоваться каталог с именем example-folder.

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

В стоимость поддержки инфраструктуры входят:

  • плата за хранение данных в Object Storage, операции с ними и исходящий трафик (см. тарифы Object Storage);
  • плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer);
  • плата за исходящий трафик с CDN-серверов (см. тарифы Cloud CDN);
  • плата за публичные DNS-запросы и DNS-зоны, если вы используете Yandex Cloud DNS (см. тарифы Cloud DNS).

Добавьте сертификат в Certificate ManagerДобавьте сертификат в Certificate Manager

Поддерживаются сертификаты из Yandex Certificate Manager. Вы можете выпустить новый сертификат Let's Encrypt® или загрузить собственный.

Сертификат должен находиться в том же каталоге, в котором расположен ваш CDN-ресурс.

Для сертификата Let's Encrypt® пройдите проверку прав на домен, который указан в сертификате.

Создайте облачную сеть и подсетиСоздайте облачную сеть и подсети

Все ресурсы будут относиться к одной облачной сети.

Консоль управления
Yandex Cloud CLI
Terraform
API
  1. В консоли управления выберите каталог example-folder.
  2. В списке сервисов выберите Virtual Private Cloud.
  3. Справа сверху нажмите кнопку Создать сеть.
  4. В поле Имя укажите canary-network.
  5. В поле Дополнительно выберите опцию Создать подсети.
  6. Нажмите кнопку Создать сеть.

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

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

  1. Создайте сеть canary-network:

    yc vpc network create canary-network
    

    Результат:

    id: enptrcle5q3d********
    folder_id: b1g9hv2loamq********
    created_at: "2021-11-03T09:25:03Z"
    name: canary-network
    default_security_group_id: enpbsnnop4ak********
    

    Подробнее о команде yc vpc network create см. в справочнике CLI.

  2. Создайте подсети во всех зонах доступности:

    • В ru-central1-a:

      yc vpc subnet create canary-subnet-ru-central1-a \
        --zone ru-central1-a \
        --network-name canary-network \
        --range 10.1.0.0/16
      

      Результат:

      id: e9bnnssj8sc8********
      folder_id: b1g9hv2loamq********
      created_at: "2021-11-03T09:27:00Z"
      name: canary-subnet-ru-central1-a
      network_id: enptrcle5q3d********
      zone_id: ru-central1-a
      v4_cidr_blocks:
      - 10.1.0.0/16
      
    • В ru-central1-b:

      yc vpc subnet create canary-subnet-ru-central1-b \
        --zone ru-central1-b \
        --network-name canary-network \
        --range 10.2.0.0/16
      

      Результат:

      id: e2lghukd9iqo********
      folder_id: b1g9hv2loamq********
      created_at: "2021-11-03T09:27:39Z"
      name: canary-subnet-ru-central1-b
      network_id: enptrcle5q3d********
      zone_id: ru-central1-b
      v4_cidr_blocks:
      - 10.2.0.0/16
      
    • В ru-central1-d:

      yc vpc subnet create canary-subnet-ru-central1-d \
        --zone ru-central1-d \
        --network-name canary-network \
        --range 10.3.0.0/16
      

      Результат:

      id: b0c3pte4o2kn********
      folder_id: b1g9hv2loamq********
      created_at: "2021-11-03T09:28:08Z"
      name: canary-subnet-ru-central1-d
      network_id: enptrcle5q3d********
      zone_id: ru-central1-d
      v4_cidr_blocks:
      - 10.3.0.0/16
      

    Подробнее о команде yc vpc subnet create см. в справочнике CLI.

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

  1. Опишите в конфигурационном файле параметры сети canary-network и ее подсетей canary-subnet-ru-central1-a, canary-subnet-ru-central1-b и canary-subnet-ru-central1-d:

    resource "yandex_vpc_network" "canary-network" {
      name = "canary-network"
    }
    
    resource "yandex_vpc_subnet" "canary-subnet-a" {
      name           = "canary-subnet-ru-central1-a"
      zone           = "ru-central1-a"
      network_id     = "${yandex_vpc_network.canary-network.id}"
      v4_cidr_blocks = ["10.1.0.0/16"]
    }
    
    resource "yandex_vpc_subnet" "canary-subnet-b" {
      name           = "canary-subnet-ru-central1-b"
      zone           = "ru-central1-b"
      network_id     = "${yandex_vpc_network.canary-network.id}"
      v4_cidr_blocks = ["10.2.0.0/16"]
    }
    
    resource "yandex_vpc_subnet" "canary-subnet-d" {
      name           = "canary-subnet-ru-central1-d"
      zone           = "ru-central1-d"
      network_id     = "${yandex_vpc_network.canary-network.id}"
      v4_cidr_blocks = ["10.3.0.0/16"]
    }
    

    Подробнее см. в описаниях ресурсов yandex_vpc_network и yandex_vpc_subnet в документации провайдера Terraform.

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

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

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

      terraform plan
      

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

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

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

      terraform apply
      
    2. Подтвердите создание ресурсов.

  1. Создайте сеть canary-network с помощью вызова gRPC API NetworkService/Create или метода REST API create.
  2. Создайте подсети canary-subnet-ru-central1-a, canary-subnet-ru-central1-b и canary-subnet-ru-central1-d в трех зонах доступности с помощью вызова gRPC API SubnetService/Create или метода REST API create.

Создайте бакеты в Object StorageСоздайте бакеты в Object Storage

Консоль управления
AWS CLI
Terraform
API
  1. В консоли управления выберите каталог example-folder.

  2. В списке сервисов выберите Object Storage.

  3. Создайте «синий» бакет для стабильной версии бэкенда:

    1. Справа сверху нажмите кнопку Создать бакет.
    2. В поле Имя укажите имя бакета.
    3. В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
    4. Нажмите кнопку Создать бакет.
  4. Таким же образом создайте «зеленый» бакет для тестовой версии бэкенда.

  1. Создайте «синий» бакет для стабильной версии бэкенда:

    aws --endpoint-url https://storage.yandexcloud.net \
      s3 mb s3://<имя_синего_бакета>
    

    Результат:

    make_bucket: s3://<имя_синего_бакета>
    
  2. Включите публичный доступ к чтению объектов и их списка:

    aws --endpoint-url https://storage.yandexcloud.net \
      s3api put-bucket-acl \
      --bucket <имя_синего_бакета> \
      --acl public-read
    
  3. Аналогично создайте «зеленый» бакет для тестовой версии бэкенда и включите публичный доступ к нему.

Примечание

Terraform взаимодействует с Object Storage от имени сервисного аккаунта. Назначьте сервисному аккаунту нужную роль, например storage.admin, на каталог, в котором будут создаваться ресурсы.

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

    ...
    // Создание сервисного аккаунта
    resource "yandex_iam_service_account" "sa" {
      name = "<имя_сервисного_аккаунта>"
    }
    
    // Назначение роли сервисному аккаунту
    resource "yandex_resourcemanager_folder_iam_member" "sa-admin" {
      folder_id = "<идентификатор_каталога>"
      role      = "storage.admin"
      member    = "serviceAccount:${yandex_iam_service_account.sa.id}"
    }
    
    // Создание статического ключа доступа
    resource "yandex_iam_service_account_static_access_key" "sa-static-key" {
      service_account_id = yandex_iam_service_account.sa.id
      description        = "static access key for object storage"
    }
    
  2. Добавьте в конфигурационный файл параметры «синего» (стабильная версия бэкенда) и «зеленого» (тестовая версия бэкенда) бакетов:

    ...
    
    resource "yandex_storage_bucket" "canary-bucket-blue" {
      access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
      secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
      bucket     = "<имя_синего_бакета>"
      acl        = "public-read"
    }
    
    resource "yandex_storage_bucket" "canary-bucket-green" {
      access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
      secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
      bucket     = "<имя_зеленого_бакета>"
      acl        = "public-read"
    }
    

    Подробнее о ресурсе yandex_storage_bucket см. в документации провайдера Terraform.

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

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

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

      terraform plan
      

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

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

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

      terraform apply
      
    2. Подтвердите создание ресурсов.

Используйте метод REST API create.

Загрузите файлы сервиса в бакетыЗагрузите файлы сервиса в бакеты

  1. Создайте два файла с одним и тем же названием index.html. Они будут представлять разные версии сервиса: один — версию 1, другой — версию 2.

    Пример файла index.html версии 1
    <!DOCTYPE html>
    <html>
      <head>
        <title>Version 1</title>
      </head>
      <body>
        <p>Version 1 is working</p>
      </body>
    </html>
    
    Пример файла index.html версии 2
    <!DOCTYPE html>
    <html>
      <head>
        <title>Version 2</title>
      </head>
      <body>
        <p>Version 2 is working</p>
      </body>
    </html>
    
  2. Загрузите файлы в бакеты:

    Консоль управления
    AWS CLI
    Terraform
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Object Storage.
    3. Выберите «синий» бакет.
    4. Нажмите кнопку Загрузить и выберите для загрузки файл index.html версии 1.
    5. Таким же образом загрузите в «зеленый» бакет файл index.html версии 2.
    1. Загрузите в «синий» бакет файл index.html версии 1:

      aws --endpoint-url https://storage.yandexcloud.net \
        s3 cp v1/index.html s3://<имя_синего_бакета>/index.html
      

      Результат:

      upload: v1/index.html to s3://<имя_синего_бакета>/index.html
      
    2. Загрузите в «зеленый» бакет файл index.html версии 2:

      aws --endpoint-url https://storage.yandexcloud.net \
        s3 cp v2/index.html s3://<имя_зеленого_бакета>/index.html
      

      Результат:

      upload: v2/index.html to s3://<имя_зеленого_бакета>/index.html
      
    1. Добавьте в конфигурационный файл параметры файлов v1/index.html и v2/index.html, загружаемых в бакеты «синий» и «зеленый» соответственно:

      ...
      
      resource "yandex_storage_object" "canary-bucket-blue-index" {
        bucket = "<имя_синего_бакета>"
        key    = "index.html"
        source = "v1/index.html"
      }
      
      resource "yandex_storage_bucket" "canary-bucket-green-index" {
        bucket = "<имя_зеленого_бакета>"
        key    = "index.html"
        source = "v2/index.html"
      }
      

      Подробнее о ресурсе yandex_storage_object см. в документации провайдера Terraform.

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

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

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

        terraform plan
        

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

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

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

        terraform apply
        
      2. Подтвердите создание ресурсов.

    Используйте метод REST API upload.

Создайте группу безопасностиСоздайте группу безопасности

Группы безопасности содержат правила, которые разрешают L7-балансировщику получать входящий трафик и отправлять его на бакеты-бэкенды.

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

Консоль управления
Yandex Cloud CLI
Terraform
API
  1. В консоли управления выберите сервис Virtual Private Cloud.

  2. На панели слева выберите Группы безопасности.

  3. Справа сверху нажмите кнопку Создать группу безопасности.

  4. В поле Имя укажите canary-sg.

  5. В поле Сеть выберите canary-network.

  6. В блоке Правила создайте правила по инструкции под таблицей:

    Направление
    трафика
    Описание Диапазон портов Протокол Источник /
    назначение
    CIDR блоки
    Исходящий any Весь Любой CIDR 0.0.0.0/0
    Входящий ext-http 80 TCP CIDR 0.0.0.0/0
    Входящий ext-https 443 TCP CIDR 0.0.0.0/0
    Входящий healthchecks 30080 TCP Проверки состояния балансировщика —
    1. Перейдите на вкладку Исходящий трафик или Входящий трафик.

    2. Нажмите кнопку Добавить правило.

    3. В открывшемся окне в поле Диапазон портов укажите один порт или диапазон портов, куда или откуда будет поступать трафик.

    4. В поле Протокол укажите нужный протокол или оставьте Любой.

    5. В поле Назначение или Источник выберите назначение правила:

      • CIDR — правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.
      • Проверки состояния балансировщика — правило, которое позволяет балансировщику проверять состояние ВМ.
    6. Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.

  7. Нажмите кнопку Сохранить.

Выполните следующую команду:

yc vpc security-group create canary-sg \
  --network-name canary-network \
  --rule direction=egress,port=any,protocol=any,v4-cidrs=[0.0.0.0/0] \
  --rule direction=ingress,port=80,protocol=tcp,v4-cidrs=[0.0.0.0/0] \
  --rule direction=ingress,port=443,protocol=tcp,v4-cidrs=[0.0.0.0/0] \
  --rule direction=ingress,port=30080,protocol=tcp,predefined=loadbalancer_healthchecks

Результат:

id: enpd133ngcnr********
folder_id: b1g9hv2loamq********
created_at: "2021-11-03T10:26:16Z"
name: canary-sg
network_id: enptrcle5q3d********
status: ACTIVE
rules:
- id: enpkgrpi2gsi********
  direction: EGRESS
  protocol_name: ANY
  protocol_number: "-1"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enpgssij0i16********
  direction: INGRESS
  ports:
    from_port: "80"
    to_port: "80"
  protocol_name: TCP
  protocol_number: "6"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enp0bft67j9l********
  direction: INGRESS
  ports:
    from_port: "443"
    to_port: "443"
  protocol_name: TCP
  protocol_number: "6"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enpmorcimu65********
  direction: INGRESS
  ports:
    from_port: "30080"
    to_port: "30080"
  protocol_name: TCP
  protocol_number: "6"
  predefined_target: loadbalancer_healthchecks

Подробнее о команде yc vpc security-group create см. в справочнике CLI.

  1. Добавьте в конфигурационный файл параметры группы безопасности canary-sg:

    resource "yandex_vpc_security_group" "canary-sg" {
      name       = "canary-sg"
      network_id = yandex_vpc_network.canary-network.id
    
      egress {
        protocol       = "ANY"
        port           = "ANY"
        v4_cidr_blocks = ["0.0.0.0/0"]
      }
    
      ingress {
        protocol       = "TCP"
        port           = 80
        v4_cidr_blocks = ["0.0.0.0/0"]
      }
    
      ingress {
        protocol       = "TCP"
        port           = 443
        v4_cidr_blocks = ["0.0.0.0/0"]
      }
    
      ingress {
        protocol          = "TCP"
        port              = 30080
        predefined_target = "loadbalancer_healthchecks"
      }
    }
    

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

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

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

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

      terraform plan
      

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

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

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

      terraform apply
      
    2. Подтвердите создание ресурсов.

Используйте вызов gRPC API SecurityGroupService/Create или метод REST API create.

Чтобы добавить правило для проверок состояния балансировщика, используйте параметр loadbalancer_healthchecks в поле SecurityGroupRuleSpec.target.predefined_target для gRPC API или в поле predefinedTarget для REST API.

Создайте группы бэкендов в Application Load BalancerСоздайте группы бэкендов в Application Load Balancer

Консоль управления
API
  1. Создайте группу бэкендов canary-bg-production с бэкендами canary-backend-blue и canary-backend-green:

    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Application Load Balancer.
    3. На панели слева выберите Группы бэкендов.
    4. Справа сверху нажмите кнопку Создать группу бэкендов.
    5. В поле Имя укажите canary-bg-production.
    6. Создайте бэкенд canary-backend-blue:
      1. В блоке Бэкенды нажмите Добавить.
      2. В поле Имя укажите canary-backend-blue.
      3. В поле Вес укажите 100.
      4. В поле Тип выберите Бакет.
      5. В поле Бакет выберите «синий» бакет.
    7. Создайте бэкенд canary-backend-green:
      1. В блоке Бэкенды нажмите Добавить.
      2. В поле Имя укажите canary-backend-green.
      3. В поле Вес укажите 0.
      4. В поле Тип выберите Бакет.
      5. В поле Бакет выберите «зеленый» бакет.
    8. Нажмите кнопку Создать.
  2. Аналогично создайте группу бэкендов canary-bg-staging. Для бэкенда canary-backend-blue установите вес 0, для canary-backend-green — 100.

Если вы будете выполнять следующие шаги с помощью Terraform, скопируйте идентификаторы групп бэкендов canary-bg-production и canary-bg-staging со вкладки Группы бэкендов.

Используйте вызов gRPC API BackendGroupService/Create или метод REST API create.

Создайте HTTP-роутер и виртуальные хостыСоздайте HTTP-роутер и виртуальные хосты

Консоль управления
Yandex Cloud CLI
Terraform
API
  1. В консоли управления выберите каталог example-folder.

  2. В списке сервисов выберите Application Load Balancer.

  3. На панели слева выберите HTTP-роутеры.

  4. Справа сверху нажмите кнопку Создать HTTP-роутер.

  5. В поле Имя укажите canary-router.

  6. Создайте виртуальный хост canary-vh-production:

    1. В блоке Виртуальные хосты нажмите кнопку Добавить виртуальный хост.
    2. В поле Имя укажите canary-vh-production.
    3. В поле Authority укажите cdn.yandexcloud.example.
    4. Нажмите кнопку Добавить маршрут.
    5. В поле Имя укажите canary-route-production.
    6. В поле Путь выберите Начинается с и укажите путь /.
    7. В списке Методы HTTP выберите GET.
    8. В поле Действие оставьте Маршрутизация.
    9. В списке Группа бэкендов выберите canary-bg-production.
  7. Создайте виртуальный хост canary-vh-staging:

    • Имя — canary-vh-production.
    • Authority — cdn-staging.yandexcloud.example.
    • Имя маршрута — canary-route-staging.
    • Группа бэкендов — canary-bg-staging.
    • Остальные параметры — как у canary-vh-production.
  8. Нажмите кнопку Создать.

  1. Создайте HTTP-роутер canary-router:

    yc alb http-router create canary-router
    

    Результат:

    id: ds7qd0vj01dj********
    name: canary-router
    folder_id: b1g9hv2loamq********
    created_at: "2021-11-03T10:31:41.027649223Z"
    

    Подробнее о команде yc alb http-router create см. в справочнике CLI.

  2. Создайте виртуальный хост canary-vh-production:

    yc alb virtual-host create canary-vh-production \
      --http-router-name canary-router \
      --authority cdn.yandexcloud.example
    

    Результат:

    done (1s)
    name: canary-vh-production
    authority:
    - cdn.yandexcloud.example
    

    Подробнее о команде yc alb virtual-host create см. в справочнике CLI.

  3. Создайте маршрут canary-route-production в виртуальном хосте canary-vh-production:

    yc alb virtual-host append-http-route canary-route-production \
      --http-router-name canary-router \
      --virtual-host-name canary-vh-production \
      --prefix-path-match "/" \
      --backend-group-name canary-bg-production
    

    Результат:

    done (1s)
    name: canary-vh-production
    authority:
    - cdn.yandexcloud.example
    routes:
    - name: canary-route-production
      http:
        match:
          path:
            prefix_match: /
        route:
          backend_group_id: ds7pbm5fj2v0********
    

    Подробнее о команде yc alb virtual-host append-http-route см. в справочнике CLI.

  4. Создайте виртуальный хост canary-vh-staging:

    yc alb virtual-host create canary-vh-staging \
      --http-router-name canary-router \
      --authority cdn-staging.yandexcloud.example
    

    Результат:

    done (1s)
    name: canary-vh-staging
    authority:
    - cdn-staging.yandexcloud.example
    
  5. Создайте маршрут canary-route-staging в виртуальном хосте canary-vh-staging:

    yc alb virtual-host append-http-route canary-route-staging \
      --http-router-name canary-router \
      --virtual-host-name canary-vh-staging \
      --prefix-path-match "/" \
      --backend-group-name canary-bg-staging
    

    Результат:

    done (1s)
    name: canary-vh-staging
    authority:
    - cdn-staging.yandexcloud.example
    routes:
    - name: canary-route-staging
      http:
        match:
          path:
            prefix_match: /
        route:
          backend_group_id: ds765atleota********
    
  1. Добавьте в конфигурационный файл параметры HTTP-роутера canary-router, его виртуальных хостов и маршрутов:

    ...
    
    resource "yandex_alb_http_router" "canary-router" {
      name = "canary-router"
    }
    
    resource "yandex_alb_virtual_host" "canary-vh-production" {
      name           = "canary-vh-production"
      http_router_id = ${yandex_alb_http_router.canary-router.id}
      authority      = "cdn.yandexcloud.example"
    
      route {
        name = "canary-route-production"
        http_route {
          http_route_action {
            backend_group_id = "<идентификатор_группы_бэкендов_canary-bg-production>"
          }
        }
      }  
    }
    
    resource "yandex_alb_virtual_host" "canary-vh-staging" {
      name           = "canary-vh-staging"
      http_router_id = ${yandex_alb_http_router.canary-router.id}
      authority      = "cdn-staging.yandexcloud.example"
    
      route {
        name = "canary-route-staging"
        http_route {
          http_route_action {
            backend_group_id = "<идентификатор_группы_бэкендов_canary-bg-staging>"
          }
        }
      }  
    }
    

    Подробнее см. в описаниях ресурсов yandex_alb_http_router и yandex_alb_virtual_host в документации провайдера Terraform.

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

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

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

      terraform plan
      

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

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

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

      terraform apply
      
    2. Подтвердите создание ресурсов.

  1. Создайте HTTP-роутер canary-router с помощью вызова gRPC API HttpRouterService/Create или метода REST API create.
  2. Создайте виртуальные хосты canary-vh-production и canary-vh-staging, привязанные к роутеру, и их маршруты с помощью вызова gRPC API VirtualHostService/Create или метода REST API create.

Создайте L7-балансировщикСоздайте L7-балансировщик

Консоль управления
Yandex Cloud CLI
Terraform
API
  1. В консоли управления выберите каталог example-folder.

  2. В списке сервисов выберите Application Load Balancer.

  3. Справа сверху нажмите кнопку Создать L7-балансировщик.

  4. В поле Имя укажите canary-balancer.

  5. В блоке Сетевые настройки:

    1. В поле Сеть выберите canary-network.
    2. В поле Группы безопасности выберите canary-sg. Если этого поля нет, для балансировщика будет разрешен любой входящий и исходящий трафик.
  6. В блоке Размещение выберите три подсети для узлов балансировщика — canary-subnet-ru-central1-a, canary-subnet-ru-central1-b и canary-subnet-ru-central1-d — и включите передачу трафика в эти подсети.

  7. В блоке Обработчики нажмите Добавить обработчик и задайте настройки обработчика:

    1. В поле Имя укажите canary-listener.

    2. В блоке Публичный IP-адрес:

      • В поле Порт укажите 80.
      • В поле Тип выберите Автоматически.
    3. В поле HTTP-роутер выберите canary-router.

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

  1. Получите идентификаторы подсетей сети canary-network:

    yc vpc network list-subnets canary-network
    

    Результат:

    +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+
    |          ID          |            NAME             |      FOLDER ID       |      NETWORK ID      | ROUTE TABLE ID |     ZONE      |     RANGE     |
    +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+
    | e9bnnssj8sc8******** | canary-subnet-ru-central1-d | b1g9hv2loamq******** | enptrcle5q3d******** |                | ru-central1-d | [10.1.0.0/16] |
    | e2lghukd9iqo******** | canary-subnet-ru-central1-b | b1g9hv2loamq******** | enptrcle5q3d******** |                | ru-central1-b | [10.2.0.0/16] |
    | b0c3pte4o2kn******** | canary-subnet-ru-central1-a | b1g9hv2loamq******** | enptrcle5q3d******** |                | ru-central1-a | [10.3.0.0/16] |
    +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+
    

    Подробнее о команде yc vpc network list-subnets см. в справочнике CLI.

  2. Получите идентификатор группы безопасности canary-sg:

    yc vpc security-group get canary-sg | grep "^id"
    

    Результат:

    id: enpd133ngcnr********
    

    Подробнее о команде yc vpc security-group get см. в справочнике CLI.

  3. Создайте балансировщик canary-balancer:

    yc alb load-balancer create canary-balancer \
      --network-name canary-network \
      --security-group-id <идентификатор_группы_безопасности_canary-sg> \
      --location zone=ru-central1-a,subnet-id=<идентификатор_подсети_canary-subnet-ru-central1-a> \
      --location zone=ru-central1-b,subnet-id=<идентификатор_подсети_canary-subnet-ru-central1-b> \
      --location zone=ru-central1-d,subnet-id=<идентификатор_подсети_canary-subnet-ru-central1-d>
    

    Результат:

    done (3m0s)
    id: ds77q7v39b4u********
    name: canary-balancer
    folder_id: b1g9hv2loamq********
    status: ACTIVE
    region_id: ru-central1
    network_id: enptrcle5q3d********
    allocation_policy:
      locations:
      - zone_id: ru-central1-d
        subnet_id: b0c3pte4o2kn********
      - zone_id: ru-central1-b
        subnet_id: e2lghukd9iqo********
      - zone_id: ru-central1-a
        subnet_id: e9bnnssj8sc8********
    log_group_id: ckg23vr4dlks********
    security_group_ids:
    - enpd133ngcnr********
    created_at: "2021-11-03T10:55:49.134935148Z"
    

    Подробнее о команде yc alb load-balancer create см. в справочнике CLI.

  4. Добавьте к балансировщику обработчик:

    yc alb load-balancer add-listener \
      --name canary-balancer \
      --listener-name canary-listener \
      --external-ipv4-endpoint port=80 \
      --http-router-name canary-router
    

    Результат:

    done (43s)
    id: ds77q7v39b4u********
    name: canary-balancer
    folder_id: b1g9hv2loamq********
    status: ACTIVE
    region_id: ru-central1
    network_id: enptrcle5q3d********
    listeners:
    - name: canary-listener
      endpoints:
      - addresses:
        - external_ipv4_address:
            address: 84.252.133.149
        ports:
        - "80"
      http:
        handler:
          http_router_id: ds7qd0vj01dj********
    allocation_policy:
      locations:
      - zone_id: ru-central1-d
        subnet_id: b0c3pte4o2kn********
      - zone_id: ru-central1-b
        subnet_id: e2lghukd9iqo********
      - zone_id: ru-central1-a
        subnet_id: e9bnnssj8sc8********
    log_group_id: ckg23vr4dlks********
    security_group_ids:
    - enpd133ngcnr********
    created_at: "2021-11-03T10:55:49.134935148Z"
    

    Подробнее о команде yc alb load-balancer add-listener см. в справочнике CLI.

  1. Добавьте в конфигурационный файл параметры L7-балансировщика canary-balancer:

    ...
    
    resource "yandex_alb_load_balancer" "canary-balancer" {
      name               = "canary-balancer"
      network_id         = ${yandex_vpc_network.canary-network.id}
      security_group_ids = [ ${yandex_vpc_security_group.canary-sg.id} ]
    
      allocation_policy {
        location {
          zone_id   = "ru-central1-a"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-ru-central1-a.id}
        }
    
        location {
          zone_id   = "ru-central1-b"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-ru-central1-b.id}
        }
    
        location {
          zone_id   = "ru-central1-d"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-ru-central1-d.id}
        }
      }
    
      listener {
        name = "canary-listener"
        endpoint {
          address {
            external_ipv4_address {
            }
          }
          ports = [80]
        }
        http {
          handler {
            http_router_id = ${yandex_alb_http_router.canary-router.id}
          }
        }
      }
    }
    

    Подробнее о ресурсе yandex_alb_load_balancer см. в документации провайдера Terraform.

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

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

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

      terraform plan
      

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

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

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

      terraform apply
      
    2. Подтвердите создание ресурсов.

Используйте вызов gRPC API LoadBalancerService/Create или метод REST API create.

Создайте CDN-ресурсСоздайте CDN-ресурс

Консоль управления
Yandex Cloud CLI
Terraform
API
  1. В консоли управления выберите каталог example-folder.

  2. В списке сервисов выберите Cloud CDN.

  3. Если CDN-провайдер еще не активирован, нажмите кнопку Подключиться к провайдеру. Подключение произойдет автоматически.

    Если кнопки Подключиться к провайдеру нет, и вам доступно создание ресурсов и групп источников, значит, провайдер уже активирован. Переходите к следующему шагу.

  4. Создайте CDN-ресурс:

    1. Справа сверху нажмите кнопку Создать ресурс.

    2. Задайте основные параметры CDN-ресурса:

      • Запрос контента — Из одного источника.

      • Тип источника — L7-балансировщик.

      • L7-балансировщик — canary-balancer.

      • IP-адрес — IP-адрес, назначенный балансировщику (будет единственным в списке).

      • В блоке Доменные имена для раздачи контента:

        • В поле Доменное имя укажите cdn.yandexcloud.example.
        • Нажмите кнопку Добавить доменное имя и укажите cdn-staging.yandexcloud.example.

        Внимание

        Первое доменное имя, cdn.yandexcloud.example, станет основным, и его будет невозможно изменить после создания CDN-ресурса.

      • В блоке Дополнительно:

        • В поле Протокол для источников выберите HTTP.
        • В поле Переадресация клиентов выберите Не использовать.
        • Выберите опцию Доступ конечных пользователей к контенту.
        • В поле Тип сертификата укажите Сертификат из Certificate Manager и выберите сертификат для доменных имен cdn.yandexcloud.example и cdn-staging.yandexcloud.example.
        • В поле Заголовок Host выберите Как у клиента.
    3. Нажмите кнопку Создать.

  5. Включите переадресацию клиентов с HTTP на HTTPS:

    1. Выберите ресурс, созданный ранее.
    2. Убедитесь, что в блоке Дополнительно статус сертификата изменился на Выпущен.
    3. Справа сверху нажмите кнопку Редактировать.
    4. В блоке Дополнительно в поле Переадресация клиентов выберите С HTTP на HTTPS.
    5. Нажмите кнопку Сохранить.
  6. Включите для ресурса кеширование на CDN-серверах:

    1. Выберите ресурс, созданный ранее.
    2. Перейдите в раздел Кеширование.
    3. Справа сверху нажмите кнопку Редактировать.
    4. Включите опцию Кеширование в CDN.
    5. Нажмите кнопку Сохранить.
  1. Если CDN-провайдер еще не активирован, выполните команду:

    yc cdn provider activate --folder-id <идентификатор_каталога> --type gcore
    
  2. Создайте группу источников canary-origin-group, указав IP-адрес балансировщика:

    yc cdn origin-group create --name "canary-origin-group" \
      --origin source=<IP-адрес_балансировщика>:80,enabled=true
    

    Результат:

    id: "90748"
    folder_id: b1geoelk7fld********
    name: canary-origin-group
    use_next: true
    origins:
    - id: "562449"
      origin_group_id: "90748"
      source: 51.250.10.216:80
      enabled: true
    

    Подробнее о команде yc cdn origin-group create см. в справочнике CLI.

  3. Скопируйте идентификатор группы источников origin_group_id из предыдущего шага и создайте CDN-ресурс, выполнив команду:

    yc cdn resource create \
      --cname cdn.yandexcloud.example \
      --origin-group-id <идентификатор_группы_источников> \
      --secondary-hostnames cdn-staging.yandexcloud.example \
      --origin-protocol http \
      --cert-manager-ssl-cert-id <идентификатор_сертификата> \
      --forward-host-header
    

    Результат:

    id: bc843k2yinvq********
    folder_id: b1ge1elk72ld********
    cname: cdn.yandexcloud.example
    ...
    active: true
    ...
    ...
    secondary_hostnames:
    - cdn-staging.yandexcloud.example
    ...
    

    Подробнее о команде yc cdn resource create см. в справочнике CLI.

  4. Включите переадресацию клиентов для ресурса:

    yc cdn resource update <идентификатор_ресурса> --redirect-http-to-https
    
  1. Добавьте в конфигурационный файл параметры CDN-ресурсов:

    ...
    
    resource "yandex_cdn_origin_group" "my_group" {
      name     = "canary-origin-group"
      use_next = true
      origin {
       source = "<IP-адрес_балансировщика>:80"
       backup = false
      }
    }
    
    resource "yandex_cdn_resource" "my_resource" {
    
        cname               = "cdn.yandexcloud.example"
        active              = true
        origin_protocol     = "http"
        secondary_hostnames = ["cdn-staging.yandexcloud.example"]
        origin_group_id     = yandex_cdn_origin_group.my_group.id
        ssl_certificate {
          type                   = "certificate_manager"
          certificate_manager_id = "<идентификатор_сертификата>"
        }
        options {
            edge_cache_settings    = "345600"
            browser_cache_settings = "1800"
            ignore_cookie          = true
            ignore_query_params    = false
        }
    
    }
    

    Подробнее см. в описаниях ресурсов yandex_cdn_origin_group и yandex_cdn_resource в документации провайдера Terraform.

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

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

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

      terraform plan
      

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

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

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

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

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

  4. Включите переадресацию клиентов для ресурса. Добавьте в начало блока options для CDN-ресурса следующее поле:

    ...
    options {
      redirect_https_to_http = true
    ...
    
  5. Выполните проверку с помощью команды:

    terraform plan
    

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

  6. Если ошибок нет, выполните команду:

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

После этого для ресурса будет включена переадресация.

Используйте вызов gRPC API ResourceService/Create или метод REST API create.

Настройте DNS для сервисаНастройте DNS для сервиса

Доменные имена cdn.yandexcloud.example и cdn-staging.yandexcloud.example должны быть связаны с CDN-ресурсом с помощью записей DNS.

Чтобы настроить DNS:

  1. Получите доменное имя CDN-балансировщика:

    Консоль управления
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. В списке CDN-ресурсов выберите ресурс с основным доменным именем cdn.yandexcloud.example.
    4. Из блока Настройки DNS внизу страницы скопируйте доменное имя вида cl-********.edgecdn.ru.
  2. На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.

  3. Создайте или измените CNAME-записи для cdn.yandexcloud.example и cdn-staging.yandexcloud.example таким образом, чтобы они указывали на скопированное доменное имя:

    cdn CNAME cl-********.edgecdn.ru
    cdn-staging CNAME cl-********.edgecdn.ru 
    

    Примечание

    Не используйте ресурсную запись ANAME с доменными именами для раздачи контента, поскольку в таком случае конечный пользователь получит ответ от CDN-сервера, не связанного с геолокацией пользователя. Ответ всегда будет одинаков для всех пользователей.

    Если вы пользуетесь Cloud DNS, настройте запись по следующей инструкции:

    Инструкция по настройке DNS-записей для Cloud DNS
    Консоль управления
    Yandex Cloud CLI
    Terraform
    API
    1. В консоли управления выберите сервис Cloud DNS.

    2. Если у вас нет публичной зоны DNS, создайте ее:

      1. Нажмите кнопку Создать зону.
      2. В поле Зона укажите доменное имя сайта с точкой в конце: yandexcloud.example.
      3. В поле Тип выберите Публичная.
      4. В поле Имя укажите canary-dns-zone.
      5. Нажмите кнопку Создать.
    3. Создайте в зоне CNAME-запись для cdn.yandexcloud.example:

      1. Выберите зону canary-dns-zone.
      2. Нажмите кнопку Создать запись.
      3. В поле Имя укажите cdn.
      4. В поле Тип укажите CNAME.
      5. В поле Значение вставьте скопированное значение вида cl-********.edgecdn.ru.
      6. Нажмите кнопку Создать.
    4. Аналогично создайте в той же зоне CNAME-запись для cdn-staging.yandexcloud.example. В поле Имя укажите cdn-staging.

    1. Если у вас нет публичной зоны DNS, создайте ее:

      yc dns zone create \
        --name canary-dns-zone \
        --zone yandexcloud.example. \
        --public-visibility
      

      Результат:

      id: dns4rq4taddd********
      folder_id: b1g9hv2loamq********
      created_at: "2021-11-03T11:03:28.847Z"
      name: canary-dns-zone
      zone: yandexcloud.example.
      public_visibility: {}
      

      Подробнее о команде yc dns zone create см. в справочнике CLI.

    2. Создайте в зоне CNAME-записи для cdn.yandexcloud.example и cdn-staging.yandexcloud.example со скопированным значением вида cl-********.edgecdn.ru:

      yc dns zone add-records \
        --name canary-dns-zone \
        --record "cdn CNAME cl-********.edgecdn.ru" \
        --record "cdn-staging CNAME cl-********.edgecdn.ru"
      

      Подробнее о команде yc dns zone add-records см. в справочнике CLI.

    1. Добавьте в конфигурационный файл параметры DNS-зоны canary-dns-zone и CNAME-записей в ней:

      ...
      
      resource "yandex_dns_zone" "canary-dns-zone" {
        zone   = "yandexcloud.example."
        name   = "canary-dns-zone"
        public = true
      }
      
      resource "yandex_dns_recordset" "canary-recordset-production" {
        zone_id = ${yandex_dns_zone.canary-dns-zone.id}
        name    = "cdn"
        type    = "CNAME"
        data    = ["<скопированное_значение_вида_cl-********.edgecdn.ru>"]
      }
      
      resource "yandex_dns_recordset" "canary-recordset-staging" {
        zone_id = ${yandex_dns_zone.canary-dns-zone.id}
        name    = "cdn-staging"
        type    = "CNAME"
        data    = ["<скопированное_значение_вида_cl-********.edgecdn.ru>"]
      }
      

      Подробнее см. в описаниях ресурсов yandex_dns_zone и yandex_dns_recordset в документации провайдера Terraform.

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

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

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

        terraform plan
        

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

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

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

        terraform apply
        
      2. Подтвердите создание ресурсов.

    1. Создайте DNS-зону canary-dns-zone с помощью вызова gRPC API DnsZoneService/Create или метода REST API create.
    2. Добавьте в зону CNAME-записи cdn и cdn-staging со скопированным значением вида cl-********.edgecdn.ru с помощью вызова gRPC API DnsZoneService/UpdateRecordSets или метода REST API updateRecordSets.

На обновление записей на DNS-серверах может потребоваться несколько часов. После этого вы сможете проверить работу сервиса.

Проверьте работу сервиса и переключение между версиямиПроверьте работу сервиса и переключение между версиями

Первая проверкаПервая проверка

Проверьте, что доменному имени cdn.yandexcloud.example соответствует версия 1, а cdn-staging.yandexcloud.example — версия 2:

  1. Откройте в браузере адрес https://cdn.yandexcloud.example/index.html. Вы должны увидеть страницу с указанием на версию 1.

  2. Удалите из кеша CDN-ресурса файл index.html:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Контент.
    5. Нажмите кнопку Очистить кеш.
    6. В поле Тип очистки выберите Выборочная.
    7. Укажите путь к загруженному файлу: /index.html.
    8. Нажмите кнопку Очистить кеш.
    1. Получите идентификатор созданного CDN-ресурса:

      yc cdn resource list
      

      Результат:

      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      |          ID          |          CNAME           |           CREATED AT           |           UPDATED AT           | ACTIVE |                  OPTIONS                  |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      | bc837xptmpkh******** | cdn.yandexcloud.example  | seconds:1637235693             | seconds:1637235693             | true   | edge_cache_settings:{enabled:true         |
      |                      |                          | nanos:434085000                | nanos:434115000                |        | default_value:345600}                     |
      |                      |                          |                                |                                |        | cache_http_headers:{value:"accept-ranges" |
      |                      |                          |                                |                                |        | value:"cache-control" value:"connection"  |
      |                      |                          |                                |                                |        | value:"content-encoding"                  |
      |                      |                          |                                |                                |        | value:"content-length"                    |
      |                      |                          |                                |                                |        | value:"content-type"                      |
      |                      |                          |                                |                                |        | value:"date" value:"etag"                 |
      |                      |                          |                                |                                |        | value:"expires" value:"keep-alive"        |
      |                      |                          |                                |                                |        | value:"last-modified" value:"server"      |
      |                      |                          |                                |                                |        | value:"vary"} stale:{enabled:true         |
      |                      |                          |                                |                                |        | value:"error" value:"updating"}           |
      |                      |                          |                                |                                |        | allowed_http_methods:{value:"GET"         |
      |                      |                          |                                |                                |        | value:"POST" value:"HEAD"                 |
      |                      |                          |                                |                                |        | value:"OPTIONS"}                          |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      

      Подробнее о команде yc cdn resource list см. в справочнике CLI.

    2. Удалите файл из кеша:

      yc cdn cache purge \
        --resource-id <идентификатор_CDN-ресурса> \
        --path "/index.html"
      

      Подробнее о команде yc cdn cache purge см. в справочнике CLI.

    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Удалите файл index.html из кеша с помощью вызова gRPC API CacheService/Purge или метода purge.
  3. Откройте в браузере адрес https://cdn-staging.yandexcloud.example/index.html. Вы должны увидеть страницу с указанием на версию 2.

Канареечное развертывание версии 2Канареечное развертывание версии 2

  1. Отключите кеширование CDN-ресурса и удалите из кеша файл index.html:

    Консоль управления
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Кеширование.
    5. Нажмите кнопку Редактировать.
    6. Отключите опцию Кеширование в CDN.
    7. Нажмите кнопку Сохранить.
    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Отключите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.
  2. Удалите из кеша файл index.html:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Контент.
    5. Нажмите кнопку Очистить кеш.
    6. В поле Тип очистки выберите Выборочная.
    7. Укажите путь к загруженному файлу: /index.html.
    8. Нажмите кнопку Очистить кеш.
    1. Получите идентификатор созданного CDN-ресурса:

      yc cdn resource list
      

      Результат:

      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      |          ID          |          CNAME           |           CREATED AT           |           UPDATED AT           | ACTIVE |                  OPTIONS                  |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      | bc837xptmpkh******** | cdn.yandexcloud.example  | seconds:1637235693             | seconds:1637235693             | true   | edge_cache_settings:{enabled:true         |
      |                      |                          | nanos:434085000                | nanos:434115000                |        | default_value:345600}                     |
      |                      |                          |                                |                                |        | cache_http_headers:{value:"accept-ranges" |
      |                      |                          |                                |                                |        | value:"cache-control" value:"connection"  |
      |                      |                          |                                |                                |        | value:"content-encoding"                  |
      |                      |                          |                                |                                |        | value:"content-length"                    |
      |                      |                          |                                |                                |        | value:"content-type"                      |
      |                      |                          |                                |                                |        | value:"date" value:"etag"                 |
      |                      |                          |                                |                                |        | value:"expires" value:"keep-alive"        |
      |                      |                          |                                |                                |        | value:"last-modified" value:"server"      |
      |                      |                          |                                |                                |        | value:"vary"} stale:{enabled:true         |
      |                      |                          |                                |                                |        | value:"error" value:"updating"}           |
      |                      |                          |                                |                                |        | allowed_http_methods:{value:"GET"         |
      |                      |                          |                                |                                |        | value:"POST" value:"HEAD"                 |
      |                      |                          |                                |                                |        | value:"OPTIONS"}                          |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      
    2. Удалите файл из кеша:

      yc cdn cache purge \
        --resource-id <идентификатор_CDN-ресурса> \
        --path "/index.html"
      
    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Удалите файл index.html из кеша с помощью вызова gRPC API CacheService/Purge или метода purge.
  3. Настройте группу бэкендов canary-bg-production так, чтобы 20% трафика доменного имени cdn.yandexcloud.example приходилось на бэкенд canary-backend-green с версией 2:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог example-folder.

    2. В списке сервисов выберите Application Load Balancer.

    3. На панели слева выберите Группы бэкендов.

    4. Выберите canary-bg-production.

    5. Для бэкенда canary-backend-blue установите вес 80 вместо 100:

      1. В блоке Бэкенды найдите бэкенд canary-backend-blue, нажмите и выберите Редактировать.
      2. В поле Вес укажите 80.
      3. Нажмите Сохранить.
    6. Аналогично для бэкенда canary-backend-green установите вес 20 вместо 0.

    7. Нажмите кнопку Сохранить.

    1. Для бэкенда canary-backend-blue установите вес 80 вместо 100:

      yc alb backend-group update-http-backend \
        --backend-group-name canary-bg-production \
        --name canary-backend-blue \
        --weight 80
      

      Результат:

      done (1s)
      id: ds7l9puc18c9********
      name: canary-bg-production
      folder_id: b1g9hv2loamq********
      http:
        backends:
        - name: canary-backend-blue
          backend_weight: "80"
          storage_bucket:
            bucket: <имя_синего_бакета>
      created_at: "2021-11-03T10:28:47.680825561Z"
      

      Подробнее о команде yc alb backend-group update-http-backend см. в справочнике CLI.

    2. Для бэкенда canary-backend-green установите вес 20 вместо 0:

      yc alb backend-group update-http-backend \
        --backend-group-name canary-bg-production \
        --name canary-backend-green \
        --weight 20
      

      Результат:

      done (1s)
      id: ds7l9puc18c9********
      name: canary-bg-production
      folder_id: b1g9hv2loamq********
      http:
        backends:
        - name: canary-backend-green
          backend_weight: "20"
          storage_bucket:
            bucket: <имя_зеленого_бакета>
      created_at: "2021-11-03T10:28:47.680825561Z"
      

    Используйте вызов gRPC API BackendGroupService/UpdateBackend или метод REST API updateBackend.

  4. Несколько раз откройте в браузере адрес https://cdn.yandexcloud.example/index.html. Примерно в 20% случаев вы должны увидеть страницу с указанием на версию 2, в остальных случаях — на версию 1.

  5. Аналогично шагам 1–2 настройте и проверьте следующие распределения трафика между бэкендами:

    1. В группе бэкендов canary-bg-production — по 50% трафика на оба бэкенда.
    2. В группе бэкендов canary-bg-production — весь трафик на бэкенд canary-backend-green.
    3. В группе бэкендов canary-bg-staging (доменное имя cdn-staging.yandexcloud.example) — весь трафик на бэкенд canary-backend-blue.
  6. Снова включите кеширование:

    Консоль управления
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Кеширование.
    5. Нажмите кнопку Редактировать.
    6. Включите опцию Кеширование в CDN.
    7. Нажмите кнопку Сохранить.
    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Включите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.

Сине-зеленое развертывание для отката к версии 1Сине-зеленое развертывание для отката к версии 1

  1. Отключите кеширование CDN-ресурса и удалите из кеша файл index.html:

    Консоль управления
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Кеширование.
    5. Нажмите кнопку Редактировать.
    6. Отключите опцию Кеширование в CDN.
    7. Нажмите кнопку Сохранить.
    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Отключите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.
  2. Удалите из кеша файл index.html:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Контент.
    5. Нажмите кнопку Очистить кеш.
    6. В поле Тип очистки выберите Выборочная.
    7. Укажите путь к загруженному файлу: /index.html.
    8. Нажмите кнопку Очистить кеш.
    1. Получите идентификатор созданного CDN-ресурса:

      yc cdn resource list
      

      Результат:

      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      |          ID          |          CNAME           |           CREATED AT           |           UPDATED AT           | ACTIVE |                  OPTIONS                  |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      | bc837xptmpkh******** | cdn.yandexcloud.example  | seconds:1637235693             | seconds:1637235693             | true   | edge_cache_settings:{enabled:true         |
      |                      |                          | nanos:434085000                | nanos:434115000                |        | default_value:345600}                     |
      |                      |                          |                                |                                |        | cache_http_headers:{value:"accept-ranges" |
      |                      |                          |                                |                                |        | value:"cache-control" value:"connection"  |
      |                      |                          |                                |                                |        | value:"content-encoding"                  |
      |                      |                          |                                |                                |        | value:"content-length"                    |
      |                      |                          |                                |                                |        | value:"content-type"                      |
      |                      |                          |                                |                                |        | value:"date" value:"etag"                 |
      |                      |                          |                                |                                |        | value:"expires" value:"keep-alive"        |
      |                      |                          |                                |                                |        | value:"last-modified" value:"server"      |
      |                      |                          |                                |                                |        | value:"vary"} stale:{enabled:true         |
      |                      |                          |                                |                                |        | value:"error" value:"updating"}           |
      |                      |                          |                                |                                |        | allowed_http_methods:{value:"GET"         |
      |                      |                          |                                |                                |        | value:"POST" value:"HEAD"                 |
      |                      |                          |                                |                                |        | value:"OPTIONS"}                          |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      
    2. Удалите файл из кеша:

      yc cdn cache purge \
        --resource-id <идентификатор_CDN-ресурса> \
        --path "/index.html"
      
    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Удалите файл index.html из кеша с помощью вызова gRPC API CacheService/Purge или метода purge.
  3. Перенаправьте весь трафик доменного имени cdn.yandexcloud.example обратно на бэкенд canary-backend-blue с версией 1:

    Консоль управления
    Yandex Cloud CLI
    API
    1. В консоли управления выберите каталог example-folder.

    2. В списке сервисов выберите Application Load Balancer.

    3. На панели слева выберите Группы бэкендов.

    4. Выберите canary-bg-production.

    5. Для бэкенда canary-backend-blue установите вес 100 вместо 0:

      1. В блоке Бэкенды найдите бэкенд canary-backend-blue, нажмите и выберите Редактировать.
      2. В поле Вес укажите 100.
      3. Нажмите кнопку Сохранить.
    6. Аналогично для бэкенда canary-backend-green установите вес 0 вместо 100.

    7. Нажмите кнопку Сохранить.

    1. Для бэкенда canary-backend-blue установите вес 100 вместо 0:

      yc alb backend-group update-http-backend \
        --backend-group-name canary-bg-production \
        --name canary-backend-blue \
        --weight 100
      

      Результат:

      done (1s)
      id: ds7l9puc18c9********
      name: canary-bg-production
      folder_id: b1g9hv2loamq********
      http:
        backends:
        - name: canary-backend-blue
          backend_weight: "100"
          storage_bucket:
            bucket: <имя_синего_бакета>
      created_at: "2021-11-03T10:28:47.680825561Z"
      
    2. Для бэкенда canary-backend-green установите вес 0 вместо 100:

      yc alb backend-group update-http-backend \
        --backend-group-name canary-bg-production \
        --name canary-backend-green \
        --weight 0
      

      Результат:

      done (1s)
      id: ds7l9puc18c9********
      name: canary-bg-production
      folder_id: b1g9hv2loamq********
      http:
        backends:
        - name: canary-backend-green
          backend_weight: "0"
          storage_bucket:
            bucket: <имя_зеленого_бакета>
      created_at: "2021-11-03T10:28:47.680825561Z"
      

    Используйте вызов gRPC API BackendGroupService/UpdateBackend или метод REST API updateBackend.

  4. Несколько раз откройте в браузере адрес https://cdn.yandexcloud.example/index.html. Во всех случаях вы должны увидеть страницу с указанием на версию 1.

  5. Аналогично шагам 1–2 переключите весь трафик доменного имени cdn-staging.yandexcloud.example на бэкенд canary-backend-green с версией 2 и проверьте переключение в браузере.

  6. Снова включите кеширование:

    Консоль управления
    API
    1. В консоли управления выберите каталог example-folder.
    2. В списке сервисов выберите Cloud CDN.
    3. Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя — cdn.yandexcloud.example).
    4. Перейдите на вкладку Кеширование.
    5. Нажмите кнопку Редактировать.
    6. Включите опцию Кеширование в CDN.
    7. Нажмите кнопку Сохранить.
    1. Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
    2. Включите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.

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

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

  1. Если вы настраивали CNAME-записи в Cloud DNS, удалите зону DNS canary-dns-zone.
  2. Удалите CDN-ресурс с основным доменным именем cdn.yandexcloud.example.
  3. Удалите L7-балансировщик canary-balancer.
  4. Удалите все объекты из «синего» и «зеленого» бакетов.
  5. Удалите «синий» и «зеленый» бакеты.
  6. Удалите подсети canary-subnet-ru-central1-a, canary-subnet-ru-central1-b и canary-subnet-ru-central1-d.
  7. Удалите сеть canary-network.

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

Предыдущая
Интеграция L7-балансировщика с CDN и Object Storage
Следующая
Анализ логов с использованием DataLens
Проект Яндекса
© 2025 ООО «Яндекс.Облако»