Хаос в ИТ-инфраструктуре. Terraform против Pulumi: кто наведёт порядок?
Хаос в ИТ-инфраструктуре. Terraform против Pulumi: кто наведёт порядок?

Когда в одной компании одновременно живут голые серверы, гипервизоры, облака и десятки 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 становится лотереей. Это не метафора - это диагноз, с которым сталкиваются команды, недооценившие этот слой.