Гетерогенная ИТ-инфраструктура - bare-metal серверы, гипервизоры, облака и десятки Kubernetes-кластеров под одной крышей - превратилась в новую норму для зрелых технологических компаний. Навести в ней порядок через код становится задачей, где выбор инструмента решает всё.
Два лагеря, одна проблема
Архитектор команды MWS B2B Store Вячеслав Швецов разобрал два главных подхода к Infrastructure as Code - Terraform с его декларативным HCL и Pulumi, где инфраструктура описывается на полноценных языках программирования: Python, TypeScript, Go. Оба инструмента решают схожие задачи, но за внешней похожестью команд скрываются принципиально разные философии.
Terraform появился в 2014 году как ответ на отсутствие облачно-независимого open source инструмента. Pulumi вышел позже - в 2018-м - и сразу сделал ставку на разработчиков с сильной инженерной культурой. Ключевое различие не в синтаксисе, а в том, как каждый из них обрабатывает граф зависимостей, реагирует на дрейф инфраструктуры и масштабируется при росте числа команд.
State, дрейф и мутации: где зарыты грабли
Управление состоянием - не техническая деталь, а фундамент всей IaC-практики. Без корректного state-файла каждый apply превращается в лотерею. Terraform хранит состояние в открытом JSON, тогда как Pulumi шифрует секреты по умолчанию - через passphrase или облачный KMS. Это преимущество из коробки, но оно требует дисциплины при управлении ключами.
Детекция дрейфа - расхождения между желаемым и реальным состоянием инфраструктуры - работает у обоих через запросы к API провайдера. Разница в отношении к ручным правкам: Terraform воспринимает их как аномалию, Pulumi предлагает штатную команду refresh для синхронизации state с реальностью. В средах, где ручные изменения неизбежны, это существенно.
Почему HCL выигрывает в корпоративной среде
При всей мощи Pulumi-кода, HCL сохраняет несколько критических преимуществ для платформенных команд.
- Фиксированный синтаксис без динамического импорта и рефлексии - парсеры и линтеры строят AST без запуска самой программы
- Машиночитаемый план через terraform plan -json позволяет автоматически оценивать стоимость, проверять квоты и детектировать дрейф
- Зрелая экосистема Policy as Code: Checkov, tfsec, Terrascan, TFLint нативно покрывают CIS, NIST, PCI-DSS
- Прозрачный граф зависимостей (DAG) с визуализацией через Rover и graphviz
Pulumi сложнее поддаётся статическому анализу: чтобы полноценно проверить инфраструктуру, код нужно сначала запустить. Сканеры чаще ошибаются или пропускают скрытые проблемы.
Ни один инструмент не решает всё
Главный вывод звучит трезво: и Terraform, и Pulumi - это примитивы, а не готовые платформы. Они дают контроль над состоянием и детекцию дрейфа, но не отвечают на организационные вопросы. Как стандартизировать структуру репозиториев? Как применять политики безопасности одновременно на все окружения? Как не допустить появления инфраструктурных «снежинок» в разношёрстной среде из десятков автономных команд?
Поверх любого из инструментов всё равно придётся строить собственную инженерную платформу: писать обёртки, выстраивать CI/CD-пайплайны для валидации state, внедрять policy-as-code. Дисциплина и архитектурные решения решают больше, чем выбор между HCL и Python. Следующий шаг - инструменты оркестрации поверх Terraform и Pulumi: atmos.tools, Terramate и аналоги, которые закрывают именно этот пробел.