-
Notifications
You must be signed in to change notification settings - Fork 1
BloodyArnold/terra.cloud.2024.test
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Создаём рабочию директорию по пути "/home/altlinux/bin" и переходим в неё: mkdir ~/bin; cd ~/bin Создадим файл в каталоге пользователя, под которым мы работаем и будем запускать сценарий: документация от Яндекс vim ~/.terraformrc данное содержимое вставляем без изменений. По умолчанию, установка провайдера выполняется из репозитория hashicorp, однако, он может быть заблокирован на территории России, поэтому мы переопределяем путь по которому выполняются запрос provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } } Создаём рабочию директорию по пути "/home/altlinux/bin" и переходим в неё: mkdir ~/bin; cd ~/bin Создадим файл variables.tf и опишем основные переменные которые потребуются: vim variables.tf содержимое: variable "token" { type = string sensitive = true } variable "cloud_id" { type = string sensitive = true } variable "folder_id" { type = string sensitive = true } В файле main.tf - опишем конфигурацию для создания всех необходимых ресурсов: vim main.tf содержимое: terraform { required_providers { yandex = { source = "yandex-cloud/yandex" } } required_version = ">= 0.13" } provider "yandex" { token = var.token cloud_id = var.cloud_id folder_id = var.folder_id } resource "yandex_compute_instance" "web1" { name = "web1" hostname = "web1" platform_id = "standard-v1" zone = "ru-central1-a" resources { cores = 2 memory = 1 core_fraction = 20 } boot_disk { initialize_params { image_id = "fd8i8fljrbbcclckhlm9" size = 15 type = "network-hdd" } } network_interface { subnet_id = "${yandex_vpc_subnet.subnet_web1.id}" ip_address = "192.168.100.100" nat = true } metadata = { ssh-keys = "altlinux:${file("~/.ssh/id_rsa.pub")}" } timeouts { create="10m" } } resource "yandex_compute_instance" "web2" { name = "web2" hostname = "web2" platform_id = "standard-v1" zone = "ru-central1-b" resources { cores = 2 memory = 1 core_fraction = 20 } boot_disk { initialize_params { image_id = "fd8i8fljrbbcclckhlm9" size = 15 type = "network-hdd" } } network_interface { subnet_id = "${yandex_vpc_subnet.subnet_web2.id}" ip_address = "192.168.200.100" nat = true } metadata = { ssh-keys = "altlinux:${file("~/.ssh/id_rsa.pub")}" } timeouts { create="10m" } } resource "yandex_vpc_network" "network_web" { name = "network_web" } resource "yandex_vpc_subnet" "subnet_web1" { zone = "ru-central1-a" network_id = "${yandex_vpc_network.network_web.id}" v4_cidr_blocks = ["192.168.100.0/24"] } resource "yandex_vpc_subnet" "subnet_web2" { zone = "ru-central1-b" network_id = "${yandex_vpc_network.network_web.id}" v4_cidr_blocks = ["192.168.200.0/24"] } resource "yandex_lb_network_load_balancer" "lb-web" { name = "lb-web" listener { name = "http" port = 80 external_address_spec { ip_version = "ipv4" } } listener { name = "https" port = 443 external_address_spec { ip_version = "ipv4" } } attached_target_group { target_group_id = "${yandex_lb_target_group.lb-group.id}" healthcheck { name = "http" http_options { port = 80 path = "/" } } } } resource "yandex_lb_target_group" "lb-group" { name = "lb-group" target { subnet_id = "${yandex_vpc_subnet.subnet_web1.id}" address = "${yandex_compute_instance.web1.network_interface.0.ip_address}" } target { subnet_id = "${yandex_vpc_subnet.subnet_web2.id}" address = "${yandex_compute_instance.web2.network_interface.0.ip_address}" } } output "lb_ip" { value = yandex_lb_network_load_balancer.lb-web } Файл /home/altlinux/bin/cloud.conf используем для указания настроек для подключения к облачному провайдеру: vim cloud.conf содержимое: # Yandex Token export TF_VAR_token=<ВСТАВЛЯЕМ СОДЕРЖИМОЕ ДЛЯ ТЕКУЩЕГО АККАУНТА В YANDEX CLOUD> # Yandex Cloud ID export TF_VAR_cloud_id=<ВСТАВЛЯЕМ СОДЕРЖИМОЕ ДЛЯ ТЕКУЩЕГО АККАУНТА В YANDEX CLOUD> # Yandex Project ID export TF_VAR_folder_id=<ВСТАВЛЯЕМ СОДЕРЖИМОЕ ДЛЯ ТЕКУЩЕГО АККАУНТА В YANDEX CLOUD> Создаём файл cloudinit.sh для запуска всего вышеописанного: vim cloudinit.sh содержимое: #!/bin/bash cd /home/altlinux/bin source cloud.conf terraform init terraform apply -auto-approve terraform output | grep -E '"address" = "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"' > /home/altlinux/lb.ip Задаём права на исполнение: chmod +x cloudinit.sh Задаём возможность скрипту cloudinit.sh выполняться из любой директории без явного указания пути к исполняемому файлу: export PATH=$PATH:/home/altlinux/bin Генерируем ssh-ключи: ssh-keygen -t rsa Выходим из текущего каталога /home/altlinux/bin в домашний каталог пользователя и пытаемся запустить скрипт: cd cloudinit.sh также в файл /home/altlinux/lb.ip сохранена информацию о внешнем IP-адресе
About
create vm in cloud with terraform
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published