Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
    • Все руководства
    • Статический сайт в Object Storage
    • Сайт на LAMP- или LEMP-стеке
    • Отказоустойчивый сайт с балансировкой нагрузки с помощью Network Load Balancer
    • Отказоустойчивый сайт с балансировкой нагрузки с помощью Application Load Balancer
    • Сайт на базе Joomla с БД PostgreSQL
    • Создание сайта на WordPress
    • Сайт на WordPress с БД MySQL
    • Перенос WordPress сайта с хостинга в Yandex Cloud
    • Сайт на базе 1С-Битрикс
    • Организация виртуального хостинга
    • Создание балансировщика с защитой от DDoS
    • Публикация обновлений для игр с помощью Cloud CDN
    • Интеграция L7-балансировщика с Cloud CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Терминирование TLS-соединений
  • Интернет-магазины
    • Все руководства
    • Интернет-магазин на 1С-Битрикс
    • Интернет-магазин на OpenCart
  • Архив данных
    • Все руководства
    • Однонодовый файловый сервер
    • Настройка SFTP-сервера на Centos 7
    • Резервное копирование в Object Storage через Acronis
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Распознавание архива изображений в Vision
  • Тестовая среда
    • Все руководства
    • Тестирование приложений с помощью GitLab
    • Создание тестовых ВМ через GitLab CI
    • Высокопроизводительные вычисления на прерываемых ВМ
    • Эмуляция множества IoT-устройств
    • Нагрузочное тестирование gRPC-сервиса
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
    • HTTPS-тест с постоянной нагрузкой с помощью Phantom
    • HTTPS-тест со ступенчатой нагрузкой с помощью Pandora
    • Нагрузочное тестирование с нескольких агентов
  • Управление инфраструктурой
    • Все руководства
    • Начало работы с Terraform
    • Загрузка состояний Terraform в Object Storage
    • Начало работы с Packer
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Автоматизация сборки образов с помощью Jenkins и Packer
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Создание кластера Linux-серверов «1С:Предприятия» с кластером Managed Service for PostgreSQL
    • Миграция в Yandex Cloud с помощью Hystax Acura
    • Защита от сбоев с помощью Hystax Acura
    • Настройка синхронизации часов с помощью NTP
    • Работа с группой ВМ с автомасштабированием
    • Масштабирование группы ВМ по расписанию
    • Автомасштабирование группы ВМ для обработки сообщений из очереди Message Queue
    • Обновление группы ВМ под нагрузкой
    • Передача логов с ВМ в Cloud Logging
    • Резервное копирование ВМ с помощью Hystax Acura Backup
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание SAP-программы в Yandex Cloud
    • Настройка локального кеширующего DNS-резолвера
    • Миграция DNS-зон из Яндекс 360 в Cloud DNS
    • Интеграция Cloud DNS и корпоративного сервиса DNS
    • Создание веб-хука резолвера ACME для ответов на DNS01-проверки
    • Запись логов балансировщика в PostgreSQL
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
  • Построение Data Platform
    • Все руководства
    • Миграция БД из стороннего кластера Apache Kafka® в Managed Service for Apache Kafka®
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse с помощью Data Transfer
    • Перенос данных между кластерами Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Настройка Kafka Connect для работы с кластером Managed Service for Apache Kafka®
    • Управление схемами данных в Managed Service for Apache Kafka®
    • Использование Managed Schema Registry с Managed Service for Apache Kafka®
    • Использование Confluent Schema Registry с Managed Service for Apache Kafka®
    • Миграция базы данных из MySQL в ClickHouse с помощью Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Обмен данными между Managed Service for ClickHouse и Data Proc
    • Настройка Managed Service for ClickHouse для Graphite
    • Получение данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse с помощью Data Transfer
    • Получение данных из RabbitMQ в Managed Service for ClickHouse
    • Сохранение потока данных Data Streams в Managed Service for ClickHouse
    • Использование гибридного хранилища в Managed Service for ClickHouse
    • Шардирование таблиц Managed Service for ClickHouse
    • Настройка Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Настройка Cloud DNS для доступа к кластеру Managed Service for ClickHouse из других облачных сетей
    • Обмен данными между Managed Service for ClickHouse и Data Proc
    • Импорт данных из Managed Service for MySQL в Data Proc с помощью Sqoop
    • Импорт данных из Managed Service for PostgreSQL в Data Proc с помощью Sqoop
    • Использование скриптов инициализации для настройки GeeseFS в Data Proc
    • Миграция данных из стороннего кластера Elasticsearch в Managed Service for Elasticsearch с помощью Reindex API
    • Миграция коллекций из стороннего кластера MongoDB в Managed Service for MongoDB
    • Миграция данных в Managed Service for MongoDB
    • Шардирование коллекций MongoDB
    • Анализ производительности и оптимизация MongoDB
    • Миграция БД из стороннего кластера MySQL в кластер Managed Service for MySQL
    • Анализ производительности и оптимизация Managed Service for MySQL
    • Синхронизация данных из стороннего кластера MySQL в Managed Service for MySQL с помощью Data Transfer
    • Миграция БД из Managed Service for MySQL в сторонний кластер MySQL
    • Миграция БД из Managed Service for MySQL в Object Storage с помощью Data Transfer
    • Импорт данных из Managed Service for MySQL в Data Proc с помощью Sqoop
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Debezium
    • Миграция БД из Managed Service for MySQL в Managed Service for YDB с помощью Data Transfer
    • Создание кластера PostgreSQL для «1С:Предприятия»
    • Анализ производительности и оптимизация Managed Service for PostgreSQL
    • Миграция БД из Managed Service for PostgreSQL
    • Миграция БД из стороннего кластера PostgreSQL в Managed Service for PostgreSQL
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Импорт данных из Managed Service for PostgreSQL в Data Proc с помощью Sqoop
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for YDB с помощью Data Transfer
    • Миграция БД из Managed Service for PostgreSQL в Object Storage
    • Миграция БД из Greenplum® в ClickHouse
    • Миграция БД из Greenplum® в PostgreSQL
    • Миграция БД из стороннего кластера Redis в Managed Service for Redis
    • Использование кластера Managed Service for Redis в качестве хранилища сессий PHP
  • Продукты Microsoft в Yandex Cloud
    • Все руководства
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Развертывание Remote Desktop Gateway
  • Сетевая инфраструктура
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Настройки DHCP для работы с корпоративным DNS-сервером
    • Маршрутизация с помощью NAT-инстанса
    • Создание туннеля IPSec VPN
    • Установка виртуального роутера Cisco CSR 1000v
    • Установка виртуального роутера Mikrotik CHR
    • Соединение с облачной сетью при помощи OpenVPN
    • Создание и настройка шлюза UserGate в режиме прокси-сервера
    • Создание и настройка шлюза UserGate в режиме межсетевого экрана
    • Настройка сети для Data Proc
  • Визуализация и анализ данных
    • Все руководства
    • Визуализация данных из файла
    • Создание и публикация диаграммы с картой Москвы из CSV-файла
    • Анализ продаж сети магазинов из БД ClickHouse
    • Анализ открытых данных ДТП на дорогах России
    • Анализ продаж и локаций пиццерий на данных из БД ClickHouse и Cloud Marketplace
    • Веб-аналитика с подключением к Яндекс Метрике
    • Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики
    • Аналитика мобильного приложения на данных AppMetrica
    • Анализ статистики подкастов Яндекс Музыки (для авторов подкастов)
    • Визуализация данных с помощью QL-чарта
    • Анализ customer journey мобильного приложения на данных AppMetrica
    • Анализ логов Object Storage при помощи DataLens
  • Интернет вещей
    • Руководства по работе с интернетом вещей
    • Мониторинг состояния географически распределенных устройств
    • Мониторинг показаний датчиков и уведомления о событиях
  • Бессерверные технологии
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Разработка навыка Алисы и сайта с авторизацией
  1. Веб-сервис
  2. Сине-зеленое и канареечное развертывание версий сервиса

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

Статья создана
Yandex Cloud
,
улучшена
Dmitry A.
  • Поддерживаемые инструменты
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте облачную сеть и подсети
  • Создайте бакеты в 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. Создайте облачную сеть и подсети.
  3. Создайте бакеты в Object Storage.
  4. Загрузите файлы сервиса в бакеты.
  5. Создайте группы бэкендов в Application Load Balancer.
  6. Создайте HTTP-роутер и виртуальные хосты.
  7. Создайте L7-балансировщик.
  8. Создайте CDN-ресурс.
  9. Настройте DNS для сервиса.
  10. Проверьте работу сервиса и переключение между версиями.

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

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

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

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

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

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

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

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

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

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

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

Чтобы создать сеть и подсети:

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

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

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

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

    yc vpc network create canary-network
    

    Результат:

    id: enptrcle5q3d3ktd33hj
    folder_id: b1g9hv2loamqfnbul7d9
    created_at: "2021-11-03T09:25:03Z"
    name: canary-network
    default_security_group_id: enpbsnnop4akg7ng70ll
    

    Подробнее о команде 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: e9bnnssj8sc8mjhat9qk
      folder_id: b1g9hv2loamqfnbul7d9
      created_at: "2021-11-03T09:27:00Z"
      name: canary-subnet-ru-central1-a
      network_id: enptrcle5q3d3ktd33hj
      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: e2lghukd9iqo4haidjbt
      folder_id: b1g9hv2loamqfnbul7d9
      created_at: "2021-11-03T09:27:39Z"
      name: canary-subnet-ru-central1-b
      network_id: enptrcle5q3d3ktd33hj
      zone_id: ru-central1-b
      v4_cidr_blocks:
      - 10.2.0.0/16
      
    • В ru-central1-c:

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

      Результат:

      id: b0c3pte4o2kn4v12o05p
      folder_id: b1g9hv2loamqfnbul7d9
      created_at: "2021-11-03T09:28:08Z"
      name: canary-subnet-ru-central1-c
      network_id: enptrcle5q3d3ktd33hj
      zone_id: ru-central1-c
      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-c:

    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-c" {
      name           = "canary-subnet-ru-central1-c"
      zone           = "ru-central1-c"
      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-c в трех зонах доступности с помощью вызова gRPC API SubnetService/Create или метода REST API create.

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

Создайте два бакета canary-bucket-blue и canary-bucket-green:

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

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

  3. Создайте бакет canary-bucket-blue:

    1. Нажмите кнопку Создать бакет.
    2. Укажите Имя бакета: canary-bucket-blue.
    3. В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
    4. Нажмите кнопку Создать бакет.
  4. Таким же образом создайте бакет canary-bucket-green.

  1. Создайте бакет canary-bucket-blue:

    aws --endpoint-url https://storage.yandexcloud.net \
      s3 mb s3://canary-bucket-blue
    

    Результат:

    make_bucket: s3://canary-bucket-blue
    
  2. Включите публичный доступ к чтению объектов и их списка:

    aws --endpoint-url https://storage.yandexcloud.net \
      s3api put-bucket-acl \
      --bucket canary-bucket-blue \
      --acl public-read
    
  3. Аналогично создайте бакет canary-bucket-green и включите публичный доступ к нему.

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

    ...
    
    resource "yandex_storage_bucket" "canary-bucket-blue" {
      bucket = "canary-bucket-blue"
      acl    = "public-read"
    }
    
    resource "yandex_storage_bucket" "canary-bucket-green" {
      bucket = "canary-bucket-green"
      acl    = "public-read"
    }
    

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

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

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

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

      terraform plan
      

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

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

    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. В списке бакетов выберите canary-bucket-blue.
    4. Нажмите кнопку Загрузить и выберите для загрузки файл index.html версии 1.
    5. Таким же образом загрузите в бакет canary-bucket-green файл index.html версии 2.
    1. Загрузите в бакет canary-bucket-blue файл index.html версии 1:

      aws --endpoint-url https://storage.yandexcloud.net \
        s3 cp v1/index.html s3://canary-bucket-blue/index.html
      

      Результат:

      upload: v1/index.html to s3://canary-bucket-blue/index.html
      
    2. Загрузите в бакет canary-bucket-green файл index.html версии 2:

      aws --endpoint-url https://storage.yandexcloud.net \
        s3 cp v2/index.html s3://canary-bucket-green/index.html
      

      Результат:

      upload: v2/index.html to s3://canary-bucket-green/index.html
      
    1. Добавьте в конфигурационный файл параметры файлов v1/index.html и v2/index.html, загружаемых в бакеты canary-bucket-blue и canary-bucket-green соответственно:

      ...
      
      resource "yandex_storage_object" "canary-bucket-blue-index" {
        bucket = "canary-bucket-blue"
        key    = "index.html"
        source = "v1/index.html"
      }
      
      resource "yandex_storage_bucket" "canary-bucket-green-index" {
        bucket = "canary-bucket-green"
        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.

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

Примечание

Группы безопасности находятся на стадии Preview. Если они недоступны в вашей сети, для ресурсов будет разрешен весь входящий и исходящий трафик и дополнительной настройки не требуется.

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

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

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

  2. Перейдите на вкладку Группы безопасности.

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

  4. Укажите Имя группы: canary-sg.

  5. Выберите Сеть canary-network.

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

    Направление
    трафика
    Описание Диапазон
    портов
    Протокол Тип источника /
    назначения
    Источник /
    назначение
    Исходящий 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.
      • Группа безопасности — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
      • Проверки состояния балансировщика — правило, которое позволяет L7-балансировщику проверять состояние ВМ.
    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: enpd133ngcnrgc8475cc
folder_id: b1g9hv2loamqfnbul7d9
created_at: "2021-11-03T10:26:16Z"
name: canary-sg
network_id: enptrcle5q3d3ktd33hj
status: ACTIVE
rules:
- id: enpkgrpi2gsibdm6aotd
  direction: EGRESS
  protocol_name: ANY
  protocol_number: "-1"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enpgssij0i168jknb85r
  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: enp0bft67j9lrlnhdur5
  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: enpmorcimu65fk4oaanm
  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

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

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

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

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

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

Создайте HTTP-роутер с двумя виртуальными хостами: cdn.mywebsite.com и cdn-staging.mywebsite.com:

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

  2. В списке сервисов выберите Application Load Balancer и перейдите на вкладку HTTP-роутеры.

  3. Нажмите кнопку Создать HTTP-роутер.

  4. Введите имя роутера: canary-router.

  5. Создайте виртуальный хост 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.
  6. Аналогично создайте виртуальный хост canary-vh-staging со следующими параметрами:

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

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

    yc alb http-router create canary-router
    

    Результат:

    id: ds7qd0vj01djuu3c6f8q
    name: canary-router
    folder_id: b1g9hv2loamqfnbul7d9
    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: ds7pbm5fj2v09ptnn29p
    

    Подробнее о команде 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: ds765atleotaiui5pqeu
    
  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-балансировщик

Консоль управления
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-c — и включите передачу трафика в эти подсети.

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

    1. Введите имя обработчика: canary-listener.
    2. В блоке Настройки публичного IP-адреса включите передачу трафика.
    3. Укажите порт 80.
    4. В поле Назначить IP-адрес выберите Автоматически.
  8. В поле HTTP-роутер выберите canary-router.

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

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

    yc vpc network list-subnets canary-network
    

    Результат:

    +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+
    |          ID          |            NAME             |      FOLDER ID       |      NETWORK ID      | ROUTE TABLE ID |     ZONE      |     RANGE     |
    +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+
    | e9bnnssj8sc8mjhat9qk | canary-subnet-ru-central1-c | b1g9hv2loamqfnbul7d9 | enptrcle5q3d3ktd33hj |                | ru-central1-c | [10.1.0.0/16] |
    | e2lghukd9iqo4haidjbt | canary-subnet-ru-central1-b | b1g9hv2loamqfnbul7d9 | enptrcle5q3d3ktd33hj |                | ru-central1-b | [10.2.0.0/16] |
    | b0c3pte4o2kn4v12o05p | canary-subnet-ru-central1-a | b1g9hv2loamqfnbul7d9 | enptrcle5q3d3ktd33hj |                | 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: enpd133ngcnrgc8475cc
    

    Подробнее о команде 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-c,subnet-id=<идентификатор подсети canary-subnet-ru-central1-c>
    

    Результат:

    done (3m0s)
    id: ds77q7v39b4ubg8ta2n4
    name: canary-balancer
    folder_id: b1g9hv2loamqfnbul7d9
    status: ACTIVE
    region_id: ru-central1
    network_id: enptrcle5q3d3ktd33hj
    allocation_policy:
      locations:
      - zone_id: ru-central1-c
        subnet_id: b0c3pte4o2kn4v12o05p
      - zone_id: ru-central1-b
        subnet_id: e2lghukd9iqo4haidjbt
      - zone_id: ru-central1-a
        subnet_id: e9bnnssj8sc8mjhat9qk
    log_group_id: ckg23vr4dlkse3hvq0kc
    security_group_ids:
    - enpd133ngcnrgc8475cc
    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: ds77q7v39b4ubg8ta2n4
    name: canary-balancer
    folder_id: b1g9hv2loamqfnbul7d9
    status: ACTIVE
    region_id: ru-central1
    network_id: enptrcle5q3d3ktd33hj
    listeners:
    - name: canary-listener
      endpoints:
      - addresses:
        - external_ipv4_address:
            address: 84.252.133.149
        ports:
        - "80"
      http:
        handler:
          http_router_id: ds7qd0vj01djuu3c6f8q
    allocation_policy:
      locations:
      - zone_id: ru-central1-c
        subnet_id: b0c3pte4o2kn4v12o05p
      - zone_id: ru-central1-b
        subnet_id: e2lghukd9iqo4haidjbt
      - zone_id: ru-central1-a
        subnet_id: e9bnnssj8sc8mjhat9qk
    log_group_id: ckg23vr4dlkse3hvq0kc
    security_group_ids:
    - enpd133ngcnrgc8475cc
    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-c"
          subnet_id = ${yandex_vpc_subnet.canary-subnet-ru-central1-c.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-ресурс

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

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

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

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

    1. На вкладке CDN-ресурсы нажмите кнопку Создать ресурс.

    2. Задайте основные параметры CDN-ресурса следующим образом:

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

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

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

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

      • Доменные имена для раздачи контента — cdn.yandexcloud.example и cdn-staging.yandexcloud.example.

        Внимание

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

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

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

    4. Включите кеширование в CDN:

      1. В списке CDN-ресурсов выберите ресурс с основным доменным именем cdn.yandexcloud.example.
      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: b1geoelk7fldts6chmjq
    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 \
      --redirect-http-to-https \
      --forward-host-header
    

    Результат:

    id: bc843k2yinvq5fhgvuvc
    folder_id: b1ge1elk72ldts6chmjq
    cname: cdn.yandexcloud.example
    ...
    active: true
    ...
    ...
    secondary_hostnames:
    - cdn-staging.yandexcloud.example
    ...
    

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

  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
        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.

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

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

Настройте 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 
    

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

    Инструкция по настройке DNS-записей для Cloud DNS
    Консоль управления
    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: dns4rq4tadddth4h20qm
      folder_id: b1g9hv2loamqfnbul7d9
      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:

    Консоль управления
    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                  |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      | bc837xptmpkhbc7xwioa | 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

  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:

    Консоль управления
    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                  |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      | bc837xptmpkhbc7xwioa | 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:

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

    2. В списке сервисов выберите Application Load Balancer и перейдите на вкладку Группы бэкендов.

    3. В списке групп бэкендов выберите canary-bg-production.

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

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

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

    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: ds7l9puc18c9b40cd359
      name: canary-bg-production
      folder_id: b1g9hv2loamqfnbul7d9
      http:
        backends:
        - name: canary-backend-blue
          backend_weight: "80"
          storage_bucket:
            bucket: canary-bucket-blue
      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: ds7l9puc18c9b40cd359
      name: canary-bg-production
      folder_id: b1g9hv2loamqfnbul7d9
      http:
        backends:
        - name: canary-backend-green
          backend_weight: "20"
          storage_bucket:
            bucket: canary-bucket-green
      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. Отключите кеширование 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:

    Консоль управления
    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                  |
      +----------------------+--------------------------+--------------------------------+--------------------------------+--------+-------------------------------------------+
      | bc837xptmpkhbc7xwioa | 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:

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

    2. В списке сервисов выберите Application Load Balancer и перейдите на вкладку Группы бэкендов.

    3. В списке групп бэкендов выберите canary-bg-production.

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

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

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

    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: ds7l9puc18c9b40cd359
      name: canary-bg-production
      folder_id: b1g9hv2loamqfnbul7d9
      http:
        backends:
        - name: canary-backend-blue
          backend_weight: "100"
          storage_bucket:
            bucket: canary-bucket-blue
      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: ds7l9puc18c9b40cd359
      name: canary-bg-production
      folder_id: b1g9hv2loamqfnbul7d9
      http:
        backends:
        - name: canary-backend-green
          backend_weight: "0"
          storage_bucket:
            bucket: canary-bucket-green
      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. Удалите все объекты из бакетов canary-bucket-blue и canary-bucket-green.
  5. Удалите бакеты canary-bucket-blue и canary-bucket-green.
  6. Удалите подсети canary-subnet-ru-central1-a, canary-subnet-ru-central1-b и canary-subnet-ru-central1-c.
  7. Удалите сеть canary-network.

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

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Поддерживаемые инструменты
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте облачную сеть и подсети
  • Создайте бакеты в Object Storage
  • Загрузите файлы сервиса в бакеты
  • Создайте группу безопасности
  • Создайте группы бэкендов в Application Load Balancer
  • Создайте HTTP-роутер и виртуальные хосты
  • Создайте L7-балансировщик
  • Создайте CDN-ресурс
  • Настройте DNS для сервиса
  • Проверьте работу сервиса и переключение между версиями
  • Первая проверка
  • Канареечное развертывание версии 2
  • Сине-зеленое развертывание для отката к версии 1
  • Как удалить созданные ресурсы