Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
        • Обзор
        • Консоль управления, CLI, API
        • Terraform
      • Перенос WordPress сайта с хостинга в Yandex Cloud
      • Организация виртуального хостинга
      • Создание веб-приложения на Python с использованием фреймворка Flask
      • Хостинг статического сайта на фреймворке Gatsby
      • Миграция в Cloud CDN из стороннего CDN-провайдера
      • Получение статистики посещения сайта с использованием S3 Select
      • Оформление контента из Cloud Video в IFrame

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Добавьте сертификат в Certificate Manager
  • Создайте инфраструктуру
  • Проверьте работу CDN
  • Как удалить созданные ресурсы
  1. Прикладные решения
  2. Создание сайта
  3. Статический сайт в Object Storage с доступом через Cloud CDN
  4. Terraform

Настройка хостинга статического сайта в бакете Yandex Object Storage с доступом через Yandex Cloud CDN с помощью Terraform

Статья создана
Yandex Cloud
Улучшена
kvendingoldo
Обновлена 18 ноября 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Добавьте сертификат в Certificate Manager
  • Создайте инфраструктуру
  • Проверьте работу CDN
  • Как удалить созданные ресурсы

Чтобы создать инфраструктуру для хостинга сайта в бакете с доступом через Yandex Cloud CDN с помощью Terraform:

  1. Подготовьте облако к работе.
  2. Добавьте сертификат в Certificate Manager.
  3. Создайте инфраструктуру.
  4. Проверьте работу CDN.

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

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

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

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

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

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

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

В стоимость поддержки инфраструктуры для сайта в бакете с доступом через CDN входят:

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

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

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

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

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

Создайте инфраструктуруСоздайте инфраструктуру

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/yc-s3-cdn-hosting.git
      
    2. Перейдите в директорию с репозиторием. В ней должны появиться файлы:

      • index.html — файл главной страницы сайта.
      • yc-cdn-hosting.tf — конфигурация создаваемой инфраструктуры.
      • yc-cdn-hosting.auto.tfvars — файл с пользовательскими данными.
    1. Создайте папку для конфигурационных файлов.
    2. Создайте в папке:
      1. Файл главной страницы сайта index.html:

        index.html
        <!DOCTYPE html>
        <html>
          <head>
            <title>My site</title>
          </head>
          <body>
            <p>The site is working</p>
          </body>
        </html>
        
      2. Конфигурационный файл yc-cdn-hosting.tf:

        yc-cdn-hosting.tf
        # Объявление переменных для конфиденциальных параметров
        
        variable "folder_id" {
          type = string
        }
        
        variable "domain" {
          type = string
        }
        
        variable "cert_id" {
          type = string
        }
        
        # Настройка провайдера
        
        terraform {
          required_providers {
            yandex = {
              source = "yandex-cloud/yandex"
            }
          }
          required_version = ">=0.136.0"
        }
        
        # Получение информации о TLS-сертификате
        
        data "yandex_cm_certificate" "example_by_id" {
          certificate_id = var.cert_id
        }
        
        # Создание бакета
        
        resource "yandex_storage_bucket" "main-bucket" {
          bucket    = var.domain
          folder_id = var.folder_id
          max_size  = "1073741824"
          website {
            index_document = "index.html"
          }
          https {
            certificate_id = data.yandex_cm_certificate.example_by_id.id
          }
        
          depends_on = [data.yandex_cm_certificate.example_by_id]
        }
        
        # Настройка прав доступа для бакета
        
        resource "yandex_storage_bucket_grant" "my_grant_main" {
          bucket = yandex_storage_bucket.main-bucket.id
          grant {
            uri         = "http://acs.amazonaws.com/groups/global/AllUsers"
            permissions = ["READ"]
            type        = "Group"
          }
          depends_on = [yandex_storage_bucket.main-bucket]
        }
        
        # Загрузка объекта в бакет
        
        resource "yandex_storage_object" "index-page" {
          bucket     = yandex_storage_bucket.main-bucket.id
          key        = "index.html"
          source     = "index.html"
          depends_on = [yandex_storage_bucket_grant.my_grant_main]
        }
        
        # Создание зоны DNS
        
        resource "yandex_dns_zone" "zone1" {
          name   = "mydnszone"
          zone   = "${var.domain}."
          public = true
        }
        
        # Создание записи DNS
        
        resource "yandex_dns_recordset" "rs1" {
          zone_id    = yandex_dns_zone.zone1.id
          name       = "cdn"
          type       = "CNAME"
          ttl        = 600
          data       = ["${data.yandex_cdn_resource.my_resource.provider_cname}"]
          depends_on = [yandex_cdn_resource.my_resource]
        }
        
        # Получение информации о ресурсе CDN
        
        data "yandex_cdn_resource" "my_resource" {
          resource_id = yandex_cdn_resource.my_resource.id
        }
        
        # Создание группы источников
        
        resource "yandex_cdn_origin_group" "my_group" {
          name     = "updates-origin-group"
          use_next = true
          origin {
            source = "${var.domain}.website.yandexcloud.net"
          }
        }
        
        # Создание ресурса CDN
        
        resource "yandex_cdn_resource" "my_resource" {
          cname             = "cdn.${var.domain}"
          active            = true
          origin_protocol   = "http"
          origin_group_name = yandex_cdn_origin_group.my_group.name
          options {
            custom_host_header     = "${var.domain}.website.yandexcloud.net"
            redirect_http_to_https = true
          }
          ssl_certificate {
            type                   = "certificate_manager"
            certificate_manager_id = data.yandex_cm_certificate.example_by_id.id
          }
        }
        
      3. Файл с пользовательскими данными yc-cdn-hosting.auto.tfvars:

        yc-cdn-hosting.auto.tfvars
        folder_id = "<идентификатор_каталога>"
        domain    = "<доменное_имя>"
        cert_id   = "<идентификатор_TLS-сертификата>"
        

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

    • TLS-сертификат — источник данных yandex_cm_certificate.
    • Бакет — yandex_storage_bucket.
    • Настройка прав доступа к бакету с помощью ACL Object Storage — yandex_storage_bucket_grant.
    • Объект — yandex_storage_object.
    • DNS-зона — yandex_dns_zone.
    • Ресурсная запись DNS — yandex_dns_recordset.
    • CDN-ресурс — yandex_cdn_resource.
    • Группа источников — yandex_cdn_origin_group.
  3. В файле yc-cdn-hosting.auto.tfvars задайте пользовательские параметры:

    • folder_id — идентификатор каталога.
    • domain — основное доменное имя, например example.com.
      Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов ns1.yandexcloud.net и ns2.yandexcloud.net в личном кабинете вашего регистратора.
    • cert_id — идентификатор TLS-сертификата Certificate Manager с пройденной проверкой прав на домен.
  4. Создайте ресурсы:

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

Важно

После создания CDN-ресурса может пройти до 15 минут, прежде чем ресурс фактически заработает.

Перед тем как приступать к следующим шагам, убедитесь, что вновь созданный CDN-ресурс полностью работоспособен.

Проверьте работу CDNПроверьте работу CDN

Дождитесь обновления DNS-записей — на это может потребоваться несколько часов.

Проверьте доступность сайта: откройте его по новому URL cdn.example.com. Должно произойти перенаправление на страницу https://cdn.example.com, где уже подключен TLS-сертификат из Certificate Manager и источником для раздачи является Cloud CDN.

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

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

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

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

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

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

  • Настройка хостинга статического сайта в бакете Yandex Object Storage с доступом через Yandex Cloud CDN

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

Предыдущая
Консоль управления, CLI, API
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»