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 и код-ревью.
Частые ошибки новичков
- ❌ Править ресурсы руками в панели облака. Появляется «дрейф» — реальность расходится со state, и следующий apply ломает вещи.
- ❌ Коммитить state и секреты в git. Это утечка доступов ко всей инфраструктуре.
- ❌ Применять без plan. Terraform может пересоздать ресурс, о котором вы не подумали.
- ❌ Один гигантский .tf-файл. По мере роста делите на модули и окружения.
State, remote backend и модули
Локальный state — только для песочницы. В команде: remote backend (S3 + lock в DynamoDB или аналог), права на state минимальные, секреты не в .tf. Модули — когда паттерн повторился 2–3 раза, не «модуль ради модуля» на 20 строк.
- одна среда ≈ отдельный state или workspace с дисциплиной;
terraform planв PR обязателен;- теги на ресурсах (owner, env) — с первого дня;
- destroy в проде — только осознанно, с защитой.
IaC имеет смысл после Linux + облако «вручную». Рядом: Docker, CI, карта DevOps.
Plan в PR — не бюрократия
Ревью plan ловит destroy/replace до инцидента. Привыкайте читать diff: create/update/destroy. Для обучения поднимите один дешёвый ресурс, поменяйте тег, посмотрите plan, уничтожьте. Так state перестаёт быть абстракцией.
Следующий шаг в DevOps
Поднимите один ресурс, смените тег, прочитайте plan, уничтожьте — и опишите в README. Поднимите один сервис в Docker, прогоните простой CI, задеплойте на VPS или в песочницу. База: Docker, GitHub Actions, VPS. Полный маршрут — DevOps старт, обзор роли — devops starter.
Как применить «Terraform: базовые практики IaC» на практике
Пройдите материал не как статью, а как задание. Выпишите 3 тезиса из разделов (Что такое IaC и Terraform; Пример конфигурации; Рабочий цикл и команды) и напротив каждого — действие на 30–90 минут: что сделаете руками, какой файл/репозиторий появится, как поймёте что готово. Без этого колонки «изучил» в голове не конвертируются в оффер.
Связка с соседними материалами: Docker, CI, карта DevOps, GitHub Actions, VPS. Не читайте всё подряд — возьмите один следующий URL и закройте его артефактом в git до конца недели. Если роль ещё не выбрана, сначала профессии и 5 вакансий-ориентиров, потом возвращайтесь к этой теме.
На собеседовании по теме «Terraform: базовые практики IaC» вас почти всегда просят пример из практики. Подготовьте 60–90 секунд: задача → что сделали → результат/ограничение. Даже учебный пример звучит сильнее пересказа теории.
Частые вопросы
Terraform или Ansible?
Разное назначение: Terraform создаёт инфраструктуру (провижининг), Ansible настраивает уже существующие серверы (конфигурация). Часто используют вместе.
Обязателен ли Terraform джуну DevOps?
Базовое понимание IaC ценится, но сначала Linux, Docker и CI/CD. Terraform — следующий слой.
Где потренироваться без облака?
С провайдером Docker или local-провайдерами — можно освоить синтаксис и state бесплатно на своём компьютере.
Материал «Terraform: базовые практики IaC» имеет смысл только вместе с практикой: один артефакт в git на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.