Yandex Cloud
Поиск
Связаться с намиПопробовать бесплатно
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Истории успеха
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Анализ поресурсной детализации расходов с помощью Object Storage
    • Получение сведений для запроса на включение ресурса в белый список Минцифры
      • Настройка отказоустойчивой архитектуры в Yandex Cloud
        • Обзор
        • Консоль управления, CLI и API
        • Terraform
      • Автомасштабирование группы ВМ для обработки сообщений из очереди Message Queue
      • Обновление группы ВМ под нагрузкой
      • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
      • Развертывание отказоустойчивой архитектуры с прерываемыми ВМ
      • Создание триггеров, которые вызывают функции для остановки ВМ и отправки уведомлений в Telegram

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Разверните инфраструктуру для интеграции L7-балансировщика с Cloud CDN и Object Storage
  • Протестируйте работу решения
  • Как удалить созданные ресурсы
  1. Базовая инфраструктура
  2. Отказоустойчивость и масштабирование
  3. Интеграция L7-балансировщика с Cloud CDN и Object Storage
  4. Terraform

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

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 13 февраля 2026 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Разверните инфраструктуру для интеграции L7-балансировщика с Cloud CDN и Object Storage
  • Протестируйте работу решения
  • Как удалить созданные ресурсы

Примечание

Для реализации решения вам понадобится домен. В качестве примера будет использовано доменное имя example.com.

Чтобы создать инфраструктуру для интеграции L7-балансировщика с Yandex Cloud CDN и Yandex Object Storage с помощью Terraform:

  1. Подготовьте облако к работе.
  2. Разверните инфраструктуру для интеграции L7-балансировщика с Cloud CDN и Object Storage.
  3. Протестируйте работу решения.

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

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

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

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

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

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

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

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

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

Разверните инфраструктуру для интеграции L7-балансировщика с Cloud CDN и Object StorageРазверните инфраструктуру для интеграции L7-балансировщика с Cloud CDN и Object Storage

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

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

Для создания инфраструктуры с помощью Terraform:

  1. Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).

  2. Подготовьте файлы с описанием инфраструктуры:

    Готовая конфигурация
    Вручную
    1. Клонируйте репозиторий с конфигурационными файлами.

      git clone https://github.com/yandex-cloud-examples/cdn-storage-integration-config
      
    2. Перейдите в папку с репозиторием. В ней должны появиться следующие файлы:

      • cdn-storage-integration-config.tf — файл конфигурации создаваемой инфраструктуры.
      • cdn-storage-integration.auto.tfvars — файл со значениями пользовательских переменных.
      • index.html — тестовый файл сервиса, используемый при проверке работоспособности решения.
    1. Создайте папку для конфигурационных файлов и в этой папке:

      1. Создайте файл index.html со следующим содержимым:

        <!DOCTYPE html>
        <html>
          <head>
            <title>My service</title>
          </head>
          <body>
            <p>The service is working</p>
          </body>
        </html>
        
      2. Создайте конфигурационный файл cdn-storage-integration-config.tf:

        cdn-storage-integration-config.tf
        # Объявление переменных
        
        variable "folder_id" {
          type = string
        }
        
        variable "domain_name" {
          type = string
        }
        
        variable "bucket_name" {
          type = string
        }
        
        variable "index_file_path" {
          type = string
        }
        
        locals {
          network_name     = "example-network"
          subneta_name     = "example-subnet-ru-central1-a"
          subnetb_name     = "example-subnet-ru-central1-b"
          subnetd_name     = "example-subnet-ru-central1-d"
          sg_name          = "example-sg"
          object_key       = "index.html"
          domain_zone_name = "my-domain-zone"
          cert_name        = "mymanagedcert"
          origin_gp_name   = "example-origin-group"
          bg_name          = "example-bg"
          backend_name     = "example-backend"
          router_name      = "example-router"
          vh_name          = "example-vh"
          route_name       = "example-route"   
          alb_name         = "example-balancer"
          listener_name    = "example-listener"
        }
        
        # Настройка провайдера
        
        terraform {
          required_providers {
            yandex = {
              source = "yandex-cloud/yandex"
            }
          }
          required_version = ">= 0.13"
        }
        
        provider "yandex" {
          folder_id = var.folder_id
        }
        
        # Создание публичной DNS-зоны
        
        resource "yandex_dns_zone" "my-domain-zone" {
          name    = local.domain_zone_name
          zone    = "${var.domain_name}."
          public  = true
        }
        
        # Добавление сертификата Let's Encrypt
        
        resource "yandex_cm_certificate" "le-certificate" {
          name    = local.cert_name
          domains = [var.domain_name]
        
          managed {
          challenge_type = "DNS_CNAME"
          challenge_count = 1
          }
        }
        
        # Создание CNAME-записи для валидации доменов при выпуске сертификата
        
        resource "yandex_dns_recordset" "validation-record" {
          count   = yandex_cm_certificate.le-certificate.managed[0].challenge_count
          zone_id = yandex_dns_zone.my-domain-zone.id
          name    = yandex_cm_certificate.le-certificate.challenges[count.index].dns_name
          type    = yandex_cm_certificate.le-certificate.challenges[count.index].dns_type
          ttl     = 600
          data    = [yandex_cm_certificate.le-certificate.challenges[count.index].dns_value]
        }
        
        # Ожидание валидации доменов и выпуска сертификата Let's Encrypt
        
        data "yandex_cm_certificate" "example-com" {
          depends_on      = [yandex_dns_recordset.validation-record]
          certificate_id  = yandex_cm_certificate.le-certificate.id
          wait_validation = true
        }
        
        # Создание сети
        
        resource "yandex_vpc_network" "my-network" {
          name = local.network_name
        }
        
        # Создание подсетей
        
        resource "yandex_vpc_subnet" "my-subnet-a" {
          name           = local.subneta_name
          zone           = "ru-central1-a"
          network_id     = yandex_vpc_network.my-network.id
          v4_cidr_blocks = ["192.168.1.0/24"]
        }
        
        resource "yandex_vpc_subnet" "my-subnet-b" {
          name           = local.subnetb_name
          zone           = "ru-central1-b"
          network_id     = yandex_vpc_network.my-network.id
          v4_cidr_blocks = ["192.168.2.0/24"]
        }
        
        resource "yandex_vpc_subnet" "my-subnet-d" {
          name           = local.subnetd_name
          zone           = "ru-central1-d"
          network_id     = yandex_vpc_network.my-network.id
          v4_cidr_blocks = ["192.168.3.0/24"]
        }
        
        # Создание группы безопасности
        
        resource "yandex_vpc_security_group" "my-sg" {
          name        = local.sg_name
          network_id  = yandex_vpc_network.my-network.id
        
          ingress {
            protocol       = "TCP"
            description    = "http"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 80
          }
        
          ingress {
            protocol       = "TCP"
            description    = "https"
            v4_cidr_blocks = ["0.0.0.0/0"]
            port           = 443
          }
        
          ingress {
            protocol          = "TCP"
            description       = "healthchecks"
            predefined_target = "loadbalancer_healthchecks"
            port              = 30080
          }
        
          egress {
            protocol       = "ANY"
            description    = "any"
            v4_cidr_blocks = ["0.0.0.0/0"]
            from_port      = 0
            to_port        = 65535
          }
        }
        
        # Создание бакета
        
        resource "yandex_storage_bucket" "cdn-source-bucket" {
          bucket      = var.bucket_name
          folder_id   = var.folder_id
        
          anonymous_access_flags {
            read = true
            list = true
          }
        }
        
        # Загрузка в бакет главной страницы тестового сервиса
        
        resource "yandex_storage_object" "index-object" {
          bucket        = yandex_storage_bucket.cdn-source-bucket.bucket
          key           = local.object_key
          source        = var.index_file_path
          content_type  = "text/html"
        }
        
        # Создание группы бэкендов
        
        resource "yandex_alb_backend_group" "test-backend-group" {
          name                     = local.bg_name
          http_backend {
            name                   = local.backend_name
            weight                 = 100
            port                   = 80
            storage_bucket         = var.bucket_name
          }
        }
        
        # Создание HTTP-роутера
        
        resource "yandex_alb_http_router" "my-router" {
          name          = local.router_name
        }
        
        # Создание виртуального хоста
        
        resource "yandex_alb_virtual_host" "my-virtual-host" {
          name           = local.vh_name
          http_router_id = yandex_alb_http_router.my-router.id
        
          route {
            name = local.route_name
        
            http_route {
              http_match {
                http_method = ["GET"]
                path {
                  prefix = "/"
                }
              }
        
              http_route_action {
                backend_group_id = yandex_alb_backend_group.test-backend-group.id
              }
            }
          }
        
          authority = [var.domain_name]
        }
        
        # Создание L7-балансировщика
        
        resource "yandex_alb_load_balancer" "my-balancer" {
          name               = local.alb_name
          network_id         = yandex_vpc_network.my-network.id
          security_group_ids = [yandex_vpc_security_group.my-sg.id]
        
          allocation_policy {
            location {
              zone_id   = "ru-central1-a"
              subnet_id = yandex_vpc_subnet.my-subnet-a.id
            }
        
            location {
              zone_id   = "ru-central1-b"
              subnet_id = yandex_vpc_subnet.my-subnet-b.id
            }
        
            location {
              zone_id   = "ru-central1-d"
              subnet_id = yandex_vpc_subnet.my-subnet-d.id
            }
          }
        
          listener {
            name = local.listener_name
            endpoint {
              address {
                external_ipv4_address {
                }
              }
              ports = [80]
            }
            http {
              handler {
                http_router_id = yandex_alb_http_router.my-router.id
              }
            }
          }
        }
        
        # Создание группы источников CDN
        
        resource "yandex_cdn_origin_group" "my-origin-group" {
          name = local.origin_gp_name
          origin {
            source = yandex_alb_load_balancer.my-balancer.listener[0].endpoint[0].address[0].external_ipv4_address[0].address
          }
        }
        
        # Создание CDN-ресурса
        
        resource "yandex_cdn_resource" "my-resource" {
          cname               = var.domain_name
          active              = true
          origin_protocol     = "http"
          origin_group_id     = yandex_cdn_origin_group.my-origin-group.id
          ssl_certificate {
            type = "certificate_manager"
            certificate_manager_id = data.yandex_cm_certificate.example-com.id
          }
          options {
            redirect_http_to_https = true
            forward_host_header    = true
          }
        }
        
        # Создание CNAME-записи для CDN-ресурса
        
        resource "yandex_dns_recordset" "cdn-cname" {
          zone_id = yandex_dns_zone.my-domain-zone.id
          name    = "${var.domain_name}."
          type    = "CNAME"
          ttl     = 600
          data    = [yandex_cdn_resource.my-resource.provider_cname]
        }
        
      3. Создайте файл с пользовательскими данными cdn-storage-integration.auto.tfvars:

        cdn-storage-integration.auto.tfvars

        folder_id       = "<идентификатор_каталога>"
        bucket_name     = "<имя_бакета>"
        domain_name     = "<имя_домена>"
        index_file_path = "<локальный_путь_к_файлу_index.html>"
        

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

    • Сеть — yandex_vpc_network.
    • Подсеть — yandex_vpc_subnet.
    • Группа безопасности — yandex_vpc_security_group.
    • DNS-зона — yandex_dns_zone.
    • Ресурсная запись DNS — yandex_dns_recordset.
    • TLS-Сертификат — yandex_cm_certificate.
    • Бакет — yandex_storage_bucket.
    • Объект — yandex_storage_object.
    • Группа источников — yandex_cdn_origin_group.
    • CDN-ресурс — yandex_cdn_resource.
    • Группа бэкендов — yandex_alb_backend_group.
    • HTTP-роутер — yandex_alb_http_router.
    • Виртуальный хост — yandex_alb_virtual_host.
    • L7-балансировщик нагрузки — yandex_alb_load_balancer.
  3. В файле cdn-storage-integration.auto.tfvars задайте значения пользовательских переменных:

    • folder_id — идентификатор каталога.

    • bucket_name — имя бакета в соответствии с правилами именования.

    • domain_name — имя домена, на котором будет размещен тестовый сервис.

      Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов ns1.yandexcloud.net и ns2.yandexcloud.net в личном кабинете вашего регистратора доменных имен.

    • index_file_path — локальный путь к файлу index.html с содержимым тестового сервиса. Например: /Users/MyUser/Repos/cdn-storage-integration/index.html.

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

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

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

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

    4. Примените изменения конфигурации:

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

В результате в выбранном каталоге будет создана и настроена вся необходимая инфраструктура.

Протестируйте работу решенияПротестируйте работу решения

Чтобы проверить работу сервиса, откройте в браузере адрес https://example.com/index.html (где вместо example.com — имя вашего домена). Если все было настроено правильно, вы должны увидеть страницу с таким содержанием:

<!DOCTYPE html>
<html>
  <head>
    <title>My service</title>
  </head>
  <body>
    <p>The service is working</p>
  </body>
</html>

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

Важно

Прежде чем удалять инфраструктуру, удалите все объекты в созданном бакете.

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

  1. Откройте конфигурационный файл cdn-storage-integration-config.tf и удалите описание создаваемой инфраструктуры из файла.

  2. Примените изменения:

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

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

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

    4. Примените изменения конфигурации:

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

См. такжеСм. также

  • Интеграция L7-балансировщика с Cloud CDN и Object Storage с помощью консоли управления

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

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