Что такое инфраструктура как код и зачем она нужна

Рейтинг: 40.9% · 8 голосов
Подробный курс по Terraform и OpenTofu на примерах Yandex Cloud: ресурсы и провайдеры, состояние и бэкенды, модули, циклы и условия HCL, секреты и Lockbox, тестирование, CI/CD и командная работа. С актуализацией на 2026 (Terraform 1.3-1.10, OpenTofu).
Ответить
Аватара пользователя
Vlad_DevOps
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Что такое инфраструктура как код и зачем она нужна

Сообщение Vlad_DevOps »

Оглавление курса (47)
  1. Что такое инфраструктура как код и зачем она нужна (вы здесь)
  2. Категории инструментов IaC: чем отличаются Ansible, Packer, Kubernetes и Terraform
  3. Чем Terraform отличается от Ansible, Pulumi и CloudFormation
  4. Как работает Terraform под капотом и кто такой OpenTofu
  5. Установка Terraform и OpenTofu, подготовка Yandex Cloud
  6. Первый ресурс: разворачиваем виртуальную машину в Yandex Cloud
  7. Веб-сервер на ВМ: метаданные, user-data и группы безопасности
  8. Переменные ввода и выходные значения в Terraform
  9. Кластер ВМ: группа экземпляров Yandex Compute Instance Group
  10. Балансировщик нагрузки: Application Load Balancer в Yandex Cloud
  11. Состояние Terraform: что такое tfstate и чем опасен локальный файл
  12. Удалённое хранилище состояния: бэкенд на Yandex Object Storage
  13. Изоляция состояния: рабочие области против раскладки по папкам
  14. Источники данных и terraform_remote_state: связываем компоненты
  15. Модули Terraform: переиспользуем инфраструктуру
  16. Входные, локальные и выходные переменные модуля
  17. Версионирование модулей и подводные камни
  18. Циклы в Terraform: параметр count
  19. Циклы в Terraform: for_each по множествам и картам
  20. Выражения for и строковые директивы
  21. Условная логика: count-трюк, for_each и директива if
  22. Встроенные функции, типы и выражения HCL
  23. Развёртывание без простоя: create_before_destroy
  24. Подводные камни Terraform и рефакторинг с блоком moved
  25. Управление секретами: основы и типы
  26. Инструменты управления секретами: Yandex Lockbox, Vault, SOPS
  27. Аутентификация провайдера и секреты: сервисные аккаунты и OIDC
  28. Секреты в ресурсах и состоянии, ephemeral-значения
  29. Провайдеры Terraform: установка, версии, required_providers
  30. Несколько копий одного провайдера: alias и мультизона
  31. Несколько провайдеров и аккаунтов: configuration_aliases
  32. Terraform, Docker и Kubernetes: Managed Kubernetes в Yandex Cloud
  33. Код Terraform промышленного уровня: почему это долго
  34. Мелкие компонуемые модули вместо монолита
  35. Тестируемые модули и проверки: validation, precondition, postcondition
  36. Версионирование, публикация модулей и Terragrunt
  37. Ручное тестирование Terraform и очистка ресурсов
  38. Автоматические тесты на Terratest: модульные тесты
  39. Интеграционные и сквозные тесты, пирамида тестирования
  40. Нативный terraform test и статический анализ
  41. Внедрение Terraform в команде: процессы и культура
  42. Конвейер развёртывания прикладного кода
  43. Конвейер инфраструктурного кода и золотое правило Terraform
  44. Стиль, ревью и CI/CD-инструменты: Atlantis, TACOS, policy as code
  45. Что нового в Terraform 1.3-1.10: моды, импорт, провайдер-функции, Stacks
  46. OpenTofu в 2026: чем живёт форк и как мигрировать
  47. Сертификация HashiCorp Terraform Associate и карьера
Боль, с которой все начинают

Представь обычный вечер пятницы. Тимлид пишет в чат: "нужен ещё один сервер под стейджинг, как прод, только послабее". И ты идёшь в веб-консоль облака, кликаешь по кнопкам, выбираешь образ, диск, сеть, группу безопасности, копируешь ключи... и через сорок минут вроде бы готово. Только вот через месяц выясняется, что на этом сервере забыли открыть нужный порт, версия ядра другая, а файрвол настроен "почти как на проде". Почти. И вот это "почти" однажды роняет тебе релиз.

Так жили сисадмины долгие годы, и эпоха называлась гордо - "настройка руками". Каждый сервер был как ручная работа мастера: уникальный, неповторимый и абсолютно невоспроизводимый. Если машина умирала, восстановление превращалось в археологические раскопки по старым тикетам и памяти коллеги, который уже уволился. Знакомо? Если нет - повезло, читай дальше, чтобы и не познакомиться.

У этой ручной модели есть три классических беды, и у каждой есть имя.

Страх простоя. Любое изменение делается на живой системе вручную, а значит может что-то сломать. В итоге к серверам боятся прикасаться. "Работает - не трогай" - это не мудрость, это симптом того, что ты не контролируешь свою инфраструктуру.

Дрейф конфигурации (configuration drift). Это когда два сервера, которые должны быть одинаковыми, медленно расходятся. Тут кто-то подправил конфиг по-быстрому, там накатил пакет вручную, и через полгода у тебя зоопарк уникальных снежинок вместо стада одинаковых коров. А отлаживать баг, который воспроизводится только на одной машине из пяти - отдельный вид удовольствия.

Неповторяемость. Ты не можешь нажать кнопку и получить такую же среду ещё раз. Каждое развёртывание - это импровизация. А импровизация в инфраструктуре - это лотерея, где главный приз обычно ночной алёрт.

Изображение

Восход DevOps и идея описать всё кодом

Движение DevOps выросло как раз из попытки склеить две враждующие планеты: разработчиков, которые хотят катить изменения каждый день, и эксплуатацию, которая хочет стабильности и поэтому ничего не хочет менять. Решение оказалось элегантным: а давайте относиться к инфраструктуре так же, как к коду. То есть описывать её текстом, хранить в git, ревьюить, тестировать и разворачивать автоматически.

Это и есть инфраструктура как код (infrastructure as code, сокращённо iac). Идея простая до неприличия: вместо того чтобы кликать в консоли или выполнять команды по памяти, ты пишешь файл-описание желаемого состояния. "Хочу две виртуалки вот с такими параметрами, одну сеть, один балансировщик". А специальный инструмент берёт это описание и приводит реальное облако к тому, что написано.

Ключевое слово здесь - декларативность. Ты описываешь не последовательность шагов ("создай диск, потом создай ВМ, потом подключи диск"), а конечную картину мира - что должно быть в итоге. А как туда прийти, инструмент разбирается сам. Это принципиально отличается от обычного скрипта на bash, который тупо выполняет команды сверху вниз и понятия не имеет, что половина из них уже была сделана вчера.

Что нам это даёт на практике:
  • Повторяемость. Один и тот же код развернёт одинаковую среду хоть десять раз. Прод, стейдж, тест - близнецы, а не дальние родственники.
  • Версионирование и ревью. Инфраструктура лежит в git. Видно, кто, когда и зачем поменял правило файрвола. Изменения проходят через pull request, и коллега может сказать "стоп, ты тут открываешь базу в интернет" до того, как это случится.
  • Документация как код. Сам код и есть описание системы. Он не врёт и не устаревает, как вики-страница, которую последний раз трогали два года назад.
  • Скорость и тестируемость. Новую среду поднимаешь командой за минуты. А ещё можно прогнать изменения в тестовом окружении и убедиться, что ничего не разъехалось, прежде чем катить в прод.
Где здесь Terraform

Инструментов для iac много, но Terraform стал фактическим стандартом для управления облачной инфраструктурой. Он от компании HashiCorp, работает с десятками провайдеров (Yandex Cloud, AWS, и так далее) через единый язык описания - HCL (HashiCorp Configuration Language). Один синтаксис, чтобы рулить хоть виртуалками, хоть DNS, хоть сетями.

Кстати, важная новость последних лет: после смены лицензии Terraform появился полностью открытый форк - opentofu. Он совместим по языку и подходам, так что почти всё, что ты выучишь про Terraform, применимо и к нему. В этом курсе мы говорим "terraform", но держи в голове, что opentofu - живая и популярная альтернатива.

Как Terraform думает. Он держит у себя файл состояния - terraform state. Это снимок того, что он уже создал в реальном мире. Когда ты меняешь код, Terraform сравнивает три вещи: что написано в коде, что записано в state и что есть на самом деле в облаке. Дальше он считает разницу и показывает план.

Рабочий цикл сводится к двум главным командам, которые ты будешь набирать тысячи раз: terraform plan и terraform apply. Сначала plan - "вот что я собираюсь сделать, посмотри". Потом apply - "ок, делай". Это и есть та самая магия terraform plan apply: ты всегда видишь будущее до того, как нажмёшь кнопку. Никаких сюрпризов.

Чтобы это не звучало как абстракция, вот как выглядит кусочек описания на HCL для Yandex Cloud. Не пугайся синтаксиса, разбирать его детально мы будем в следующих главах, сейчас просто прочувствуй идею:

Код: Выделить всё

# Подключаем провайдера Yandex Cloud
terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}

provider "yandex" {
  zone = "ru-central1-a"
}

# Описываем сеть и подсеть
resource "yandex_vpc_network" "net" {
  name = "demo-network"
}

resource "yandex_vpc_subnet" "subnet" {
  name           = "demo-subnet"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.net.id
  v4_cidr_blocks = ["10.0.0.0/24"]
}
Прочитай эти строки вслух. "Ресурс - сеть с именем demo-network. Ресурс - подсеть в зоне ru-central1-a, привязанная к этой сети, с диапазоном адресов 10.0.0.0/24". Это не команды, это описание. И заметь связь: подсеть ссылается на сеть через yandex_vpc_network.net.id. Terraform сам понимает, что сначала надо создать сеть, а потом подсеть. Порядок он выведет из зависимостей, тебе об этом думать не нужно.

Теперь представь, что весь твой прод описан вот так. Захотел вторую такую же среду - скопировал, поменял пару имён, terraform apply. Минута, и готово. Сравни с сорока минутами кликанья из начала урока.

Типичные грабли новичка
  • Лезть руками в облако в обход кода. Самый частый грех. Подправил что-то в веб-консоли "по-быстрому", а Terraform про это не знает. Возникает рассинхрон между state и реальностью, и при следующем apply он может попытаться откатить твою правку. Правило простое: если инфраструктурой управляет Terraform - меняй её только через Terraform.
  • Путать декларативное с императивным. Не пытайся писать HCL как пошаговый скрипт. Ты описываешь желаемый итог, а не процесс. Это перестройка мышления, и поначалу мозг сопротивляется.
  • Недооценивать state. Файл состояния - это сердце Terraform. Потеряешь его - и инструмент забудет, чем управлял. Хранить его как попало (например, локально на одном ноутбуке в команде из пяти человек) - прямая дорога к боли. Но это тема отдельной главы.
Мини-лаба: повтори в голове

Ставить ничего не нужно, урок концептуальный. Прокрути мысленно:
  • Вспомни любую систему, которую ты или твои коллеги настраивали руками. Где там притаился configuration drift? Какие шаги никто не записал?
  • Возьми пример HCL выше и проговори словами, что он описывает. Найди строчку, где подсеть зависит от сети.
  • Объясни сам себе разницу между plan и apply на бытовом примере. Подсказка: plan - это посмотреть смету ремонта, apply - вызвать бригаду.
Контрольные вопросы
  • Что такое дрейф конфигурации и почему ручная настройка серверов его порождает?
  • Чем декларативный подход (описываю результат) отличается от императивного (описываю шаги)? Почему iac выбирает первый?
  • Зачем Terraform нужен файл terraform state и что он хранит?
  • В чём разница между командами terraform plan и terraform apply?
Что запомнить

Инфраструктура как код - это про то, чтобы перестать кликать мышкой и начать описывать своё облако текстом, который живёт в git. Это убивает три главные беды ручного админства: страх простоя, дрейф конфигурации и неповторяемость. Terraform - инструмент номер один в этом мире, работает декларативно, помнит сделанное в state и всегда показывает план перед применением. А opentofu - его открытый собрат, на котором всё это тоже работает. Дальше мы поставим Terraform и поднимем первую реальную виртуалку в Yandex Cloud.
👍3 ❤️1 🔥 😄 🤔1
Аватара пользователя
ma3uk
Сообщения: 1
Зарегистрирован: 13 май 2026, 20:41

Re: Что такое инфраструктура как код и зачем она нужна

Сообщение ma3uk »

Спасибо, наконец-то дошло чем декларативность отличается от обычного скрипта. Я как раз всё пытался писать терраформ как баш по шагам, теперь понятно почему он ругался.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
rhys1
Сообщения: 1
Зарегистрирован: 15 май 2026, 19:00

Re: Что такое инфраструктура как код и зачем она нужна

Сообщение rhys1 »

А вопрос про state можно? Если я случайно удалю этот файл, terraform реально забудет всё что создал и попробует поднять дубли? Звучит страшновато, надеюсь дальше будет про то как его правильно хранить.
👍2 ❤️ 🔥 😄 🤔1
Ответить
Следующая глава →
Категории инструментов IaC: чем отличаются Ansible, Packer, Kubernetes и Terraform

Все главы курса «Terraform: инфраструктура как код на Yandex Cloud»

Поделиться темой: ✈ Telegram VK

Вернуться в «Terraform: инфраструктура как код на Yandex Cloud»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость