Terraform: базовые практики IaC

Terraform для новичка: базовые практики инфраструктуры как код, структура проекта, переменные и state. Понятное введение в IaC с примером конфигурации и командами.

Автор — Дмитрий Тыльный, Senior DevOps · 11 июня 2026 · 5 мин
Terraform: базовые практики 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 на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.

Нужен оффер, а не пятый сертификат?

Записи реальных собесов и разборы — в Telegram.

Смотреть разборы