Найти в Дзене
BecomeSysa

Terraform и Yandex Cloud для самых маленьких

Сегодня будем работать с облачными технологиями Terraform и Yandex Cloud используя тестовый период. Для начала создадим нашу виртуальную машину.
Нажимаем создать ресурс и выбираем "виртуальная машина" Обязательно указываем имя машины и выбираем операционную систему.
Я буду создавать машину на Альт 10. Далее необходимо настроить диск и процессор машины если, вы используете тестовый период, так же советую использовать функцию "прерываемая вм" чтобы сэкономить расход гранта. В поле доступ, можно настроить SSH для удаленного подключения к нашей машине по публичному адресу. Подключимся к нашей машине и сделаем базовую настройку машины для работы Terraform.
Скачиваем последние обновления, wget и unzip:
apt-get update && apt-get install -y wget unzip
Установим интерфейс командной строки Yandex Cloud:
https://cloud.yandex.ru/ru/docs/cli/quickstart#install Если после установки команда yc недоступна:
export PATH=$PATH:/home/altlinux/yandex-cloud/bin/ Теперь можно установить Terraform: Настр

Сегодня будем работать с облачными технологиями Terraform и Yandex Cloud используя тестовый период.

Для начала создадим нашу виртуальную машину.
Нажимаем создать ресурс и выбираем "виртуальная машина"

-2

Обязательно указываем имя машины и выбираем операционную систему.
Я буду создавать машину на Альт 10.

-3

Далее необходимо настроить диск и процессор машины если, вы используете тестовый период, так же советую использовать функцию "прерываемая вм" чтобы сэкономить расход гранта.

-4

В поле доступ, можно настроить SSH для удаленного подключения к нашей машине по публичному адресу.

-5

Подключимся к нашей машине и сделаем базовую настройку машины для работы Terraform.
Скачиваем последние обновления, wget и unzip:
apt-get update && apt-get install -y wget unzip
Установим интерфейс командной строки Yandex Cloud:
https://cloud.yandex.ru/ru/docs/cli/quickstart#install

Если после установки команда yc недоступна:
export PATH=$PATH:/home/altlinux/yandex-cloud/bin/

Теперь можно установить Terraform:

  1. Выбираем версию из зеркала Яндекса:
    https://hashicorp-releases.yandexcloud.net/terraform/
  2. Устанавливаем:
    unzip terraform_1.7.4_linux_amd64.zip -d /usr/local/bin/
  3. Проверим работу:
    terraform --version

Настроим Terraform для работы с Yandex Cloud:
- Создадим директорию для работы с Terraform:
mkdir ~/bin; cd ~/bin
-
Перейдем к настройке конфигурации Terraform:
nano ~/.terraformrc

provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}

- Создадим файл с переменными:
nano variables.tf

variable "token" {
type = string
sensitive = true
}

variable "cloud_id" {
type = string
sensitive = true
}

variable "folder_id" {
type = string
sensitive = true
}

- Теперь настроим наш конфиг инфраструктуры:
nano 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
}

- Укажем значения переменных в файле cloud.conf:

export TF_VAR_token=$(yc iam create-token)
export TF_VAR_token=$(yc config get cloud-id)
export TF_VAR_folder_id=$(yc config get folder-id)

- Чтобы создать виртуальную сеть и ее подсеть:

resource "yandex_vpc_network" "network1" {
name = "network1"
}

resource "yandex_vpc_subnet" "subnet1" {
zone = "ru-central1-a"
network_id = "${yandex_vpc_network.network1.id}"
v4_cidr_blocks = ["192.168.32.0/24"]
}

Где:
name - имя сети
zone - имя зоны в которой будет находиться подсеть
network_id - айди сети в которой она будет
v4_cidr_blocks - область адресов подсети

- Чтобы создать виртуальную машину:

resource "yandex_compute_instance" "vm1" {
name = "
vm1"
hostname = "
vm1"
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.subnet1.id}"
ip_address = "192.168.32.100"
nat = true
}

metadata = {
ssh-keys = "altlinux:${file("~/.ssh/id_rsa.pub")}"
}

timeouts {
create="10m"
}
}

Где:
resources - ресурсы машины, количество ядер(cores), объем ОЗУ(memory), доля CPU(core_fraction)
boot_disk - параметры диска, параметры нового диска(initialize_params), id образа Альт 10(image_id), размер диска(size), тип диска(type)
network_interface - параметры сети, id подсети(subnet_id), локальный адрес машины(ip_address), использование общего публичного адреса(nat)
metadata - метаданные машины, ключ ssh(ssh-keys)
timeouts - тайм-аут, создание машины(create)

- Чтобы создать балансировщик нагрузки:

resource "yandex_lb_network_load_balancer" "loadbalancer1" {
name = "
loadbalancer1"

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.subnet1.id}"
address = "${yandex_compute_instance.vm1.network_interface.0.ip_address}"
}

target {
subnet_id = "${yandex_vpc_subnet.subnet2.id}"
address = "${yandex_compute_instance.vm2.network_interface.0.ip_address}"
}
}

output "lb_ip" {
value = yandex_lb_network_load_balancer.lb-web
}

Где:
resource "yandex_lb_network_load_balancer" - тип ресурса балансировщик нагрузки
+ listener - порт на котором будет работать балансировка
+ attached_target_group - группа для балансировки
resource "yandex_lb_target_group" - тип ресурса цель балансировки
+target - цель балансировки, id подсети(
subnet_id), локальный адрес машины(address)
output "name" - тип ресурса вывод
+ value - значение для вывода

Основной источник: ссылка