Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Яндекс Cloud + Terraform быстрый старт


Яндекс Cloud + Terraform быстрый старт
 
 
Задача
  • Создать простенький hello-world сайт в Яндекс.Облаке
  • Залить на него картинку
  • Посмотрть темплейтинг
 
Документация, используемая в статье: 
– Язык 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
 
В яндекс облаке после входа в аккаунт:
  • Сервисные аккаунты
  • Создать сервисный аккаунт (придумываете имя, роль - например админ)
  • Переходите в созданный аккаунт
  • Создать новый ключ
  • Создать авторизованный ключ (Для запроса IAM-токена)
  • Скачать файл с ключами (например /home/user/authorized_key.json)
 
 
Взаимодействие с Яндекс
 
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

 

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект