| Навигация
|
Яндекс Cloud + Terraform быстрый стартЯндекс Cloud + Terraform быстрый старт
Задача
Документация, используемая в статье:
– Язык HCL (Terraform) : https://developer.hashicorp.com/terraform/language
– Провайдер Яндекс.Облака: https://registry.terraform.io/providers/yandex-cloud/yandex/latest
– Яндекс.Облако o работе с Terraform: https://yandex.cloud/ru/docs/tutorials/infrastructure-management/terraform-quickstart
В яндекс облаке после входа в аккаунт:
Взаимодействие с Яндекс
default.tf
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
version = "0.90.0"
}
}
}
locals {
cloud_id = "<Ваш клауд айди>"
folder_id = "<Ваш фолдер айди>"
}
provider "yandex" {
# token = var.token
cloud_id = local.cloud_id
folder_id = local.folder_id
service_account_key_file = "/home/user/authorized_key.json"
}
$ terraform init
Создание бакета с именем test
main.tf
locals {
bucket_name = "<Имя вашего бакета>"
}
// Create SA
resource "yandex_iam_service_account" "sa" {
folder_id = local.folder_id
name = "tf-test-sa"
}
// Grant permissions
resource "yandex_resourcemanager_folder_iam_member" "sa-editor" {
folder_id = local.folder_id
role = "storage.editor"
member = "serviceAccount:${yandex_iam_service_account.sa.id}"
}
// Create Static Access Keys
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"
}
// Use keys to create bucket
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.bucket_name
}
$ terraform apply
Настройка хостинга
В main.tf дополним конструкции:
locals {
bucket_name = "<имя_бакета>"
index = index.html"
}
...(Другой код не трогаем)...
resource "yandex_resourcemanager_folder_iam_member" "sa-editor" {
folder_id = local.folder_id
role = "storage.admin"
member = "serviceAccount:${yandex_iam_service_account.sa.id}"
}
...(Другой код не трогаем)...
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.bucket_name
acl = "public-read"
website {
index_document = local.index
}
}
output_site {
value = yandex_storage_bucket.test.website_endpoint
}
$ terraform apply
Создаем index файл для сайта
site/index.html
<h1>Hell world!</h1>
И загружаем его на ранее созданный бакет test
В main.tf дополним конструкции:
...(Другой код не трогаем)...
# Создание объекта
resource "yandex_storage_object" "index" {
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
acl = "public-read"
bucket = yandex_storage_bucket.test.id
key = local.index
source = "site/${local.index}"
}
$ terraform apply
Добавляем файл с картинкой для сайта
img/cat.png
site/index.html
<h1>Hell world!</h1>
<p><img src="img/cat.png"></p>
В main.tf внесем изменения:
...(Другой код не трогаем)...
resource "yandex_storage_object" "index" {
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
acl = "public-read"
bucket = yandex_storage_bucket.test.id
key = local.index
content_base64 = base64encode(file("site/${local.index}"))
}
resource "yandex_storage_object" "img" {
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
acl = "public-read"
bucket = yandex_storage_bucket.test.id
for_each = fileset("site", "img/*")
key = each.key
source = "site/${each.key}"
}
...(Другой код не трогаем)...
$ terraform apply
Передача template информации
Переименуйте site/index.html в site/index.html.tpl
site/index.html.tpl
<h1>Hell world!</h1>
<p><img src="img/cat.png"></p>
Site endpoint ${endpoint}
В main.tf:
...(Другой код не трогаем)...
# добавим еще один блок locals
locals {
index_template = templatefile("site/${local.index}.tpl", {
endpoint = yandex_storage_bucket.test.website_endpoint
})
}
# изменим
resource "yandex_storage_object" "index" {
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
acl = "public-read"
bucket = yandex_storage_bucket.test.id
key = local.index
content_base64 = base64encode(local.index_template)
content_type = "text/html"
}
...(Другой код не трогаем)...
$ terraform apply
Итог
Мы создали простенький hello-world сайт в Яндекс.Облаке
Залили на него картинку
Посмотрели темплейтинг
Удалить все:
$ terraform destroy
Комментарии пользователей Эту новость ещё не комментировалиНаписать комментарий Анонимам нельзя оставоять комментарии, зарегистрируйтесь! |
| Контакты Группа ВК | Видео к IT статьям на YoutubeВидео на другие темы Смотреть | ||||
Мои друзья: ![]() |
© Snakeproject.ru создан в 2013 году.При копировании материала с сайта - оставьте ссылку.Весь материал на сайте носит ознакомительный характер,за его использование другими людьми, автор ответственности не несет. |
||||
Поддержать автора и проект
|
|||||