terraform init подготовит рабочий каталог, структуру проекта, загрузит зависимости, а также доступ к API провайдеров.git clone.terraform plan выводит предварительный список изменений, которые будут выполнены. Это важный шаг, так как позволяет убедиться, что код делает именно то, что вы ожидаете.terraform apply разворачивает указанные ресурсы или вносит изменения в инфраструктуру. Cоздаются и изменяются реальные ресурсы, такие как виртуальные машины или сеть. Когда вы завершите развёртывание и проверите результаты, лучше сохранить изменения в системе контроля версий с помощью команд git commit и git push.terraform fmt для изменения кода.Сергей
HCL
data "yandex_compute_image" "ubuntu" {
family = "ubuntu-2204-lts"
}
resource "yandex_compute_disk" "testvm" {
name = "test-vm-disk"
type = "network-ssd"
zone = "ru-central1-a"
image_id = data.yandex_compute_image.ubuntu.image_id
size = 15
}
resource "yandex_compute_instance" "testvm" {
name = "test-vm"
zone = "ru-central1-a"
resources {
cores = 2
memory = 2
}
boot_disk {
disk_id = yandex_compute_disk.testvm.id
}
network_interface {
subnet_id = "<< SUBNETID >>"
nat = true
}
metadata = {
ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
}
} HCL
data "yandex_compute_image" "ubuntu" {
family = "ubuntu-2204-lts"
} resource мы создаём ресурс (виртуальный диск) типа "yandex_compute_disk" с именем "testvm". Далее перечисляем все атрибуты создаваемого ресурса (виртуального диска):HCL
resource "yandex_compute_disk" "testvm" {
name = "test-vm-disk"
type = "network-ssd"
zone = "ru-central1-a"
image_id = data.yandex_compute_image.ubuntu.image_id
size = 15
} name = "test-vm-disk" — имя для виртуального диска;type = "network-ssd" — тип диска (SSD в сети);zone = "ru-central1-a" — зона региона, в которой создаётся виртуальный диск;image_id = data.yandex_compute_image.ubuntu.image_id — в этом атрибуте мы присваиваем значение id образа, полученного из блока data выше. Значение описывается через пространство имён;size = 15 — размер диска (Гб).resource, где мы создаём ресурс (виртуальный сервер), присваиваем ему имя и указываем зону региона через атрибуты name и zone соответственно.HCL
provider "yandex" {
token = "example-oauth-token" # OAuth-токен
cloud_id = "b1g63e2fltlcti5hjucf" # Cloud ID
folder_id = "b1g6v5q9rdsufm6s48g0" # ID
zone = "ru-central1-a" # Указание региона провайдера
} resources, boot_disk, network_interface, metadata. HCL
resource "yandex_compute_instance" "testvm" {
name = "test-vm"
zone = "ru-central1-a" # Регион, в котором будет создана VM
// Вложенный блок resources определяет ресурсы виртуальной машины
resources {
cores = 2 # Количество ядер процессора
memory = 2 # Объём оперативной памяти (Gb)
}
// Вложенный блок boot_disk связывает диск с виртуальной машиной, где
// используем ID диска, созданного в корневом блоке
boot_disk {
disk_id = yandex_compute_disk.testvm.id
}
// Блок описания сетевого интерфейса network_interface
network_interface {
subnet_id = "<<e9b1h0icgtq23md5ovl1>>" # Идентификатор подсети
nat = true # Включение NAT для выхода в интернет
}
// В блоке metadata опишем метаданные
metadata = {
ssh-keys = "testUser:${file("~/.ssh/id_rsa.pub")}" # SSH-ключ
}
} Сергей