Статический веб-сайт в 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).
-
Подготовьте файлы с описанием инфраструктуры:
Готовая конфигурацияВручную- Создайте папку для конфигурационных файлов.
- Скачайте архив
(2 КБ). - Разархивируйте архив в папку. В результате в ней должны появиться конфигурационный файл
static.tf
, файлыindex.html
иerror.html
.
- Создайте папку для конфигурационных файлов.
- Создайте в папке:
-
Конфигурационный файл
static.tf
:static.tf
locals { token = "<OAuth-_или_IAM-токен>" cloud_id = "<идентификатор_облака>" folder_id = "<идентификатор_каталога>" } terraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = ">= 0.47.0" } } } provider "yandex" { token = local.token cloud_id = local.cloud_id 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 = "www.example.com" acl = "public-read" website { index_document = "index.html" error_document = "error.html" } } 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 = "example.com." public = true } resource "yandex_dns_recordset" "rs1" { zone_id = yandex_dns_zone.zone1.id name = "www" type = "CNAME" ttl = 200 data = ["www.example.com.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
задайте пользовательские параметры:token
— OAuth-токен (если вы используете аккаунт на Яндексе) или IAM-токен (если вы используете аккаунт на Яндексе или федеративный аккаунт) для доступа к Yandex Cloud. Время жизни IAM-токена — максимум 12 часов, но не больше времени жизни cookie у федерации.cloud_id
— идентификатор облака, в котором будут создаваться ресурсы.folder_id
— идентификатор каталога, в котором будут создаваться ресурсы.
-
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
После создания инфраструктуры, проверьте работу сайта.
Проверьте работу сайта
Чтобы проверить работу сайта, используйте один из стандартных адресов Object Storage:
http://<имя_бакета>.website.yandexcloud.net
http://website.yandexcloud.net/<имя_бакета>
Если вы настроили для сайта собственный домен, используйте его адрес, например http://www.example.com
.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
-
Откройте конфигурационный файл
static.tf
и удалите описание создаваемой инфраструктуры из файла. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-