Когда в одной компании одновременно живут голые серверы, гипервизоры, облака и десятки Kubernetes-кластеров, управление всем этим зоопарком превращается в отдельную инженерную дисциплину. Архитектор команды MWS B2B Store Вячеслав Швецов разобрал, как два главных IaC-инструмента - Terraform и Pulumi - справляются с этой задачей в условиях реальной гетерогенной среды.
Разные команды, разные языки, один хаос
Проблема не только техническая. К физической разнородности инфраструктуры добавляется организационная: десятки автономных команд - бэкенд, UI, data engineering, ML, платформа - пишут инфраструктурный код каждая по-своему. Одни привыкли к HCL, другие предпочитают Python или TypeScript, третьи до сих пор поднимают окружения через docker compose up -d.
Задача инженера платформы здесь - не насадить единый стандарт силой, а найти инструмент, который не сломает уже работающие процессы. И при этом даст контроль над состоянием инфраструктуры, позволит стандартизировать базовые паттерны и предсказуемо реагировать на ручные правки.
Terraform: проверенный, но спорный
Terraform появился в 2014 году как ответ на отсутствие облачно-независимого open source инструмента. HashiCorp создала собственный декларативный язык HCL и гибкую архитектуру провайдеров - и это сработало. Инструмент стал индустриальным стандартом.
Перелом наступил в августе 2023-го: HashiCorp сменила лицензию с открытой MPL 2.0 на Business Source License 1.1. Сообщество восприняло это болезненно. Результат - форк OpenTofu под крылом Linux Foundation, который сегодня активно набирает сторонников.
Pulumi: инфраструктура как настоящий код
Pulumi вышел в 2018 году с принципиально иной идеей: не DSL, а полноценные языки программирования. Python, TypeScript, Go - команды получили привычные инструменты с тестами, абстракциями и пакетными менеджерами. Лицензия Apache 2.0, монетизация через SaaS-платформу.
Есть и декларативный режим на базе YAML - для тех, кто хочет описывать инфраструктуру, а не программировать её. Но у этого режима свои пределы: без циклов, без полноценных условий, без сложных вычислений. Для простых задач хватает. Для сложных - придётся брать код.
Главное отличие: под капотом
На поверхности оба инструмента решают одно и то же. Инициализация, просмотр плана, применение конфигурации - рабочий цикл практически идентичен. Но дальше начинаются различия, которые имеют значение при масштабировании.
- Управление состоянием (state) - фундамент обоих инструментов: именно через него детектируется дрейф инфраструктуры и обеспечивается идемпотентность операций
- Terraform хранит state в файле terraform.tfstate, Pulumi - в ~/.pulumi/stacks/
- Pulumi предлагает выразительность полноценного ЯП, Terraform - предсказуемость и широкую базу готовых провайдеров
- Дрейф инфраструктуры - ручные правки в обход кода - оба инструмента умеют обнаруживать, но реагируют по-разному
Пренебрежение управлением состоянием превращает IaC из инструмента контроля в источник операционного хаоса. Каждый apply становится лотереей. Это не метафора - это диагноз, с которым сталкиваются команды, недооценившие этот слой.