Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
    • Cloud Interconnect
    • Cloud Backup
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Router
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Managed Service for YDB
    • SpeechKit
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • Container Registry
    • Managed Service for Prometheus®
    • Message Queue
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Cloud Apps
    • Yandex AI Studio
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Yandex Cloud Video
    • Stackland
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • DataSphere
    • Vision OCR
    • Translate
    • Cloud Registry
    • SmartCaptcha
    • Cloud Desktop
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Managed Service for GitLab
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • Serverless Integrations
    • IoT Core
    • Serverless Containers
    • Cloud Notification Service
    • Yandex Query
  • Статус работы сервисов
  • Marketplace
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»
Yandex Application Load Balancer
KZ
  • Начало работы
    • Все практические руководства
    • Тестирование отказоустойчивости в инфраструктуре Yandex Cloud
    • Организация виртуального хостинга
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Запись логов балансировщика в PostgreSQL
    • Настройка Gateway API в Yandex Managed Service for Kubernetes
    • Настройка L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Настройка логирования для L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Проверка состояния приложений в кластере Managed Service for Kubernetes с помощью L7-балансировщика Application Load Balancer
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Next-Generation Firewall
    • Развертывание веб-приложения на серверах BareMetal с L7-балансировщиком и защитой Smart Web Security
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи L7-балансировщика
  • История изменений
  • Обучающие курсы

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

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

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

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

Примечание

В регионе Казахстан доступна только зона доступности kz1-a.

Настройте архитектуру веб-сервиса, которая позволит переключаться между версиями по распространенным схемам развертывания: с помощью сине-зеленого развертывания (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. Создайте подсети во всех зонах доступности:

    • В kz1-a:

      yc vpc subnet create canary-subnet-kz1-a \
        --zone kz1-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-kz1-a
      network_id: enptrcle5q3d********
      zone_id: kz1-a
      v4_cidr_blocks:
      - 10.1.0.0/16
      
    • В kz1-b:

      yc vpc subnet create canary-subnet-kz1-b \
        --zone kz1-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-kz1-b
      network_id: enptrcle5q3d********
      zone_id: kz1-b
      v4_cidr_blocks:
      - 10.2.0.0/16
      
    • В kz1-d:

      yc vpc subnet create canary-subnet-kz1-d \
        --zone kz1-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-kz1-d
      network_id: enptrcle5q3d********
      zone_id: kz1-d
      v4_cidr_blocks:
      - 10.3.0.0/16
      

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

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

Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.

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

    resource "yandex_vpc_network" "canary-network" {
      name = "canary-network"
    }
    
    resource "yandex_vpc_subnet" "canary-subnet-a" {
      name           = "canary-subnet-kz1-a"
      zone           = "kz1-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-kz1-b"
      zone           = "kz1-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-kz1-d"
      zone           = "kz1-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-kz1-a, canary-subnet-kz1-b и canary-subnet-kz1-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.kz \
      s3 mb s3://<имя_синего_бакета>
    

    Результат:

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

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

Примечание

Если вы работаете с Object Storage через Terraform от имени сервисного аккаунта, назначьте сервисному аккаунту нужную роль, например 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.kz \
        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.kz \
        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. В блоке Правила создайте правила по инструкции под таблицей:

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

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

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

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

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

      • Диапазон адресов — правило будет применено к диапазону IP-адресов. В поле IPv4 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]

Результат:

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

Подробнее о команде 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"]
      }
    
    }
    

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

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

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

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

      terraform plan
      

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

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

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

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

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

Создайте группы бэкендов в 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-kz1-a, canary-subnet-kz1-b и canary-subnet-kz1-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-kz1-d | b1g9hv2loamq******** | enptrcle5q3d******** |                | kz1-d | [10.1.0.0/16] |
    | e2lghukd9iqo******** | canary-subnet-kz1-b | b1g9hv2loamq******** | enptrcle5q3d******** |                | kz1-b | [10.2.0.0/16] |
    | b0c3pte4o2kn******** | canary-subnet-kz1-a | b1g9hv2loamq******** | enptrcle5q3d******** |                | kz1-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=kz1-a,subnet-id=<идентификатор_подсети_canary-subnet-kz1-a> \
      --location zone=kz1-b,subnet-id=<идентификатор_подсети_canary-subnet-kz1-b> \
      --location zone=kz1-d,subnet-id=<идентификатор_подсети_canary-subnet-kz1-d>
    

    Результат:

    done (3m0s)
    id: ds77q7v39b4u********
    name: canary-balancer
    folder_id: b1g9hv2loamq********
    status: ACTIVE
    region_id: kz1
    network_id: enptrcle5q3d********
    allocation_policy:
      locations:
      - zone_id: kz1-d
        subnet_id: b0c3pte4o2kn********
      - zone_id: kz1-b
        subnet_id: e2lghukd9iqo********
      - zone_id: kz1-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: kz1
    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: kz1-d
        subnet_id: b0c3pte4o2kn********
      - zone_id: kz1-b
        subnet_id: e2lghukd9iqo********
      - zone_id: kz1-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   = "kz1-a"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-kz1-a.id}
        }
    
        location {
          zone_id   = "kz1-b"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-kz1-b.id}
        }
    
        location {
          zone_id   = "kz1-d"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-kz1-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. Нажмите кнопку Создать ресурс.
  4. Задайте основные настройки CDN-ресурса:
    • В блоке Контент:

      • Включите Доступ к контенту.

      • В поле Запрос контента выберите Из одного источника.

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

      • В поле L7-балансировщик выберите canary-balancer.

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

      • В поле Протокол для источников выберите HTTP.

      • В поле Доменное имя укажите cdn.yandexcloud.example.

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

        Внимание

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

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

      • В поле Переадресация клиентов выберите С HTTP на HTTPS.
      • В поле Тип сертификата укажите Сертификат из Certificate Manager и выберите сертификат для доменных имен cdn.yandexcloud.example и cdn-staging.yandexcloud.example.
      • В поле Заголовок Host выберите Как у клиента.
  5. Нажмите Продолжить.
  6. В разделе Кеширование в блоке CDN включите опцию Кеширование в CDN.
  7. Нажмите Продолжить.
  8. В разделах HTTP-заголовки и методы и Дополнительно оставьте настройки по умолчанию и нажмите Продолжить.
  1. Создайте группу источников 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.

  2. Скопируйте идентификатор группы источников 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.

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

    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 внизу страницы скопируйте доменное имя вида e1b83ae3********.topology.gslb.yccdn.kz.
  2. На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.

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

    cdn CNAME e1b83ae3********.topology.gslb.yccdn.kz
    cdn-staging CNAME e1b83ae3********.topology.gslb.yccdn.kz
    

    Примечание

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

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

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

    2. Перейдите в сервис Cloud DNS.

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

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

      1. Выберите зону canary-dns-zone.
      2. Нажмите кнопку Создать запись.
      3. В поле Имя укажите cdn.
      4. В поле Тип укажите CNAME.
      5. В поле Значение вставьте скопированное значение вида e1b83ae3********.topology.gslb.yccdn.kz.
      6. Нажмите кнопку Создать.
    5. Аналогично создайте в той же зоне 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 со скопированным значением вида e1b83ae3********.topology.gslb.yccdn.kz:

      yc dns zone add-records \
        --name canary-dns-zone \
        --record "cdn CNAME e1b83ae3********.topology.gslb.yccdn.kz" \
        --record "cdn-staging CNAME e1b83ae3********.topology.gslb.yccdn.kz"
      

      Подробнее о команде 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    = ["<скопированное_значение_вида_e1b83ae3********.topology.gslb.yccdn.kz>"]
      }
      
      resource "yandex_dns_recordset" "canary-recordset-staging" {
        zone_id = ${yandex_dns_zone.canary-dns-zone.id}
        name    = "cdn-staging"
        type    = "CNAME"
        data    = ["<скопированное_значение_вида_e1b83ae3********.topology.gslb.yccdn.kz"]
      }
      

      Подробнее в описаниях ресурсов 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 со скопированным значением вида e1b83ae3********.topology.gslb.yccdn.kz с помощью вызова 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-kz1-a, canary-subnet-kz1-b и canary-subnet-kz1-d.
  7. Удалите сеть canary-network.

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

Предыдущая
Terraform
Следующая
Обзор
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»