Интеграция L7-балансировщика с Cloud CDN и Object Storage
- Поддерживаемые инструменты
- Подготовьте облако к работе
- Создайте облачную сеть и подсети
- Создайте бакет в Object Storage
- Загрузите файл сервиса в бакет
- Создайте группу безопасности
- Создайте группу бэкендов в Application Load Balancer
- Создайте HTTP-роутер и виртуальные хосты
- Создайте L7-балансировщик
- Создайте CDN-ресурс
- Настройте DNS для сервиса
- Проверьте работу сервиса
- Как удалить созданные ресурсы
В этом руководстве в качестве бэкенда L7-балансировщика Yandex Application Load Balancer используется бакет Yandex Object Storage. Запросы пользователей передаются балансировщику через сеть распространения контента Yandex Cloud CDN, чтобы сократить время доставки контента.
В качестве примера будет использовано доменное имя cdn.yandexcloud.example
.
Для выполнения шагов можно использовать различные поддерживаемые инструменты.
Чтобы построить архитектуру для интеграции L7-балансировщика с CDN и Object Storage:
- Подготовьте облако к работе.
- Создайте облачную сеть и подсети.
- Создайте бакет в Object Storage.
- Загрузите файл сервиса в бакет.
- Создайте группу безопасности.
- Создайте группу бэкендов в Application Load Balancer.
- Создайте HTTP-роутер и виртуальный хост.
- Создайте L7-балансировщик.
- Создайте CDN-ресурс.
- Настройте DNS для сервиса.
- Проверьте работу сервиса.
Если созданные ресурсы вам больше не нужны, удалите их.
Поддерживаемые инструменты
Бо́льшую часть шагов можно выполнить с помощью любого из стандартных инструментов: консоли управления, интерфейсов командной строки (CLI) Yandex Cloud и AWS, Terraform и API Yandex Cloud. В каждом шаге перечислены поддерживаемые для него инструменты.
Некоторые инструменты поддерживаются не для всех шагов:
- Через CLI и Terraform сейчас нельзя:
- создать группу бэкендов в Application Load Balancer с бакетами в качестве бэкендов;
- получить доменное имя CDN-балансировщика при настройке DNS для сервиса;
- Через 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.
- Нажмите кнопку Создать сеть.
- Укажите Имя сети:
example-network
. - В поле Дополнительно выберите опцию Создать подсети.
- Нажмите кнопку Создать сеть.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Создайте сеть
example-network
:yc vpc network create example-network
Результат:
id: enptrcle5q3d3ktd33hj folder_id: b1g9hv2loamqfnbul7d9 created_at: "2022-04-04T05:25:03Z" name: example-network default_security_group_id: enpbsnnop4akg7ng70ll
Подробнее о команде
yc vpc network create
см. в справочнике CLI. -
Создайте подсети во всех зонах доступности:
-
В
ru-central1-a
:yc vpc subnet create example-subnet-ru-central1-a \ --zone ru-central1-a \ --network-name example-network \ --range 10.1.0.0/16
Результат:
id: e9bnnssj8sc8mjhat9qk folder_id: b1g9hv2loamqfnbul7d9 created_at: "2022-04-04T09:27:00Z" name: example-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 example-subnet-ru-central1-b \ --zone ru-central1-b \ --network-name example-network \ --range 10.2.0.0/16
Результат:
id: e2lghukd9iqo4haidjbt folder_id: b1g9hv2loamqfnbul7d9 created_at: "2022-04-04T09:27:39Z" name: example-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 example-subnet-ru-central1-c \ --zone ru-central1-c \ --network-name example-network \ --range 10.3.0.0/16
Результат:
id: b0c3pte4o2kn4v12o05p folder_id: b1g9hv2loamqfnbul7d9 created_at: "2022-04-04T09:28:08Z" name: example-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.
-
Опишите в конфигурационном файле параметры сети
example-network
и ее подсетейexample-subnet-ru-central1-a
,example-subnet-ru-central1-b
иexample-subnet-ru-central1-c
:resource "yandex_vpc_network" "example-network" { name = "example-network" } resource "yandex_vpc_subnet" "example-subnet-a" { name = "example-subnet-ru-central1-a" zone = "ru-central1-a" network_id = "${yandex_vpc_network.example-network.id}" v4_cidr_blocks = ["10.1.0.0/16"] } resource "yandex_vpc_subnet" "example-subnet-b" { name = "example-subnet-ru-central1-b" zone = "ru-central1-b" network_id = "${yandex_vpc_network.example-network.id}" v4_cidr_blocks = ["10.2.0.0/16"] } resource "yandex_vpc_subnet" "example-subnet-c" { name = "example-subnet-ru-central1-c" zone = "ru-central1-c" network_id = "${yandex_vpc_network.example-network.id}" v4_cidr_blocks = ["10.3.0.0/16"] }
Подробнее см. в описаниях ресурсов yandex_vpc_network и yandex_vpc_subnet в документации провайдера Terraform.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
- Создайте сеть
example-network
с помощью вызова gRPC API NetworkService/Create или метода REST API create. - Создайте подсети
example-subnet-ru-central1-a
,example-subnet-ru-central1-b
иexample-subnet-ru-central1-c
в трех зонах доступности с помощью вызова gRPC API SubnetService/Create или метода REST API create.
Создайте бакет в Object Storage
Создайте бакет example-bucket
:
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Object Storage.
-
Создайте бакет
example-bucket
:- Нажмите кнопку Создать бакет.
- Укажите Имя бакета:
example-bucket
. - В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
- Нажмите кнопку Создать бакет.
-
Создайте бакет
example-bucket
:aws --endpoint-url https://storage.yandexcloud.net \ s3 mb s3://example-bucket
Результат:
make_bucket: s3://example-bucket
-
Включите публичный доступ к чтению объектов и их списка:
aws --endpoint-url https://storage.yandexcloud.net \ s3api put-bucket-acl \ --bucket example-bucket \ --acl public-read
-
Добавьте в конфигурационный файл параметры бакета
example-bucket
:... resource "yandex_storage_bucket" "example-bucket" { bucket = "example-bucket" acl = "public-read" }
Подробнее о ресурсе
yandex_storage_bucket
см. в документации провайдера Terraform. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
Используйте метод REST API create.
Загрузите файл сервиса в бакет
-
Создайте файл
index.html
.Пример файла index.html<!DOCTYPE html> <html> <head> <title>My service</title> </head> <body> <p>The service is working</p> </body> </html>
-
Загрузите файл в бакет:
Консоль управленияAWS CLITerraformAPI- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Object Storage.
- В списке бакетов выберите
example-bucket
. - Нажмите кнопку Загрузить и выберите для загрузки файл
index.html
.
-
Загрузите в бакет
example-bucket
файлindex.html
:aws --endpoint-url https://storage.yandexcloud.net \ s3 cp v1/index.html s3://example-bucket/index.html
Результат:
upload: v1/index.html to s3://example-bucket/index.html
-
Добавьте в конфигурационный файл параметры файла
v1/index.html
, загружаемого в бакетexample-bucket
:... resource "yandex_storage_object" "example-bucket-index" { bucket = "example-bucket" key = "index.html" source = "v1/index.html" }
Подробнее о ресурсе
yandex_storage_object
см. в документации провайдера Terraform. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
Используйте метод REST API upload.
- В консоли управления выберите каталог
Создайте группу безопасности
Примечание
Группы безопасности находятся на стадии Preview. Если они недоступны в вашей сети, для ресурсов будет разрешен весь входящий и исходящий трафик и дополнительной настройки не требуется.
Группы безопасности содержат правила, которые разрешают L7-балансировщику получать входящий трафик и отправлять его на бакеты-бэкенды.
Чтобы создать группы безопасности:
-
В консоли управления выберите сервис Virtual Private Cloud.
-
Перейдите на вкладку Группы безопасности.
-
Нажмите кнопку Создать группу.
-
Укажите Имя группы:
example-sg
. -
Выберите Сеть
example-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.
- Группа безопасности — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
- Проверки состояния балансировщика — правило, которое позволяет балансировщику проверять состояние ВМ.
-
Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.
-
-
Нажмите кнопку Сохранить.
Выполните следующую команду:
yc vpc security-group create example-sg \
--network-name example-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: "2022-04-04T10:26:16Z"
name: example-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.
-
Добавьте в конфигурационный файл параметры группы безопасности
example-sg
:resource "yandex_vpc_security_group" "example-sg" { name = "example-sg" network_id = yandex_vpc_network.example-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
-
Создайте группу бэкендов
example-bg
с бэкендомexample-backend
:- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Application Load Balancer и перейдите на вкладку Группы бэкендов.
- Нажмите кнопку Создать группу бэкендов.
- Введите имя группы бэкендов:
example-bg
. - Выберите тип группы бэкендов HTTP.
- В блоке Бэкенды нажмите кнопку Добавить. Задайте настройки бэкенда:
- Введите имя бэкенда:
example-backend
. - Задайте вес бэкенда:
100
. - Выберите тип бэкенда Бакет.
- В поле Бакет укажите название бакета:
example-bucket
.
- Введите имя бэкенда:
- Нажмите кнопку Создать.
- В консоли управления выберите каталог
-
Если вы будете выполнять следующие шаги с помощью Terraform, скопируйте идентификатор группы бэкендов
example-bg
со вкладки Группы бэкендов.
Используйте вызов gRPC API BackendGroupService/Create или метод REST API create.
Создайте HTTP-роутер и виртуальные хосты
Создайте HTTP-роутер с виртуальным хостом: cdn.mywebsite.com
:
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Application Load Balancer и перейдите на вкладку HTTP-роутеры.
-
Нажмите кнопку Создать HTTP-роутер.
-
Введите имя роутера:
example-router
. -
Создайте виртуальный хост
example-vh
:- В блоке Виртуальные хосты нажмите кнопку Добавить виртуальный хост.
- Введите имя хоста:
example-vh
. - Укажите значение Authority:
cdn.yandexcloud.example
- Нажмите кнопку Добавить маршрут.
- Введите Имя:
example-route
. - В поле Путь выберите Начинается с и укажите путь
/
. - В списке Методы HTTP выберите GET.
- В поле Действие оставьте Маршрутизация.
- В списке Группа бэкендов выберите
example-bg
.
-
Остальные настройки оставьте без изменений и нажмите кнопку Создать.
-
Создайте HTTP-роутер
example-router
:yc alb http-router create example-router
Результат:
id: ds7qd0vj01djuu3c6f8q name: example-router folder_id: b1g9hv2loamqfnbul7d9 created_at: "2022-04-04T10:31:41.027649223Z"
Подробнее о команде
yc alb http-router create
см. в справочнике CLI. -
Создайте виртуальный хост
example-vh
:yc alb virtual-host create example-vh \ --http-router-name example-router \ --authority cdn.yandexcloud.example
Результат:
done (1s) name: example-vh authority: - cdn.yandexcloud.example
Подробнее о команде
yc alb virtual-host create
см. в справочнике CLI. -
Создайте маршрут
example-route
в виртуальном хостеexample-vh
:yc alb virtual-host append-http-route example-route \ --http-router-name example-router \ --virtual-host-name example-vh \ --prefix-path-match "/" \ --backend-group-name example-bg
Результат:
done (1s) name: example-vh authority: - cdn.yandexcloud.example routes: - name: example-route http: match: path: prefix_match: / route: backend_group_id: ds7pbm5fj2v09ptnn29p
Подробнее о команде
yc alb virtual-host append-http-route
см. в справочнике CLI.
-
Добавьте в конфигурационный файл параметры HTTP-роутера
example-router
, его виртуальных хостов и маршрутов:... resource "yandex_alb_http_router" "example-router" { name = "example-router" } resource "yandex_alb_virtual_host" "example-vh" { name = "example-vh" http_router_id = ${yandex_alb_http_router.example-router.id} authority = "cdn.yandexcloud.example" route { name = "example-route" http_route { http_route_action { backend_group_id = "<идентификатор группы бэкендов example-bg>" } } } }
Подробнее см. в описаниях ресурсов yandex_alb_http_router и yandex_alb_virtual_host в документации провайдера Terraform.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
- Создайте HTTP-роутер
example-router
с помощью вызова gRPC API HttpRouterService/Create или метода REST API create. - Создайте виртуальный хост
example-vh
, привязанный к роутеру, и его маршрут с помощью вызова gRPC API VirtualHostService/Create или метода REST API create.
Создайте L7-балансировщик
-
В консоли управления выберите каталог
example-folder
. -
В списке сервисов выберите Application Load Balancer и перейдите на вкладку Балансировщики.
-
Нажмите кнопку Создать L7-балансировщик.
-
Введите имя балансировщика:
example-balancer
. -
В блоке Сетевые настройки:
- Выберите Сеть
example-network
. - Выберите Группу безопасности
example-sg
. Если этого поля нет, для балансировщика будет разрешен любой входящий и исходящий трафик.
- Выберите Сеть
-
В блоке Размещение выберите три подсети для узлов балансировщика —
example-subnet-ru-central1-a
,example-subnet-ru-central1-b
иexample-subnet-ru-central1-c
— и включите передачу трафика в эти подсети. -
В блоке Обработчики нажмите кнопку Добавить обработчик. Задайте настройки обработчика:
- Введите имя обработчика:
example-listener
. - В блоке Настройки публичного IP-адреса включите передачу трафика.
- Укажите порт
80
. - В поле Назначить IP-адрес выберите Автоматически.
- Введите имя обработчика:
-
В поле HTTP-роутер выберите
example-router
. -
Нажмите кнопку Создать.
-
Получите идентификаторы подсетей сети
example-network
:yc vpc network list-subnets example-network
Результат:
+----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+ | ID | NAME | FOLDER ID | NETWORK ID | ROUTE TABLE ID | ZONE | RANGE | +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+ | e9bnnssj8sc8mjhat9qk | example-subnet-ru-central1-c | b1g9hv2loamqfnbul7d9 | enptrcle5q3d3ktd33hj | | ru-central1-c | [10.1.0.0/16] | | e2lghukd9iqo4haidjbt | example-subnet-ru-central1-b | b1g9hv2loamqfnbul7d9 | enptrcle5q3d3ktd33hj | | ru-central1-b | [10.2.0.0/16] | | b0c3pte4o2kn4v12o05p | example-subnet-ru-central1-a | b1g9hv2loamqfnbul7d9 | enptrcle5q3d3ktd33hj | | ru-central1-a | [10.3.0.0/16] | +----------------------+-----------------------------+----------------------+----------------------+----------------+---------------+---------------+
Подробнее о команде
yc vpc network list-subnets
см. в справочнике CLI. -
Получите идентификатор группы безопасности
example-sg
:yc vpc security-group get example-sg | grep "^id"
Результат:
id: enpd133ngcnrgc8475cc
Подробнее о команде
yc vpc security-group get
см. в справочнике CLI. -
Создайте балансировщик
example-balancer
:yc alb load-balancer create example-balancer \ --network-name example-network \ --security-group-id <идентификатор группы безопасности example-sg> \ --location zone=ru-central1-a,subnet-id=<идентификатор подсети example-subnet-ru-central1-a> \ --location zone=ru-central1-b,subnet-id=<идентификатор подсети example-subnet-ru-central1-b> \ --location zone=ru-central1-c,subnet-id=<идентификатор подсети example-subnet-ru-central1-c>
Результат:
done (3m0s) id: ds77q7v39b4ubg8ta2n4 name: example-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: "2022-04-04T10:55:49.134935148Z"
Подробнее о команде
yc alb load-balancer create
см. в справочнике CLI. -
Добавьте к балансировщику обработчик:
yc alb load-balancer add-listener \ --name example-balancer \ --listener-name example-listener \ --external-ipv4-endpoint port=80 \ --http-router-name example-router
Результат:
done (43s) id: ds77q7v39b4ubg8ta2n4 name: example-balancer folder_id: b1g9hv2loamqfnbul7d9 status: ACTIVE region_id: ru-central1 network_id: enptrcle5q3d3ktd33hj listeners: - name: example-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: "2022-04-04T10:55:49.134935148Z"
Подробнее о команде
yc alb load-balancer add-listener
см. в справочнике CLI.
-
Добавьте в конфигурационный файл параметры L7-балансировщика
example-balancer
:... resource "yandex_alb_load_balancer" "example-balancer" { name = "example-balancer" network_id = ${yandex_vpc_network.example-network.id} security_group_ids = [ ${yandex_vpc_security_group.example-sg.id} ] allocation_policy { location { zone_id = "ru-central1-a" subnet_id = ${yandex_vpc_subnet.example-subnet-ru-central1-a.id} } location { zone_id = "ru-central1-b" subnet_id = ${yandex_vpc_subnet.example-subnet-ru-central1-b.id} } location { zone_id = "ru-central1-c" subnet_id = ${yandex_vpc_subnet.example-subnet-ru-central1-c.id} } } listener { name = "example-listener" endpoint { address { external_ipv4_address { } } ports = [80] } http { handler { http_router_id = ${yandex_alb_http_router.example-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-балансировщик —
example-balancer
. -
IP-адрес — IP-адрес, назначенный балансировщику (будет единственным в списке).
-
Доменные имена для раздачи контента —
cdn.yandexcloud.example
.Внимание
Доменное имя
cdn.yandexcloud.example
станет основным и его будет невозможно изменить после создания CDN-ресурса. -
В блоке Дополнительно:
- В поле Протокол для источников выберите HTTP.
- В поле Переадресация клиентов выберите С HTTP на HTTPS.
- Выберите опцию Доступ конечных пользователей к контенту.
- В поле Тип сертификата выберите Let's Encrypt®, чтобы автоматически выпустить сертификат для доменного имени
cdn.yandexcloud.example
после создания CDN-ресурса. - В поле Заголовок Host выберите Как у клиента.
-
-
Нажмите кнопку Создать.
-
-
Если CDN-провайдер ещё не активирован, выполните команду:
yc cdn provider activate --folder-id <идентификатор каталога> --type gcore
-
Создайте группу источников
example-origin-group
, указав IP-адрес балансировщика:yc cdn origin-group create --name "example-origin-group" \ --origin source=<IP-адрес балансировщика>:80,enabled=true
Результат:
id: "90748" folder_id: b1geoelk7fldts6chmjq name: example-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 <идентификатор группы источников> \ --origin-protocol http \ --redirect-http-to-https \ --forward-host-header
Результат:
id: bc843k2yinvq5fhgvuvc folder_id: b1ge1elk72ldts6chmjq cname: cdn.yandexcloud.example ... active: true ... ... ...
Подробнее о команде
yc cdn resource create
см. в справочнике CLI.
-
Добавьте в конфигурационный файл параметры CDN-ресурсов:
... resource "yandex_cdn_origin_group" "my_group" { name = "example-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" 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-ресурсом с помощью записей DNS.
Чтобы настроить DNS:
-
Получите доменное имя CDN-балансировщика:
Консоль управления- В консоли управления выберите каталог
example-folder
. - В списке сервисов выберите Cloud CDN.
- В списке CDN-ресурсов выберите ресурс с основным доменным именем
cdn.yandexcloud.example
. - Из блока Настройки DNS внизу страницы скопируйте доменное имя вида
cl-....edgecdn.ru
.
- В консоли управления выберите каталог
-
На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.
-
Создайте или измените CNAME-запись для
cdn.yandexcloud.example
так, чтобы она указывала на скопированное доменное имя:cdn CNAME cl-....edgecdn.ru
Если вы пользуетесь Cloud DNS, настройте запись по следующей инструкции:
Инструкция по настройке DNS-записей для Cloud DNSКонсоль управленияCLITerraformAPI-
В консоли управления выберите сервис Cloud DNS.
-
Если у вас нет публичной зоны DNS, создайте ее:
- Нажмите кнопку Создать зону.
- В поле Зона укажите доменное имя сайта с точкой в конце:
yandexcloud.example.
- Выберите Тип зоны — Публичная.
- Укажите Имя зоны:
example-dns-zone
. - Нажмите кнопку Создать.
-
Создайте в зоне CNAME-запись для
cdn.yandexcloud.example
:- В списке зон нажмите на зону
example-dns-zone
. - Нажмите кнопку Создать запись.
- В поле Имя укажите
cdn
. - Выберите Тип записи — CNAME.
- В поле Значение вставьте скопированное значение вида
cl-....edgecdn.ru
. - Нажмите кнопку Создать.
- В списке зон нажмите на зону
-
Если у вас нет публичной зоны DNS, создайте ее:
yc dns zone create \ --name example-dns-zone \ --zone yandexcloud.example. \ --public-visibility
Результат:
id: dns4rq4tadddth4h20qm folder_id: b1g9hv2loamqfnbul7d9 created_at: "2022-04-04T11:03:28.847Z" name: example-dns-zone zone: yandexcloud.example. public_visibility: {}
Подробнее о команде
yc dns zone create
см. в справочнике CLI. -
Создайте в зоне CNAME-запись для
cdn.yandexcloud.example
со скопированным значением видаcl-....edgecdn.ru
:yc dns zone add-records \ --name example-dns-zone \ --record "cdn CNAME cl-....edgecdn.ru" \
Подробнее о команде
yc dns zone add-records
см. в справочнике CLI.
-
Добавьте в конфигурационный файл параметры DNS-зоны
example-dns-zone
и CNAME-записей в ней:... resource "yandex_dns_zone" "example-dns-zone" { zone = "yandexcloud.example." name = "example-dns-zone" public = true } resource "yandex_dns_recordset" "example-recordset" { zone_id = ${yandex_dns_zone.example-dns-zone.id} name = "cdn" type = "CNAME" data = ["<скопированное значение вида cl-....edgecdn.ru>"] }
Подробнее см. в описаниях ресурсов yandex_dns_zone и yandex_dns_recordset в документации провайдера Terraform.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов.
-
- Создайте DNS-зону
example-dns-zone
с помощью вызова gRPC API DnsZoneService/Create или метода REST API create. - Добавьте в зону CNAME-запись
cdn
со скопированным значением видаcl-....edgecdn.ru
с помощью вызова gRPC API DnsZoneService/UpdateRecordSets или метода REST API updateRecordSets.
-
На обновление записей на DNS-серверах может потребоваться несколько часов. После этого вы сможете проверить работу сервиса.
Проверьте работу сервиса
Чтобы проверить работу сервиса, откройте в браузере адрес https://cdn.yandexcloud.example/index.html
. Вы должны увидеть страницу с таким содержанием:
<!DOCTYPE html>
<html>
<head>
<title>My service</title>
</head>
<body>
<p>The service is working</p>
</body>
</html>
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы:
- Если вы настраивали CNAME-записи в Cloud DNS, удалите зону DNS
example-dns-zone
. - Удалите CDN-ресурс с основным доменным именем
cdn.yandexcloud.example
. - Удалите L7-балансировщик
example-balancer
. - Удалите все объекты из бакета
example-bucket
. - Удалите бакет
example-bucket
. - Удалите подсети
example-subnet-ru-central1-a
,example-subnet-ru-central1-b
иexample-subnet-ru-central1-c
. - Удалите сеть
example-network
.