Организация сине-зеленого и канареечного развертывания версий веб-сервиса
- Поддерживаемые инструменты
- Подготовьте облако к работе
- Создайте облачную сеть и подсети
- Создайте бакеты в Object Storage
- Загрузите файлы сервиса в бакеты
- Создайте группу безопасности
- Создайте группы бэкендов в Application Load Balancer
- Создайте HTTP-роутер и виртуальные хосты
- Создайте L7-балансировщик
- Создайте CDN-ресурс
- Настройте DNS для сервиса
- Проверьте работу сервиса и переключение между версиями
- Как удалить созданные ресурсы
Настройте архитектуру веб-сервиса, которая позволит переключаться между версиями по распространенным схемам развертывания: с помощью сине-зеленого развертывания (blue-green deployment) и канареечного развертывания (canary deployment).
Обе схемы используют пару бэкендов: «синий» и «зеленый». Сначала на одном из бэкендов (например, на «синем») размещается стабильная версия, доступная пользователям, а другой («зеленый») используется для тестирования следующей версии. Когда тестирование окончено, бэкенды меняются ролями:
- При сине-зеленом развертывании весь пользовательский трафик одномоментно перераспределяется с одного бэкенда на другой.
- При канареечном развертывании переключение происходит постепенно, начиная с части пользователей.
После этого основным становится «зеленый» бэкенд, а на «синем» бэкенде можно тестировать следующую версию сервиса. Также, пока на «синем» бэкенде остается предыдущая версия, на нее можно откатить сервис, снова поменяв бэкенды ролями.
В данном руководстве в качестве бэкендов используются бакеты Yandex Object Storage, а за переключение между ними отвечает L7-балансировщик Yandex Application Load Balancer. Запросы пользователей передаются балансировщику через сеть распространения контента Yandex Cloud CDN, чтобы сократить время доставки контента.
В качестве примеров будут использованы доменные имена cdn.yandexcloud.example
и cdn-staging.yandexcloud.example
.
Для выполнения шагов можно использовать различные поддерживаемые инструменты.
Чтобы построить архитектуру для сине-зеленого и канареечного развертывания:
- Подготовьте облако к работе.
- Создайте облачную сеть и подсети.
- Создайте бакеты в Object Storage.
- Загрузите файлы сервиса в бакеты.
- Создайте группы бэкендов в Application Load Balancer.
- Создайте HTTP-роутер и виртуальные хосты.
- Создайте L7-балансировщик.
- Создайте CDN-ресурс.
- Настройте DNS для сервиса.
- Проверьте работу сервиса и переключение между версиями.
Если созданные ресурсы вам больше не нужны, удалите их.
Поддерживаемые инструменты
Бо́льшую часть шагов можно выполнить с помощью любого из стандартных инструментов: консоли управления, интерфейсов командной строки (CLI) Yandex Cloud и AWS, Terraform и API Yandex Cloud. В каждом шаге перечислены поддерживаемые для него инструменты.
Некоторые инструменты поддерживаются не для всех шагов:
- Через CLI и Terraform сейчас нельзя:
- создать группу бэкендов в Application Load Balancer с бакетами в качестве бэкендов;
- получить доменное имя CDN-балансировщика при настройке DNS для сервиса;
- отключать и включать кеширование CDN-ресурса при проверке работы сервиса и переключения между версиями.
- Через API сейчас нельзя получить доменное имя CDN-балансировщика при настройке DNS для сервиса.
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах.
В качестве примера будет использоваться каталог с именем example-folder
.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за хранение данных в Object Storage, операции с ними и исходящий трафик (см. тарифы Object Storage);
- плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer);
- плата за исходящий трафик с CDN-серверов (см. тарифы Cloud CDN);
- плата за публичные DNS-запросы и DNS-зоны, если вы используете Yandex Cloud DNS (см. тарифы Cloud DNS).
Создайте облачную сеть и подсети
Все ресурсы будут относиться к одной облачной сети.
Чтобы создать сеть и подсети:
- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Virtual Private Cloud.
- Нажмите кнопку Создать сеть.
- Укажите Имя сети:
canary-network
. - В поле Дополнительно выберите опцию Создать подсети.
- Нажмите кнопку Создать сеть.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Создайте сеть
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. -
Создайте подсети во всех зонах доступности:
-
В
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.
-
Опишите в конфигурационном файле параметры сети
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.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
- Создайте сеть
canary-network
с помощью вызова gRPC API NetworkService/Create или метода REST API create. - Создайте подсети
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
:
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Object Storage.
-
Создайте бакет
canary-bucket-blue
:- Нажмите кнопку Создать бакет.
- Укажите Имя бакета:
canary-bucket-blue
. - В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
- Нажмите кнопку Создать бакет.
-
Таким же образом создайте бакет
canary-bucket-green
.
-
Создайте бакет
canary-bucket-blue
:aws --endpoint-url https://storage.yandexcloud.net \ s3 mb s3://canary-bucket-blue
Результат:
make_bucket: s3://canary-bucket-blue
-
Включите публичный доступ к чтению объектов и их списка:
aws --endpoint-url https://storage.yandexcloud.net \ s3api put-bucket-acl \ --bucket canary-bucket-blue \ --acl public-read
-
Аналогично создайте бакет
canary-bucket-green
и включите публичный доступ к нему.
-
Добавьте в конфигурационный файл параметры бакетов
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. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
Используйте метод REST API create.
Загрузите файлы сервиса в бакеты
-
Создайте два файла с одним и тем же названием
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>
-
Загрузите файлы в бакеты:
Консоль управленияAWS CLITerraformAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Object Storage.
- В списке бакетов выберите
canary-bucket-blue
. - Нажмите кнопку Загрузить и выберите для загрузки файл
index.html
версии 1. - Таким же образом загрузите в бакет
canary-bucket-green
файлindex.html
версии 2.
-
Загрузите в бакет
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
-
Загрузите в бакет
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
-
Добавьте в конфигурационный файл параметры файлов
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. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
Используйте метод REST API upload.
- В консоли управления выберите каталог
Создайте группу безопасности
Примечание
Группы безопасности находятся на стадии Preview. Если они недоступны в вашей сети, для ресурсов будет разрешен весь входящий и исходящий трафик и дополнительной настройки не требуется.
Группы безопасности содержат правила, которые разрешают L7-балансировщику получать входящий трафик и отправлять его на бакеты-бэкенды.
Чтобы создать группы безопасности:
-
В консоли управления выберите сервис Virtual Private Cloud.
-
Перейдите на вкладку Группы безопасности.
-
Нажмите кнопку Создать группу.
-
Укажите Имя группы:
canary-sg
. -
Выберите Сеть
canary-network
. -
В блоке Правила создайте следующие правила по инструкции под таблицей:
Направление
трафикаОписание Диапазон
портовПротокол Тип источника /
назначенияИсточник /
назначениеИсходящий 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 Проверки состояния балансировщика — -
Перейдите на вкладку Исходящий трафик или Входящий трафик.
-
Нажмите кнопку Добавить правило.
-
В открывшемся окне в поле Диапазон портов укажите один порт или диапазон портов, куда или откуда будет поступать трафик.
-
В поле Протокол укажите нужный протокол или оставьте Любой, чтобы разрешить передачу трафика по всем протоколам.
-
В поле Назначение или Источник выберите назначение правила:
- CIDR — правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.
- Группа безопасности — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
- Проверки состояния балансировщика — правило, которое позволяет L7-балансировщику проверять состояние ВМ.
-
Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.
-
-
Нажмите кнопку Сохранить.
Выполните следующую команду:
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.
-
Добавьте в конфигурационный файл параметры группы безопасности
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 см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
Используйте вызов gRPC API SecurityGroupService/Create или метод REST API create.
Чтобы добавить правило для проверок состояния балансировщика, используйте параметр loadbalancer_healthchecks
в поле SecurityGroupRuleSpec.target.predefined_target для gRPC API или в поле predefinedTarget для REST API.
Создайте группы бэкендов в Application Load Balancer
-
Создайте группу бэкендов
canary-bg-production
с бэкендамиcanary-backend-blue
иcanary-backend-green
:- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Application Load Balancer и перейдите на вкладку Группы бэкендов.
- Нажмите кнопку Создать группу бэкендов.
- Введите имя группы бэкендов:
canary-bg-production
. - В блоке Бэкенды нажмите кнопку Добавить. Задайте настройки бэкенда:
- Введите имя бэкенда:
canary-backend-blue
. - Задайте вес бэкенда:
100
. - Выберите тип бэкенда Бакет.
- В поле Бакет укажите название бакета:
canary-bucket-blue
.
- Введите имя бэкенда:
- Нажмите кнопку Добавить и аналогично задайте настройки бэкенда
canary-backend-green
с весом0
и бакетомcanary-bucket-green
. - Нажмите кнопку Создать.
- В консоли управления выберите каталог
-
Аналогично создайте группу бэкендов
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-роутер с двумя виртуальными хостами: cdn.mywebsite.com
и cdn-staging.mywebsite.com
:
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Application Load Balancer и перейдите на вкладку HTTP-роутеры.
-
Нажмите кнопку Создать HTTP-роутер.
-
Введите имя роутера:
canary-router
. -
Создайте виртуальный хост
canary-vh-production
:- В блоке Виртуальные хосты нажмите кнопку Добавить виртуальный хост.
- Введите имя хоста:
canary-vh-production
. - Укажите значение Authority:
cdn.yandexcloud.example
- Нажмите кнопку Добавить маршрут.
- Введите Имя:
canary-route-production
. - В поле Путь выберите Начинается с и укажите путь
/
. - В списке Методы HTTP выберите GET.
- В поле Действие оставьте Маршрутизация.
- В списке Группа бэкендов выберите
canary-bg-production
.
-
Аналогично создайте виртуальный хост
canary-vh-staging
со следующими параметрами:- Authority —
cdn-staging.yandexcloud.example
. - Имя маршрута —
canary-route-staging
. - Группа бэкендов —
canary-bg-staging
. - Остальные параметры — как у
canary-vh-production
.
- Authority —
-
Остальные настройки оставьте без изменений и нажмите кнопку Создать.
-
Создайте 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. -
Создайте виртуальный хост
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. -
Создайте маршрут
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. -
Создайте виртуальный хост
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
-
Создайте маршрут
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
-
Добавьте в конфигурационный файл параметры 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.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
- Создайте HTTP-роутер
canary-router
с помощью вызова gRPC API HttpRouterService/Create или метода REST API create. - Создайте виртуальные хосты
canary-vh-production
иcanary-vh-staging
, привязанные к роутеру, и их маршруты с помощью вызова gRPC API VirtualHostService/Create или метода REST API create.
Создайте L7-балансировщик
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Application Load Balancer и перейдите на вкладку Балансировщики.
-
Нажмите кнопку Создать L7-балансировщик.
-
Введите имя балансировщика:
canary-balancer
. -
В блоке Сетевые настройки:
- Выберите Сеть
canary-network
. - Выберите Группу безопасности
canary-sg
. Если этого поля нет, для балансировщика будет разрешен любой входящий и исходящий трафик.
- Выберите Сеть
-
В блоке Размещение выберите три подсети для узлов балансировщика —
canary-subnet-ru-central1-a
,canary-subnet-ru-central1-b
иcanary-subnet-ru-central1-c
— и включите передачу трафика в эти подсети. -
В блоке Обработчики нажмите кнопку Добавить обработчик. Задайте настройки обработчика:
- Введите имя обработчика:
canary-listener
. - В блоке Настройки публичного IP-адреса включите передачу трафика.
- Укажите порт
80
. - В поле Назначить IP-адрес выберите Автоматически.
- Введите имя обработчика:
-
В поле HTTP-роутер выберите
canary-router
. -
Нажмите кнопку Создать.
-
Получите идентификаторы подсетей сети
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. -
Получите идентификатор группы безопасности
canary-sg
:yc vpc security-group get canary-sg | grep "^id"
Результат:
id: enpd133ngcnrgc8475cc
Подробнее о команде
yc vpc security-group get
см. в справочнике CLI. -
Создайте балансировщик
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. -
Добавьте к балансировщику обработчик:
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.
-
Добавьте в конфигурационный файл параметры 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. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
Используйте вызов gRPC API LoadBalancerService/Create или метод REST API create.
Создайте CDN-ресурс
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Cloud CDN.
-
Если CDN-провайдер ещё не активирован, нажмите кнопку Подключиться к провайдеру.
-
Создайте CDN-ресурс:
-
На вкладке CDN-ресурсы нажмите кнопку Создать ресурс.
-
Задайте основные параметры 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 выберите Как у клиента.
-
-
Нажмите кнопку Создать.
-
Включите кеширование в CDN:
- В списке CDN-ресурсов выберите ресурс с основным доменным именем
cdn.yandexcloud.example
. - Перейдите на вкладку Кеширование.
- Нажмите кнопку Редактировать.
- Включите опцию Кеширование в CDN.
- Нажмите кнопку Сохранить.
- В списке CDN-ресурсов выберите ресурс с основным доменным именем
-
-
Если CDN-провайдер ещё не активирован, выполните команду:
yc cdn provider activate --folder-id <идентификатор каталога> --type gcore
-
Создайте группу источников
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. -
Скопируйте идентификатор группы источников
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.
-
Добавьте в конфигурационный файл параметры 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.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Используйте вызов gRPC API ResourceService/Create или метод REST API create.
Настройте DNS для сервиса
Доменные имена cdn.yandexcloud.example
и cdn-staging.yandexcloud.example
должны быть связаны с CDN-ресурсом с помощью записей DNS.
Чтобы настроить DNS:
-
Получите доменное имя CDN-балансировщика:
Консоль управления- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- В списке CDN-ресурсов выберите ресурс с основным доменным именем
cdn.yandexcloud.example
. - Из блока Настройки DNS внизу страницы скопируйте доменное имя вида
cl-....edgecdn.ru
.
- В консоли управления выберите каталог
-
На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.
-
Создайте или измените CNAME-записи для
cdn.yandexcloud.example
иcdn-staging.yandexcloud.example
таким образом, чтобы они указывали на скопированное доменное имя:cdn CNAME cl-....edgecdn.ru cdn-staging CNAME cl-....edgecdn.ru
Если вы пользуетесь Cloud DNS, настройте запись по следующей инструкции:
Инструкция по настройке DNS-записей для Cloud DNSКонсоль управленияCLITerraformAPI-
В консоли управления выберите сервис Cloud DNS.
-
Если у вас нет публичной зоны DNS, создайте ее:
- Нажмите кнопку Создать зону.
- В поле Зона укажите доменное имя сайта с точкой в конце:
yandexcloud.example.
- Выберите Тип зоны — Публичная.
- Укажите Имя зоны:
canary-dns-zone
. - Нажмите кнопку Создать.
-
Создайте в зоне CNAME-запись для
cdn.yandexcloud.example
:- В списке зон нажмите на зону
canary-dns-zone
. - Нажмите кнопку Создать запись.
- В поле Имя укажите
cdn
. - Выберите Тип записи — CNAME.
- В поле Значение вставьте скопированное значение вида
cl-....edgecdn.ru
. - Нажмите кнопку Создать.
- В списке зон нажмите на зону
-
Аналогично создайте в той же зоне CNAME-запись для
cdn-staging.yandexcloud.example
. В поле Имя укажитеcdn-staging
.
-
Если у вас нет публичной зоны 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. -
Создайте в зоне 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.
-
Добавьте в конфигурационный файл параметры 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.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
- Создайте DNS-зону
canary-dns-zone
с помощью вызова gRPC API DnsZoneService/Create или метода REST API create. - Добавьте в зону CNAME-записи
cdn
иcdn-staging
со скопированным значением видаcl-....edgecdn.ru
с помощью вызова gRPC API DnsZoneService/UpdateRecordSets или метода REST API updateRecordSets.
-
На обновление записей на DNS-серверах может потребоваться несколько часов. После этого вы сможете проверить работу сервиса.
Проверьте работу сервиса и переключение между версиями
Первая проверка
Проверьте, что доменному имени cdn.yandexcloud.example
соответствует версия 1, а cdn-staging.yandexcloud.example
— версия 2:
-
Откройте в браузере адрес
https://cdn.yandexcloud.example/index.html
. Вы должны увидеть страницу с указанием на версию 1. -
Удалите из кеша CDN-ресурса файл
index.html
:Консоль управленияCLIAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Контент.
- Нажмите кнопку Очистить кеш.
- Выберите тип очистки — Выборочная.
- Укажите путь к загруженному файлу:
/index.html
. - Нажмите кнопку Очистить кеш.
-
Получите идентификатор созданного 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. -
Удалите файл из кеша:
yc cdn cache purge \ --resource-id <идентификатор CDN-ресурса> \ --path "/index.html"
Подробнее о команде
yc cdn cache purge
см. в справочнике CLI.
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Удалите файл
index.html
из кеша с помощью вызова gRPC API CacheService/Purge или метода purge.
- В консоли управления выберите каталог
-
Откройте в браузере адрес
https://cdn-staging.yandexcloud.example/index.html
. Вы должны увидеть страницу с указанием на версию 2.
Канареечное развертывание версии 2
-
Отключите кеширование CDN-ресурса и удалите из кеша файл
index.html
:Консоль управленияAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Кеширование.
- Нажмите кнопку Редактировать.
- Отключите опцию Кеширование в CDN.
- Нажмите кнопку Сохранить.
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Отключите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.
- В консоли управления выберите каталог
-
Удалите из кеша файл
index.html
:Консоль управленияCLIAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Контент.
- Нажмите кнопку Очистить кеш.
- Выберите тип очистки — Выборочная.
- Укажите путь к загруженному файлу:
/index.html
. - Нажмите кнопку Очистить кеш.
-
Получите идентификатор созданного 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 cache purge \ --resource-id <идентификатор CDN-ресурса> \ --path "/index.html"
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Удалите файл
index.html
из кеша с помощью вызова gRPC API CacheService/Purge или метода purge.
- В консоли управления выберите каталог
-
Настройте группу бэкендов
canary-bg-production
так, чтобы 20% трафика доменного имениcdn.yandexcloud.example
приходилось на бэкендcanary-backend-green
с версией 2:Консоль управленияCLIAPI-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Application Load Balancer и перейдите на вкладку Группы бэкендов.
-
В списке групп бэкендов выберите
canary-bg-production
. -
Для бэкенда
canary-backend-blue
установите вес 80 вместо 100:- В блоке Бэкенды найдите бэкенд
canary-backend-blue
и нажмите кнопку - В поле Вес укажите
80
. - Нажмите кнопку Сохранить.
- В блоке Бэкенды найдите бэкенд
-
Аналогично для бэкенда
canary-backend-green
установите вес 20 вместо 0. -
Нажмите кнопку Сохранить.
-
Для бэкенда
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. -
Для бэкенда
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.
-
-
Несколько раз откройте в браузере адрес
https://cdn.yandexcloud.example/index.html
. Примерно в 20% случаев вы должны увидеть страницу с указанием на версию 2, в остальных случаях — на версию 1. -
Аналогично шагам 1–2 настройте и проверьте следующие распределения трафика между бэкендами:
- В группе бэкендов
canary-bg-production
— по 50% трафика на оба бэкенда. - В группе бэкендов
canary-bg-production
— весь трафик на бэкендcanary-backend-green
. - В группе бэкендов
canary-bg-staging
(доменное имяcdn-staging.yandexcloud.example
) — весь трафик на бэкендcanary-backend-blue
.
- В группе бэкендов
-
Снова включите кеширование:
Консоль управленияAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Кеширование
- Нажмите кнопку Редактировать.
- Включите опцию Кеширование в CDN.
- Нажмите кнопку Сохранить.
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Включите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.
- В консоли управления выберите каталог
Сине-зеленое развертывание для отката к версии 1
-
Отключите кеширование CDN-ресурса и удалите из кеша файл
index.html
:Консоль управленияAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Кеширование
- Нажмите кнопку Редактировать.
- Отключите опцию Кеширование в CDN.
- Нажмите кнопку Сохранить.
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Отключите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.
- В консоли управления выберите каталог
-
Удалите из кеша файл
index.html
:Консоль управленияCLIAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Контент.
- Нажмите кнопку Очистить кеш.
- Выберите тип очистки — Выборочная.
- Укажите путь к загруженному файлу:
/index.html
. - Нажмите кнопку Очистить кеш.
-
Получите идентификатор созданного 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 cache purge \ --resource-id <идентификатор CDN-ресурса> \ --path "/index.html"
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Удалите файл
index.html
из кеша с помощью вызова gRPC API CacheService/Purge или метода purge.
- В консоли управления выберите каталог
-
Перенаправьте весь трафик доменного имени
cdn.yandexcloud.example
обратно на бэкендcanary-backend-blue
с версией 1:Консоль управленияCLIAPI-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Application Load Balancer и перейдите на вкладку Группы бэкендов.
-
В списке групп бэкендов выберите
canary-bg-production
. -
Для бэкенда
canary-backend-blue
установите вес 100 вместо 0:- В блоке Бэкенды найдите бэкенд
canary-backend-blue
и нажмите кнопку - В поле Вес укажите
100
. - Нажмите кнопку Сохранить.
- В блоке Бэкенды найдите бэкенд
-
Аналогично для бэкенда
canary-bucket-green
установите вес 0 вместо 100. -
Нажмите кнопку Сохранить.
-
Для бэкенда
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"
-
Для бэкенда
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.
-
-
Несколько раз откройте в браузере адрес
https://cdn.yandexcloud.example/index.html
. Во всех случаях вы должны увидеть страницу с указанием на версию 1. -
Аналогично шагам 1–2 переключите весь трафик доменного имени
cdn-staging.yandexcloud.example
на бэкендcanary-backend-green
с версией 2 и проверьте переключение в браузере. -
Снова включите кеширование:
Консоль управленияAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- Выберите созданный CDN-ресурс (в списке ресурсов будет указано его основное доменное имя —
cdn.yandexcloud.example
). - Перейдите на вкладку Кеширование
- Нажмите кнопку Редактировать.
- Включите опцию Кеширование в CDN.
- Нажмите кнопку Сохранить.
- Получите идентификатор созданного CDN-ресурса с помощью вызова gRPC API ResourceService/List или метода REST API list.
- Включите кеширование с помощью вызова gRPC API ResourceService/Update или метода REST API list.
- В консоли управления выберите каталог
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы:
- Если вы настраивали CNAME-записи в Cloud DNS, удалите зону DNS
canary-dns-zone
. - Удалите CDN-ресурс с основным доменным именем
cdn.yandexcloud.example
. - Удалите L7-балансировщик
canary-balancer
. - Удалите все объекты из бакетов
canary-bucket-blue
иcanary-bucket-green
. - Удалите бакеты
canary-bucket-blue
иcanary-bucket-green
. - Удалите подсети
canary-subnet-ru-central1-a
,canary-subnet-ru-central1-b
иcanary-subnet-ru-central1-c
. - Удалите сеть
canary-network
.