Terraform: базовые практики IaC
Terraform для новичка: базовые практики инфраструктуры как код, структура проекта, переменные и state. Понятное введение в IaC с примером конфигурации и командами.
Коротко. Terraform описывает инфраструктуру (серверы, сети, БД) кодом, а не кликами в панели. Вы пишете .tf-файлы декларативно, а Terraform приводит облако к нужному состоянию. Ключевое, что важно понять новичку — как работает state и почему его нельзя редактировать руками.
Что такое IaC и Terraform
Infrastructure as Code — управление инфраструктурой через версионируемые файлы. Плюсы: воспроизводимость, ревью изменений через git, откат, отсутствие «ручной магии». Terraform — самый популярный IaC-инструмент, работает с большинством облаков и провайдеров.
Пример конфигурации
Описание ресурса декларативно:
terraform {
required_providers {
docker = { source = "kreuzwerker/docker" }
}
}
resource "docker_image" "app" {
name = "nginx:alpine"
}
resource "docker_container" "web" {
name = "web"
image = docker_image.app.image_id
ports {
internal = 80
external = 8080
}
}
Вы описываете что должно быть, а не как это создать пошагово.
Рабочий цикл и команды
| Команда | Что делает |
|---|---|
| terraform init | Инициализировать проект, скачать провайдеры |
| terraform plan | Показать, что изменится (без применения) |
| terraform apply | Применить изменения |
| terraform destroy | Удалить созданные ресурсы |
Правило: всегда смотрите plan перед apply.
State: главное, что нужно понять
Terraform хранит state — снимок того, что он создал, чтобы понимать разницу между текущим и желаемым состоянием. Важно:
- ❌ Не редактируйте state-файл вручную.
- ✅ Для команды храните state удалённо (например, в объектном хранилище) с блокировкой, чтобы не было конфликтов.
- ✅ Не коммитьте state с секретами в git.
Базовые практики
- ✅ Выносите значения в переменные (variables), не хардкодьте.
- ✅ Разбивайте инфраструктуру на модули по мере роста.
- ✅ Держите отдельные окружения (dev/prod) изолированно.
- ✅ Проходите изменения через plan и код-ревью.
Частые вопросы
Terraform или Ansible?
Разное назначение: Terraform создаёт инфраструктуру (провижининг), Ansible настраивает уже существующие серверы (конфигурация). Часто используют вместе.
Обязателен ли Terraform джуну DevOps?
Базовое понимание IaC ценится, но сначала Linux, Docker и CI/CD. Terraform — следующий слой.
Где потренироваться без облака?
С провайдером Docker или local-провайдерами — можно освоить синтаксис и state бесплатно на своём компьютере.