Terraform: первый ресурс
Провайдеры, ресурсы, plan и apply, state-файл. Как Terraform приводит облако к описанию.
Что делает Terraform
Terraform берёт текстовое описание инфраструктуры и создаёт её в облаке. Ты пишешь, что должно быть, Terraform сравнивает это с тем, что уже есть, и делает только разницу. Тот же декларативный подход, что в прошлом уроке, теперь на практике.
Описание пишут на языке HCL в файлах .tf.
Рядом с Terraform живёт открытый форк OpenTofu с тем же языком и командами. Появился он из-за смены лицензии. В августе 2023 HashiCorp перевела Terraform с открытой MPL на Business Source License (BSL), лицензию с ограничениями на коммерческое использование. Часть сообщества и компаний, строивших продукты вокруг Terraform, ответила манифестом OpenTF 25 августа 2023. В сентябре того же года проект переименовали в OpenTofu и передали в Linux Foundation, а в январе 2024 вышел первый стабильный релиз 1.6.0.
Практически они пока очень близки: .tf-файлы, init/plan/apply,
провайдеры. Всё, что дальше в уроке, работает в обоих один в один,
только бинарь называется tofu.
Провайдер и ресурс
Две главные сущности — провайдер и ресурс.
Провайдер — плагин для конкретного облака (Yandex Cloud, AWS, Hetzner). Он знает, как обращаться к API этого облака.
Ресурс — конкретный объект: виртуалка, сеть, бакет.
terraform {
required_providers {
yandex = { source = "yandex-cloud/yandex" }
}
}
provider "yandex" {
zone = "ru-central1-a"
}
resource "yandex_compute_instance" "web" {
name = "web-01"
resources {
cores = 2
memory = 4
}
}
Блок resource "тип" "имя" описывает один объект. тип
(yandex_compute_instance) задаёт провайдер, имя (web) — локальная
ссылка внутри кода, чтобы другие ресурсы могли на него ссылаться.
Рабочий цикл: init, plan, apply
terraform init # скачать провайдеры, подготовить рабочую папку
terraform plan # показать, что Terraform собирается сделать
terraform apply # применить изменения
terraform plan — главная команда для безопасности. Она ничего не меняет,
только показывает разницу между кодом и реальностью:
$ terraform plan
Terraform will perform the following actions:
+ resource "yandex_compute_instance" "web" {
+ name = "web-01"
+ cores = 2
}
Plan: 1 to add, 0 to change, 0 to destroy.
+ — создать, ~ — изменить, - — удалить. Всегда читаешь plan перед
apply: так дрейф и случайные удаления видно заранее. terraform destroy
сносит всё, что описано. Подходит для временных окружений.
State: память Terraform
Чтобы знать, что он уже создал, Terraform хранит state — файл
terraform.tfstate с текущим состоянием инфраструктуры. По нему он
понимает, что менять, а что трогать не надо.
State критичен и опасен одновременно:
- В нём лежат секреты (пароли, ключи в открытом виде), поэтому в git его не коммитят.
- Если над инфраструктурой работают несколько человек, локальный state расходится. Его выносят в общее хранилище (S3-совместимый бакет, HCP Terraform) с блокировкой, чтобы двое не применяли одновременно.
Потеря state — это потеря связи между кодом и реальными ресурсами, поэтому его берегут и бэкапят.
Что важно запомнить
Terraform создаёт инфраструктуру из HCL-описания: провайдер знает API облака, ресурс описывает один объект.
Цикл: init → plan → apply. plan показывает разницу и ничего не
меняет. Его читают всегда перед apply.
State (terraform.tfstate) хранит, что уже создано; в нём секреты,
поэтому его не коммитят в git, а выносят в общее хранилище с блокировкой.
В следующих уроках разберём GitOps, где такой код применяется автоматически из git.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс