Terraform vs Pulumi vs OpenTofu в 2026: выбор IaC-инструмента
Содержание
Infrastructure as Code в 2026 году переживает важнейший момент за свою историю. Решение HashiCorp сменить лицензию Terraform на BSL в августе 2023 года раскололо экосистему на три лагеря: тех, кто остался с Terraform, тех, кто мигрировал на open-source форк OpenTofu, и тех, кто воспользовался моментом для перехода на Pulumi с его подходом «инфраструктура на настоящих языках программирования». Terraform по-прежнему удерживает 32.8% рынка IaC, но конкуренция никогда не была такой острой.
Эта статья — детальное сравнение Terraform 1.14, Pulumi 3.x и OpenTofu 1.11 для DevOps-инженеров, SRE и тимлидов, которые выбирают IaC-инструмент для нового проекта или оценивают целесообразность миграции с Terraform.
Краткий обзор участников
Terraform — рыночный лидер под новой лицензией
Terraform создан HashiCorp в 2014 году и фактически определил категорию Infrastructure as Code. Текущая версия — Terraform 1.14.5 (11 февраля 2026). На GitHub репозиторий hashicorp/terraform набрал около 45 000 звёзд.
Terraform использует собственный декларативный язык HCL (HashiCorp Configuration Language) для описания инфраструктуры. Провайдерная модель поддерживает тысячи интеграций: AWS, Azure, GCP, Kubernetes, Cloudflare, Datadog и сотни других. Terraform Registry содержит тысячи готовых модулей для повторного использования.
Ключевое изменение: с версии 1.6 Terraform распространяется под лицензией BSL 1.1 (Business Source License). Это позволяет свободное использование для внутренней инфраструктуры, но запрещает коммерческое предоставление Terraform как управляемого сервиса без соглашения с HashiCorp. На практике это означает, что большинство компаний могут продолжать использовать Terraform бесплатно, но SaaS-платформы для управления инфраструктурой (конкуренты HCP Terraform) — не могут.
Terraform 1.14 включает Terraform Stacks — новый механизм для управления группами конфигураций как единым целым, а также улучшенный фреймворк тестирования модулей и экспериментальную поддержку генеративного AI для HCL.
OpenTofu — open-source форк с инновациями
OpenTofu — это community-driven форк Terraform, созданный в ответ на смену лицензии. Проект управляется Linux Foundation и в апреле 2025 года принят в CNCF на уровне Sandbox. Текущая версия — OpenTofu 1.11 (поддерживается до августа 2026). На GitHub — около 23 000 звёзд, а количество контрибьюторов выросло втрое с момента запуска — до 160+.
OpenTofu сохраняет 100% обратную совместимость с конфигурациями Terraform 1.5.x и распространяется под лицензией MPL 2.0 (полностью open-source, без коммерческих ограничений).
Но OpenTofu — это не просто «Terraform без BSL». Проект активно добавляет функции, которых нет в Terraform:
- Шифрование state-файлов (с версии 1.7) — AES-GCM шифрование с поддержкой AWS KMS, GCP KMS, Azure Key Vault, OpenBao и PBKDF2
- Provider-defined functions (1.7) — возможность провайдерам определять собственные функции
- Early variable evaluation (1.8) — переменные в ранее запрещённых контекстах (источники модулей, конфигурация backend)
- Provider iteration с for_each (1.9) — итерация по провайдерам
- Lifecycle destroy meta-argument (1.11) — управление поведением при удалении ресурсов
Pulumi — инфраструктура на настоящих языках
Pulumi основан в 2017 году и предлагает радикально другой подход: вместо DSL (как HCL) используются настоящие языки программирования — TypeScript, Python, Go, .NET (C#/F#), Java и YAML. Текущая версия — Pulumi 3.223.0. На GitHub pulumi/pulumi — около 22 000 звёзд.
Pulumi поддерживает 150+ облачных провайдеров и предоставляет нативную интеграцию с Kubernetes, включая сценарии canary-деплоя с Prometheus и автоматической инъекцией Envoy sidecar.
Главная новость 2026 года: Pulumi добавил нативную поддержку Terraform и HCL. CLI Pulumi теперь может интерпретировать HCL-код через Terraform bridge, а Pulumi Cloud может служить state backend для Terraform и OpenTofu. Эта функция находится в приватной бета с GA, ожидаемым в Q1 2026.
Pulumi распространяется под лицензией Apache 2.0 (open-source). Pulumi Cloud (управляемый state backend, dashboard, RBAC) имеет бесплатный tier: 150 000 Pulumi Credits в месяц (до ~200 облачных ресурсов) и 3 000 бесплатных deployment-минут для всех тарифов.
Языки и Developer Experience
Различие в подходе к языку описания инфраструктуры — фундаментальное и определяет весь опыт работы с инструментом.
HCL: декларативность vs ограничения
Terraform и OpenTofu используют HCL — декларативный язык, специально разработанный для описания инфраструктуры:
# Terraform / OpenTofu — HCL
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "web-server"
Environment = var.environment
}
}
resource "aws_security_group" "web_sg" {
name = "web-sg"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
HCL прост для чтения и понимания, имеет низкий порог входа для DevOps-инженеров без глубокого опыта программирования. Однако HCL не является полноценным языком программирования: в нём ограничены циклы, условия, отсутствуют объекты, классы и нормальные абстракции. Практиковать DRY (Don’t Repeat Yourself) с HCL крайне сложно для больших инфраструктур.
Pulumi: полная мощь языков программирования
Pulumi позволяет использовать знакомые языки с полным набором возможностей — циклы, функции, классы, интерфейсы, пакетные менеджеры, тестовые фреймворки:
// Pulumi — TypeScript
import * as aws from "@pulumi/aws";
const webServer = new aws.ec2.Instance("web", {
ami: "ami-0c55b159cbfafe1f0",
instanceType: "t3.micro",
tags: {
Name: "web-server",
Environment: config.require("environment"),
},
});
const webSg = new aws.ec2.SecurityGroup("web-sg", {
ingress: [{
fromPort: 80,
toPort: 80,
protocol: "tcp",
cidrBlocks: ["0.0.0.0/0"],
}],
});
# Pulumi — Python
import pulumi_aws as aws
web_server = aws.ec2.Instance("web",
ami="ami-0c55b159cbfafe1f0",
instance_type="t3.micro",
tags={
"Name": "web-server",
"Environment": config.require("environment"),
})
Преимущество Pulumi: разработчики могут переиспользовать навыки языков программирования, использовать IDE с автодополнением, рефакторить код стандартными инструментами и создавать абстракции любого уровня сложности.
Один практик отметил: «Даже при меньшей документации я мог решать проблемы с Pulumi, потому что читал код на Go — единственной сложностью оставались концепции AWS, а не язык инструмента».
Тестирование инфраструктуры
Тестирование — область, где Pulumi значительно опережает конкурентов:
| Возможность | Terraform/OpenTofu | Pulumi |
|---|---|---|
| Unit-тесты | Нет (внешние: Terratest) | Нативные (pytest, Jest, Go test) |
| Property-тесты | Нет | Нативные |
| Integration-тесты | Внешние (Terratest) | Нативные |
| Мок-провайдеры | Ограничено | Полная поддержка |
| Тестовый фреймворк | terraform test (базовый) | Любой фреймворк языка |
// Pulumi — unit-тест на TypeScript с Mocha
import * as pulumi from "@pulumi/pulumi/runtime";
import { expect } from "chai";
describe("Infrastructure", () => {
it("should create an instance with correct tags", async () => {
const infra = await import("../index");
const tags = await new Promise((resolve) =>
infra.webServer.tags.apply(resolve)
);
expect(tags).to.have.property("Environment");
});
});
Лицензирование: главный водораздел
Лицензирование стало ключевым фактором выбора IaC-инструмента после 2023 года.
| Аспект | Terraform | OpenTofu | Pulumi |
|---|---|---|---|
| Лицензия | BSL 1.1 | MPL 2.0 (open-source) | Apache 2.0 (open-source) |
| Использование для внутренних нужд | Бесплатно | Бесплатно | Бесплатно |
| Коммерческий SaaS на базе инструмента | Запрещено без соглашения | Разрешено | Разрешено |
| Управляемый облачный сервис | HCP Terraform (от $0 до $70/мес/пользователь) | Нет (self-hosted или сторонние) | Pulumi Cloud (free tier: 150K credits/мес) |
| Governance | HashiCorp (IBM) | Linux Foundation / CNCF | Pulumi Corp. (VC-funded) |
Для большинства компаний BSL Terraform не является проблемой — она ограничивает только создание конкурирующих SaaS-платформ. Но для организаций, которым принципиально использование полностью open-source инструментов (government, крупный enterprise с политиками compliance), OpenTofu и Pulumi предоставляют гарантии, которых Terraform уже не может дать.
Безопасность: шифрование state
State-файл — одна из самых чувствительных частей IaC: он содержит полное описание инфраструктуры, включая секреты, IP-адреса и конфигурации. Защита state-файла критична.
OpenTofu: нативное шифрование
OpenTofu — единственный из трёх инструментов, предоставляющий нативное client-side шифрование state-файлов. Эта функция, появившаяся в версии 1.7, шифрует state до отправки на backend с использованием AES-GCM:
# OpenTofu — шифрование state через AWS KMS
terraform {
encryption {
key_provider "aws_kms" "main" {
kms_key_id = "arn:aws:kms:us-east-1:123456789:key/abcd-1234"
region = "us-east-1"
}
method "aes_gcm" "primary" {
keys = key_provider.aws_kms.main
}
state {
method = method.aes_gcm.primary
enforced = true
}
plan {
method = method.aes_gcm.primary
enforced = true
}
}
}
Поддерживаемые провайдеры ключей: AWS KMS, GCP KMS, Azure Key Vault, OpenBao (open-source форк Vault) и PBKDF2 (пароль). Даже при компрометации backend-хранилища state-файл остаётся нечитаемым без приватного ключа.
Terraform: шифрование отсутствует
Terraform не поддерживает нативное шифрование state-файлов. Сообщество запрашивало эту функцию годами, но HashiCorp так и не реализовал её. Защита state зависит полностью от backend: S3 с SSE, Azure Blob с encryption — но это шифрование на стороне хранилища, а не client-side.
Pulumi: автоматическое шифрование секретов
Pulumi шифрует отдельные секреты в state-файле автоматически, используя Pulumi Cloud, passphrase или внешний KMS. Это не полное шифрование всего state (как в OpenTofu), но секретные значения защищены:
// Pulumi — секрет шифруется автоматически
const dbPassword = new pulumi.Config().requireSecret("dbPassword");
const db = new aws.rds.Instance("mydb", {
password: dbPassword, // зашифровано в state
});
Экосистема провайдеров
Широта поддержки облачных провайдеров и сервисов определяет применимость инструмента.
Terraform имеет крупнейшую экосистему: Terraform Registry содержит тысячи провайдеров и модулей. Практически любой облачный сервис, SaaS-платформа или инфраструктурный компонент имеет Terraform-провайдер. Это главное конкурентное преимущество Terraform, которое формировалось 10+ лет.
OpenTofu полностью совместим с Terraform-провайдерами. Все провайдеры для AWS, Azure, GCP, Kubernetes и других сервисов работают с OpenTofu без модификаций. OpenTofu Registry содержит те же провайдеры и модули. Это делает миграцию с Terraform практически бесшовной.
Pulumi поддерживает 150+ облачных провайдеров, включая все крупные облака и популярные SaaS-сервисы. Pulumi использует Terraform bridge для доступа к Terraform-провайдерам, что расширяет покрытие. Однако не все Terraform-провайдеры доступны через bridge, и некоторые edge-кейсы могут потребовать обходных решений.
# Terraform / OpenTofu: инициализация провайдера
terraform init # или: tofu init
# Pulumi: провайдеры устанавливаются как обычные пакеты
npm install @pulumi/aws
pip install pulumi-aws
go get github.com/pulumi/pulumi-aws/sdk/v6/go/aws
Миграция с Terraform
На OpenTofu
Миграция с Terraform на OpenTofu — наиболее простой путь из всех возможных:
- Замена бинарника: замените
terraformнаtofuв PATH - State-файлы: OpenTofu использует тот же формат state, что и Terraform 1.5.x — конвертация не нужна
- Конфигурации: файлы
.tfработают без изменений - CI/CD: замените
terraformнаtofuв пайплайнах
# Пример миграции — буквально одна команда
# Вместо:
terraform plan
terraform apply
# Используйте:
tofu plan
tofu apply
Рекомендуемый путь миграции:
- С Terraform ≤ 1.5.x → мигрируйте на OpenTofu 1.6.2, затем обновляйтесь
- С Terraform 1.8.x → мигрируйте на OpenTofu 1.8.2, затем обновляйтесь
Основные подводные камни:
- Если используете
registry.terraform.ioв полных именах провайдеров — замените на короткую форму (hashicorp/awsвместоregistry.terraform.io/hashicorp/aws) - Функции, специфичные для Terraform 1.6+ (Stacks), не имеют аналогов в OpenTofu
- CI/CD-пайплайны требуют обновления команд
На Pulumi
Миграция с Terraform на Pulumi — более трудоёмкий процесс, но Pulumi предоставляет инструменты:
# Импорт существующей Terraform конфигурации
pulumi convert --from terraform --language typescript
# Импорт Terraform state
pulumi import --from terraform ./terraform.tfstate
pulumi convert транслирует HCL в выбранный язык программирования. Результат обычно требует ручной доработки, но базовая структура сохраняется. Для больших инфраструктур миграция может занять недели.
Новинка 2026: Pulumi Cloud теперь может служить state backend для Terraform/OpenTofu, что позволяет гибридный подход — управлять частью инфраструктуры через HCL, а часть перевести на Pulumi.
Масштабирование и производительность
Скорость выполнения
Для IaC-инструментов скорость plan и apply операций имеет значение при масштабных инфраструктурах:
- Terraform и OpenTofu показывают сопоставимую производительность, так как имеют общую кодовую базу. Plan для 500+ ресурсов занимает 30–120 секунд в зависимости от провайдеров
- Pulumi может быть быстрее для инкрементальных обновлений благодаря более умному отслеживанию зависимостей, но первый
pulumi upна крупном проекте сопоставим по времени сterraform apply
Управление state
| Аспект | Terraform | OpenTofu | Pulumi |
|---|---|---|---|
| Формат state | JSON | JSON (совместимый с TF) | JSON (собственный формат) |
| Шифрование state | Нет (зависит от backend) | Client-side AES-GCM | Шифрование секретов |
| Удалённый backend | S3, GCS, Azure Blob, HCP Terraform | S3, GCS, Azure Blob + шифрование | Pulumi Cloud, S3, Azure Blob |
| State locking | Да | Да | Да |
| Workspace/Stack management | Workspaces | Workspaces | Stacks |
Монорепо и большие проекты
Terraform/OpenTofu: управление крупной инфраструктурой разбивается на множество state-файлов с terraform_remote_state для cross-referencing. Инструменты вроде Terragrunt помогают управлять зависимостями между модулями.
Pulumi: позволяет использовать стандартные монорепо-паттерны языков программирования (npm workspaces, Go modules), а Stack references обеспечивают типобезопасные ссылки между стеками.
Сводная таблица сравнения
| Критерий | Terraform 1.14 | OpenTofu 1.11 | Pulumi 3.x |
|---|---|---|---|
| Лицензия | BSL 1.1 | MPL 2.0 (open-source) | Apache 2.0 |
| Язык конфигурации | HCL | HCL (совместимый) | TypeScript, Python, Go, .NET, Java, YAML |
| Шифрование state | Нет | Client-side AES-GCM | Шифрование секретов |
| Провайдеры | 3000+ | Совместим с Terraform | 150+ (+ Terraform bridge) |
| Тестирование | Базовое (terraform test) | Базовое | Нативное (pytest, Jest, Go test) |
| Governance | HashiCorp (IBM) | Linux Foundation / CNCF | Pulumi Corp. |
| Миграция с Terraform | — | Drop-in (замена бинарника) | pulumi convert + доработка |
| GitHub Stars | ~45 000 | ~23 000 | ~22 000 |
| Кривая обучения | Средняя (HCL) | Средняя (HCL) | Низкая (если знаете язык) |
| IDE-поддержка | VS Code, JetBrains (HCL) | VS Code, JetBrains (HCL) | Полная (любой язык) |
| CI/CD интеграция | Нативная (GitHub Actions, GitLab) | Нативная | Нативная |
| Облачный сервис | HCP Terraform | Нет (self-hosted) | Pulumi Cloud |
| AI-интеграция | Экспериментальная | Нет | Pulumi AI (Neo) |
Когда выбрать Terraform
Terraform остаётся лучшим выбором, когда:
- Команда уже инвестировала в Terraform — огромная кодовая база на HCL, настроенные пайплайны, обученные инженеры. Миграция может быть неоправданной
- Нужна максимальная экосистема провайдеров — если ваша инфраструктура включает редкие SaaS-сервисы, вероятность найти готовый Terraform-провайдер выше
- HCP Terraform (бывший Terraform Cloud) — полностью управляемый workflow с RBAC, Sentinel policies, cost estimation и audit logging
- Terraform Stacks — для управления группами конфигураций как единым целым (новая функция, аналогов у конкурентов нет)
- BSL-лицензия не является проблемой — для подавляющего большинства компаний ограничения BSL не актуальны
Когда выбрать OpenTofu
OpenTofu предпочтительнее, когда:
- Open-source принципиален — government-проекты, compliance-требования, корпоративные политики, требующие полностью открытого ПО
- Безопасность state-файлов критична — нативное шифрование state через KMS — уникальная функция, которой нет ни у Terraform, ни у Pulumi
- Миграция с Terraform должна быть безболезненной — OpenTofu принимает существующие .tf файлы и state без изменений
- CNCF-экосистема — если ваша инфраструктура строится на CNCF-проектах (Kubernetes, Prometheus, Envoy), OpenTofu вписывается в ту же философию
- Инновации без ожидания HashiCorp — for_each на провайдерах, early variable evaluation, lifecycle destroy — функции, которые community реализовало быстрее
Когда выбрать Pulumi
Pulumi — лучший выбор, когда:
- Команда — прежде всего разработчики — если ваши инженеры думают на TypeScript, Python или Go, а не на HCL, Pulumi даёт им мощь привычных инструментов
- Тестирование инфраструктуры критично — нативные unit/integration тесты на знакомых фреймворках (Jest, pytest) без внешних зависимостей
- Сложная бизнес-логика в инфраструктуре — динамическая генерация ресурсов, условная логика, абстракции уровня приложения — всё то, с чем HCL справляется с трудом
- Cloud-native SaaS — Pulumi Cloud предоставляет готовые dashboard, RBAC, drift detection и AI-ассистент Neo
- Гибридный подход — с 2026 года Pulumi Cloud может быть state backend для Terraform/OpenTofu, что позволяет плавную миграцию по частям
- Kubernetes-native разработка — Pulumi имеет нативную интеграцию с Kubernetes, включая canary-деплой и service mesh
Заключение
В 2026 году выбор IaC-инструмента определяется тремя вопросами: философия лицензирования, предпочитаемый язык и потребность в безопасности state-файлов.
Terraform остаётся безопасным выбором по умолчанию. Крупнейшая экосистема, наибольшее количество документации и специалистов на рынке, зрелые enterprise-функции (HCP Terraform). BSL-лицензия — не проблема для 95% компаний. Если у вас работающая Terraform-инфраструктура и нет острой необходимости мигрировать — оставайтесь на Terraform.
OpenTofu — это логичный выбор для тех, кому важен open-source и безопасность. Бесшовная миграция с Terraform, уникальное шифрование state-файлов, поддержка CNCF и активное community делают OpenTofu привлекательным для enterprise с жёсткими compliance-требованиями. Рекомендация: для новых проектов на HCL начинайте с OpenTofu вместо Terraform — вы получите те же возможности плюс бонусы, без рисков лицензионных ограничений.
Pulumi — это будущее IaC для developer-first команд. Если ваша команда пишет на TypeScript или Python и хочет применять лучшие практики разработки (тестирование, абстракции, CI/CD) к инфраструктуре, Pulumi предоставляет опыт, который HCL-инструменты не могут повторить. А нативная поддержка HCL в 2026 году делает Pulumi универсальной платформой, способной объединить все подходы к IaC.
Прагматичная рекомендация: OpenTofu для HCL-команд (безопасно, бесплатно, совместимо), Pulumi для developer-команд (мощно, тестируемо, гибко). А некоторые организации уже практикуют гибридный подход: Terraform/OpenTofu для стандартной инфраструктуры, Pulumi — для application-focused стеков.
Источники
- Terraform v1.14.5 Release — GitHub
- OpenTofu Guide: Features, Installation & Migration (2026) — StateGraph
- Pulumi Adds Native Support for Terraform and HCL — InfoQ
- Infrastructure as Code: Terraform vs OpenTofu vs Pulumi — A 2026 Comparison — Dasroot
- OpenTofu State and Plan Encryption — OpenTofu Docs
- Terraform License Change (BSL) — Impact on Users — Spacelift
- OpenTofu | CNCF — CNCF
- How To Choose Between Terraform, Pulumi, And OpenTofu — Open Source For You
- Pulumi Pricing — Pulumi