Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Application Load Balancer
  • Начало работы
    • Все практические руководства
    • Организация виртуального хостинга
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Запись логов балансировщика в PostgreSQL
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием в Yandex Managed Service for Kubernetes
    • Настройка Gateway API в Yandex Managed Service for Kubernetes
    • Настройка L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Настройка логирования для L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Проверка состояния приложений в кластере Managed Service for Kubernetes с помощью L7-балансировщика Application Load Balancer
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Next-Generation Firewall
    • Создание L7-балансировщика Application Load Balancer с профилем безопасности Smart Web Security
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи L7-балансировщика
  • История изменений
  • Обучающие курсы

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

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

Интеграция L7-балансировщика с Cloud CDN и Object Storage

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Поддерживаемые инструменты
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Добавьте сертификат в Certificate Manager
  • Создайте облачную сеть и подсети
  • Создайте бакет в 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:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    yc vpc network create example-network
    

    Результат:

    id: enptrcle5q3d********
    folder_id: b1g9hv2loamq********
    created_at: "2022-04-04T05:25:03Z"
    name: example-network
    default_security_group_id: enpbsnnop4ak********
    

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

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

    • В 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: e9bnnssj8sc8********
      folder_id: b1g9hv2loamq********
      created_at: "2022-04-04T09:27:00Z"
      name: example-subnet-ru-central1-a
      network_id: enptrcle5q3d********
      zone_id: ru-central1-a
      v4_cidr_blocks:
      - 10.1.0.0/16
      
    • В ru-central1-b:

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

      Результат:

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

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

      Результат:

      id: b0c3pte4o2kn********
      folder_id: b1g9hv2loamq********
      created_at: "2022-04-04T09:28:08Z"
      name: example-subnet-ru-central1-d
      network_id: enptrcle5q3d********
      zone_id: ru-central1-d
      v4_cidr_blocks:
      - 10.3.0.0/16
      

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

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

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

    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-d" {
      name           = "example-subnet-ru-central1-d"
      zone           = "ru-central1-d"
      network_id     = "${yandex_vpc_network.example-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. Создайте сеть example-network с помощью вызова gRPC API NetworkService/Create или метода REST API create.
  2. Создайте подсети example-subnet-ru-central1-a, example-subnet-ru-central1-b и example-subnet-ru-central1-d в трех зонах доступности с помощью вызова gRPC API SubnetService/Create или метода REST API create.

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

Консоль управления
AWS CLI
Terraform
API
  1. В консоли управления выберите каталог example-folder.
  2. В списке сервисов выберите Object Storage.
  3. Справа сверху нажмите кнопку Создать бакет.
  4. В поле Имя укажите имя бакета.
  5. В полях Доступ на чтение объектов и Доступ к списку объектов выберите Публичный.
  6. Нажмите кнопку Создать бакет.
  1. Создайте бакет:

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

    Результат:

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

    aws --endpoint-url https://storage.yandexcloud.net \
      s3api put-bucket-acl \
      --bucket <имя_бакета> \
      --acl public-read
    

Примечание

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

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

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

    ...
    
    resource "yandex_storage_bucket" "<имя_бакета>" {
      access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
      secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
      bucket     = "<имя_бакета>"
      acl        = "public-read"
    }
    

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

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

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

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

      terraform plan
      

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

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

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

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

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

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

  1. Создайте файл index.html.

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

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

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

      Результат:

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

      ...
      
      resource "yandex_storage_object" "example-bucket-index" {
        bucket = "<имя_бакета>"
        key    = "index.html"
        source = "v1/index.html"
      }
      

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

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

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

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

        terraform plan
        

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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: enpd133ngcnr********
folder_id: b1g9hv2loamq********
created_at: "2022-04-04T10:26:16Z"
name: example-sg
network_id: enptrcle5q3d********
status: ACTIVE
rules:
- id: enpkgrpi2gsi********
  direction: EGRESS
  protocol_name: ANY
  protocol_number: "-1"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enpgssij0i16********
  direction: INGRESS
  ports:
    from_port: "80"
    to_port: "80"
  protocol_name: TCP
  protocol_number: "6"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enp0bft67j9l********
  direction: INGRESS
  ports:
    from_port: "443"
    to_port: "443"
  protocol_name: TCP
  protocol_number: "6"
  cidr_blocks:
    v4_cidr_blocks:
    - 0.0.0.0/0
- id: enpmorcimu65********
  direction: INGRESS
  ports:
    from_port: "30080"
    to_port: "30080"
  protocol_name: TCP
  protocol_number: "6"
  predefined_target: loadbalancer_healthchecks

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

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

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

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

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

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

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

      terraform plan
      

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

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

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

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

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

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

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

Консоль управления
API
  1. В консоли управления выберите каталог example-folder.
  2. В списке сервисов выберите Application Load Balancer.
  3. На панели слева выберите Группы бэкендов.
  4. Справа сверху нажмите кнопку Создать группу бэкендов.
  5. В поле Имя укажите example-bg.
  6. В поле Тип выберите тип группы бэкендов HTTP.
  7. В блоке Бэкенды нажмите кнопку Добавить и задайте настройки бэкенда:
    1. В поле Имя укажите example-backend.
    2. В поле Вес укажите 100.
    3. В поле Тип выберите тип бэкенда Бакет.
    4. В поле Бакет выберите бакет, созданный ранее.
  8. Нажмите кнопку Создать.

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

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

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

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

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

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

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

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

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

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

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

    yc alb http-router create example-router
    

    Результат:

    id: ds7qd0vj01dj********
    name: example-router
    folder_id: b1g9hv2loamq********
    created_at: "2022-04-04T10:31:41.027649223Z"
    

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

  2. Создайте виртуальный хост 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.

  3. Создайте маршрут 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: ds7pbm5fj2v0********
    

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

  1. Добавьте в конфигурационный файл параметры 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.

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

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

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

      terraform plan
      

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. В поле Имя укажите example-listener.
    2. В блоке Публичный IP-адрес:
      • В поле Порт укажите 80.
      • В поле Тип выберите Автоматически.
  8. В поле HTTP-роутер выберите example-router.

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

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

    yc vpc network list-subnets example-network
    

    Результат:

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

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

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

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

    Результат:

    id: enpd133ngcnr********
    

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

  3. Создайте балансировщик 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-d,subnet-id=<идентификатор_подсети_example-subnet-ru-central1-d>
    

    Результат:

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

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

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

    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: ds77q7v39b4u********
    name: example-balancer
    folder_id: b1g9hv2loamq********
    status: ACTIVE
    region_id: ru-central1
    network_id: enptrcle5q3d********
    listeners:
    - name: example-listener
      endpoints:
      - addresses:
        - external_ipv4_address:
            address: 84.252.133.149
        ports:
        - "80"
      http:
        handler:
          http_router_id: ds7qd0vj01dj********
    allocation_policy:
      locations:
      - zone_id: ru-central1-d
        subnet_id: b0c3pte4o2kn********
      - zone_id: ru-central1-b
        subnet_id: e2lghukd9iqo********
      - zone_id: ru-central1-a
        subnet_id: e9bnnssj8sc8********
    log_group_id: ckg23vr4dlks********
    security_group_ids:
    - enpd133ngcnr********
    created_at: "2022-04-04T10:55:49.134935148Z"
    

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

  1. Добавьте в конфигурационный файл параметры 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-d"
          subnet_id = ${yandex_vpc_subnet.example-subnet-ru-central1-d.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.

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

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

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

      terraform plan
      

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      • Доменное имя — cdn.yandexcloud.example.

        Внимание

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

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

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

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

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

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

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

    Результат:

    id: "90748"
    folder_id: b1geoelk7fld********
    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.

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

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

    Результат:

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

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

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

    yc cdn resource update <идентификатор_ресурса> --redirect-http-to-https
    
  1. Добавьте в конфигурационный файл параметры 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
        ssl_certificate {
          type                   = "certificate_manager"
          certificate_manager_id = "<идентификатор_сертификата>"
        }
        options {
            edge_cache_settings    = "345600"
            browser_cache_settings = "1800"
            ignore_cookie          = true
            ignore_query_params    = false
        }
    
    }
    

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

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

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

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

      terraform plan
      

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

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

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

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

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

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

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

    terraform plan
    

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

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

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

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

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

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

Доменное имя cdn.yandexcloud.example должно быть связано с CDN-ресурсом с помощью записей 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 CNAME cl-********.edgecdn.ru
    

    Примечание

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

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

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

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

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

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

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

      Результат:

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

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

    2. Создайте в зоне 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.

    1. Добавьте в конфигурационный файл параметры 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.

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

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

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

        terraform plan
        

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

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

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

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

    1. Создайте DNS-зону example-dns-zone с помощью вызова gRPC API DnsZoneService/Create или метода REST API create.
    2. Добавьте в зону 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>

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

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

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

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

Предыдущая
Terraform
Следующая
Сине-зеленое и канареечное развертывание версий сервиса
Проект Яндекса
© 2025 ООО «Яндекс.Облако»