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

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

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

Статический сайт в Yandex Object Storage с помощью Terraform

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

Чтобы разместить статический сайт в Object Storage с помощью Terraform:

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

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

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

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

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

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

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

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

В стоимость поддержки статического сайта входит:

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

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

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

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

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

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

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

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

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

      git clone https://github.com/yandex-cloud-examples/yc-s3-static-website.git
      
    2. Перейдите в директорию с репозиторием. В ней должны появиться файлы:

      • static.tf — конфигурация создаваемой инфраструктуры.
      • index.html и error.html — главная страница сайта и страница ошибки.
    1. Создайте папку для конфигурационных файлов.
    2. Создайте в папке:
      1. Конфигурационный файл static.tf:

        static.tf
        locals {
          folder_id = "<идентификатор_каталога>"
          domain    = "<домен>"
        }
        
        terraform {
          required_providers {
            yandex = {
              source  = "yandex-cloud/yandex"
              version = ">= 0.47.0"
            }
          }
        }
        
        provider "yandex" {
          folder_id = local.folder_id
        }
        
        resource "yandex_iam_service_account" "sa" {
          name      = "my-sa"
        }
        
        resource "yandex_resourcemanager_folder_iam_member" "sa-editor" {
          folder_id = local.folder_id
          role      = "storage.editor"
          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"
        }
        
        resource "yandex_storage_bucket" "test" {
          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     = local.domain
          max_size   = 1073741824  
          acl        = "public-read"
          
          website {
            index_document = "index.html"
            error_document = "error.html"
          }
        
          # Сертификат Certificate Manager
          https {
            certificate_id = data.yandex_cm_certificate.example.id
          }
        }
        
        resource "yandex_cm_certificate" "le-certificate" {
          name    = "my-le-cert"
          domains = ["${local.domain}"]
        
          managed {
          challenge_type = "DNS_CNAME"
          }
        }
        
        resource "yandex_dns_recordset" "validation-record" {
          zone_id = yandex_dns_zone.zone1.id
          name    = yandex_cm_certificate.le-certificate.challenges[0].dns_name
          type    = yandex_cm_certificate.le-certificate.challenges[0].dns_type
          data    = [yandex_cm_certificate.le-certificate.challenges[0].dns_value]
          ttl     = 600
        }
        
        data "yandex_cm_certificate" "example" {
          depends_on      = [yandex_dns_recordset.validation-record]
          certificate_id  = yandex_cm_certificate.le-certificate.id
          #wait_validation = true
        }
        
        resource "yandex_storage_object" "index-html" {
          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     = yandex_storage_bucket.test.id
          key        = "index.html"
          source     = "index.html"
        }
        
        resource "yandex_storage_object" "error-html" {
          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     = yandex_storage_bucket.test.id
          key        = "error.html"
          source     = "error.html"
        }
        
        resource "yandex_dns_zone" "zone1" {
          name        = "example-zone-1"
          description = "Public zone"
          zone        = "${local.domain}."
          public      = true
        }
        
        resource "yandex_dns_recordset" "rs2" {
          zone_id = yandex_dns_zone.zone1.id
          name    = "${local.domain}."
          type    = "ANAME"
          ttl     = 600
          data    = ["${local.domain}.website.yandexcloud.net"]
        }
        
      2. Файл index.html с текстом Hello world!:

        index.html
        <!doctype html>
        <html>
          <head>
            <title>Hello, world!</title>
          </head>
          <body>
            <p>Hello, world!</p>
          </body>
        </html>
        
      3. Файл error.html с текстом Error!:

        error.html
        <!doctype html>
        <html>
          <head>
            <title>Error!</title>
          </head>
          <body>
            <p>Error!</p>
          </body>
        </html>
        

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

    • Сервисный аккаунт — yandex_iam_service_account.
    • Роль — yandex_resourcemanager_folder_iam_member.
    • Статический ключ доступа — yandex_iam_service_account_static_access_key.
    • Бакет — yandex_storage_bucket.
    • DNS-зона — yandex_dns_zone.
    • Ресурсная запись DNS — yandex_dns_recordset.
  3. В файле static.tf в блоке locals задайте пользовательские параметры:

    • folder_id — идентификатор каталога, в котором будут создаваться ресурсы.
    • domain — доменное имя в формате example.com, без точки в конце.
  4. Создайте ресурсы:

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

После создания инфраструктуры, проверьте работу сайта.

Проверьте работу сайтаПроверьте работу сайта

Чтобы проверить работу сайта, используйте один из стандартных адресов Object Storage:

  • http://<имя_бакета>.website.yandexcloud.net
  • http://website.yandexcloud.net/<имя_бакета>

Если вы настроили для сайта собственный домен, используйте его адрес, например example.com.

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

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

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

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

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

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

      terraform validate
      

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

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

      terraform plan
      

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

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

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

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

  • Статический сайт в Yandex Object Storage с помощью консоли управления.

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

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