OpenTofu, Terraform или Pulumi: какой инструмент IaC выбрать
Основы4 минРедакция Innovialabs
Коротко
Выбирайте Terraform, если опираетесь на коммерческую экосистему HashiCorp, OpenTofu — если нужен тот же подход на HCL под открытой лицензией, и Pulumi — если команде удобнее описывать инфраструктуру на TypeScript, Python, Go или другом языке общего назначения.
Коротко
Все три инструмента описывают инфраструктуру кодом, сравнивают его с реальным состоянием и применяют разницу. Главные различия — лицензия, язык и экосистема:
- Terraform — исходный инструмент на HCL от HashiCorp, сейчас под Business Source License (BSL).
- OpenTofu — форк Terraform от сообщества под эгидой Linux Foundation, open source (MPL 2.0), в основном совместим с конфигурациями Terraform.
- Pulumi — инфраструктура на языках общего назначения: TypeScript, Python, Go, C#, Java, а также YAML. Движок открытый (Apache 2.0).
Если команда уже знает HCL, выбор в основном между Terraform и OpenTofu. Если разработчикам нужны циклы, типы и тесты на привычном языке, смотрите на Pulumi.
Лицензия после изменения Terraform
В 2023 году HashiCorp перевела Terraform с открытой лицензии MPL на BSL. Для большинства компаний, которые управляют Terraform своей инфраструктурой, на практике ничего не изменилось. Ограничение касается продуктов, которые конкурируют с коммерческими предложениями HashiCorp, например хостинговых сервисов автоматизации Terraform.
Что это значит для вас:
- Внутреннее использование Terraform в целом разрешено, но если вы строите платформу или сервис поверх него, изучите лицензию вместе с юристами.
- OpenTofu появился как ответ: открытый код, управление через фонд, тот же рабочий процесс.
- Ядро Pulumi открытое; управляемый Pulumi Cloud — коммерческий сервис, но вместо него можно использовать собственные бэкенды для state.
HCL против языков общего назначения
HCL (Terraform, OpenTofu)
- Декларативный и читаемый, даже для тех, кто не пишет код каждый день.
- Ограничивает «творчество», и конфигурации остаются предсказуемыми.
- Циклы и условия есть (
for_each,count, выражения), но сложная логика выглядит громоздко.
Языки общего назначения (Pulumi)
- Настоящие функции, классы, типы, менеджеры пакетов и unit-тесты.
- Легко создавать переиспользуемые компоненты для многих команд.
- Риск: код инфраструктуры может стать таким же сложным, как код приложения. Нужна та же дисциплина, что и в обычной кодовой базе.
Сравнительная таблица
| Критерий | Terraform | OpenTofu | Pulumi |
|---|---|---|---|
| Лицензия | BSL | MPL 2.0 (open source) | Apache 2.0 (движок) |
| Язык | HCL | HCL | TypeScript, Python, Go, C#, Java, YAML |
| Провайдеры | Крупнейшая экосистема, Terraform Registry | Те же провайдеры через собственный реестр | Нативные провайдеры и «мосты» к провайдерам Terraform |
| State | Локально, удалённые бэкенды, HCP Terraform | Локально, удалённые бэкенды, встроенное шифрование state | Pulumi Cloud или свой бэкенд (S3, Azure Blob, GCS, локально) |
| Управляемый сервис | HCP Terraform | Сторонние платформы | Pulumi Cloud |
Работа со state
Все три хранят state, который связывает код с реальными ресурсами. Базовые правила везде одинаковые:
- Храните state удалённо (объектное хранилище или управляемый сервис), а не только на ноутбуке.
- Включите блокировку, чтобы два человека не применяли изменения одновременно.
- Относитесь к state как к секрету: в нём могут быть пароли и ключи. Ограничьте доступ и шифруйте его.
- Разделяйте state по окружениям и компонентам, чтобы одна ошибка не задела всё сразу.
Сложность миграции
- Terraform → OpenTofu: обычно самый простой шаг. Для совместимых версий вы ставите бинарник
tofu, выполняетеtofu initи проверяете, чтоtofu planне показывает изменений. Проверьте возможности, которые после форка появились только в одном из инструментов. - Terraform → Pulumi: больше работы. У Pulumi есть конвертер из HCL и импорт существующих ресурсов, но сгенерированный код всё равно нужно проверить, модули — переделать в компоненты, а команду — обучить.
- Любая смена инструмента: начинайте с некритичного окружения, внимательно сравнивайте планы и держите резервную копию state.
# Проверяем, что OpenTofu видит ту же инфраструктуру
tofu init
tofu plan
Как выбрать под команду
- Ops-команда с готовым кодом на Terraform, использует HCP Terraform — оставайтесь на Terraform.
- Ops-команда, для которой важен open source или которая строит платформу для других — OpenTofu.
- Продуктовые разработчики, отвечающие за свою инфраструктуру, сильные в TypeScript или Python — Pulumi.
- Небольшая команда, которая начинает с нуля — берите язык, который люди уже знают: экосистемы достаточно зрелые в любом случае.
- Крупная организация — стандартизируйтесь на одном инструменте и вкладывайтесь в общие модули или компоненты.