Перейти к содержанию
Innovialabs

OpenTofu, Terraform или Pulumi: какой инструмент IaC выбрать

Основы4 мин

Коротко

Выбирайте 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-тесты.
  • Легко создавать переиспользуемые компоненты для многих команд.
  • Риск: код инфраструктуры может стать таким же сложным, как код приложения. Нужна та же дисциплина, что и в обычной кодовой базе.

Сравнительная таблица

КритерийTerraformOpenTofuPulumi
ЛицензияBSLMPL 2.0 (open source)Apache 2.0 (движок)
ЯзыкHCLHCLTypeScript, Python, Go, C#, Java, YAML
ПровайдерыКрупнейшая экосистема, Terraform RegistryТе же провайдеры через собственный реестрНативные провайдеры и «мосты» к провайдерам Terraform
StateЛокально, удалённые бэкенды, HCP TerraformЛокально, удалённые бэкенды, встроенное шифрование statePulumi 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.
  • Небольшая команда, которая начинает с нуля — берите язык, который люди уже знают: экосистемы достаточно зрелые в любом случае.
  • Крупная организация — стандартизируйтесь на одном инструменте и вкладывайтесь в общие модули или компоненты.

Частые вопросы

Для большинства существующих конфигураций да: OpenTofu начинался как форк и сохраняет тот же HCL и протокол провайдеров. Со временем каждый инструмент добавляет свои возможности, поэтому перед использованием новой функции проверяйте release notes обоих.

Поможем с этим

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

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.