Статический сайт в Yandex Object Storage с помощью Terraform
Чтобы разместить статический сайт в Object Storage с помощью Terraform:
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки статического сайта входит:
- плата за хранение данных статического сайта (см. тарифы Object Storage);
- плата за операции с данными (см. тарифы Object Storage);
- плата за исходящий трафик из Yandex Cloud в интернет (см. тарифы Object Storage);
- плата за публичные DNS-запросы и зоны (см. тарифы Yandex Cloud DNS).
Создайте инфраструктуру
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Чтобы создать инфраструктуру для статического сайта в Object Storage с помощью Terraform:
-
Установите Terraform, получите данные для аутентификации и укажите источник для установки провайдера Yandex Cloud (раздел Настройте провайдер, шаг 1).
-
Подготовьте файлы с описанием инфраструктуры:
Готовая конфигурацияВручную-
Клонируйте репозиторий с конфигурационными файлами.
git clone https://github.com/yandex-cloud-examples/yc-s3-static-website.git
-
Перейдите в директорию с репозиторием. В ней должны появиться файлы:
static.tf
— конфигурация создаваемой инфраструктуры.index.html
иerror.html
— главная страница сайта и страница ошибки.
- Создайте папку для конфигурационных файлов.
- Создайте в папке:
-
Конфигурационный файл
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"] }
-
Файл
index.html
с текстомHello world!
:index.html
<!doctype html> <html> <head> <title>Hello, world!</title> </head> <body> <p>Hello, world!</p> </body> </html>
-
Файл
error.html
с текстомError!
:error.html
<!doctype html> <html> <head> <title>Error!</title> </head> <body> <p>Error!</p> </body> </html>
-
Более подробную информацию о параметрах используемых ресурсов в Terraform см. в документации провайдера:
-
-
В файле
static.tf
в блокеlocals
задайте пользовательские параметры:folder_id
— идентификатор каталога, в котором будут создаваться ресурсы.domain
— доменное имя в форматеexample.com
, без точки в конце.
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
После создания инфраструктуры, проверьте работу сайта.
Проверьте работу сайта
Чтобы проверить работу сайта, используйте один из стандартных адресов Object Storage:
http://<имя_бакета>.website.yandexcloud.net
http://website.yandexcloud.net/<имя_бакета>
Если вы настроили для сайта собственный домен, используйте его адрес, например example.com
.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Откройте конфигурационный файл
static.tf
и удалите описание создаваемой инфраструктуры из файла. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-