infrastructure-as-code · 14 мин чтения

Terraform vs Pulumi vs OpenTofu в 2026: выбор IaC-инструмента

Terraform Pulumi OpenTofu IaC DevOps инфраструктура как код
Содержание

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/OpenTofuPulumi
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 года.

АспектTerraformOpenTofuPulumi
ЛицензияBSL 1.1MPL 2.0 (open-source)Apache 2.0 (open-source)
Использование для внутренних нуждБесплатноБесплатноБесплатно
Коммерческий SaaS на базе инструментаЗапрещено без соглашенияРазрешеноРазрешено
Управляемый облачный сервисHCP Terraform (от $0 до $70/мес/пользователь)Нет (self-hosted или сторонние)Pulumi Cloud (free tier: 150K credits/мес)
GovernanceHashiCorp (IBM)Linux Foundation / CNCFPulumi 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 — наиболее простой путь из всех возможных:

  1. Замена бинарника: замените terraform на tofu в PATH
  2. State-файлы: OpenTofu использует тот же формат state, что и Terraform 1.5.x — конвертация не нужна
  3. Конфигурации: файлы .tf работают без изменений
  4. 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

АспектTerraformOpenTofuPulumi
Формат stateJSONJSON (совместимый с TF)JSON (собственный формат)
Шифрование stateНет (зависит от backend)Client-side AES-GCMШифрование секретов
Удалённый backendS3, GCS, Azure Blob, HCP TerraformS3, GCS, Azure Blob + шифрованиеPulumi Cloud, S3, Azure Blob
State lockingДаДаДа
Workspace/Stack managementWorkspacesWorkspacesStacks

Монорепо и большие проекты

Terraform/OpenTofu: управление крупной инфраструктурой разбивается на множество state-файлов с terraform_remote_state для cross-referencing. Инструменты вроде Terragrunt помогают управлять зависимостями между модулями.

Pulumi: позволяет использовать стандартные монорепо-паттерны языков программирования (npm workspaces, Go modules), а Stack references обеспечивают типобезопасные ссылки между стеками.

Сводная таблица сравнения

КритерийTerraform 1.14OpenTofu 1.11Pulumi 3.x
ЛицензияBSL 1.1MPL 2.0 (open-source)Apache 2.0
Язык конфигурацииHCLHCL (совместимый)TypeScript, Python, Go, .NET, Java, YAML
Шифрование stateНетClient-side AES-GCMШифрование секретов
Провайдеры3000+Совместим с Terraform150+ (+ Terraform bridge)
ТестированиеБазовое (terraform test)БазовоеНативное (pytest, Jest, Go test)
GovernanceHashiCorp (IBM)Linux Foundation / CNCFPulumi Corp.
Миграция с TerraformDrop-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 стеков.

Источники

  1. Terraform v1.14.5 Release — GitHub
  2. OpenTofu Guide: Features, Installation & Migration (2026) — StateGraph
  3. Pulumi Adds Native Support for Terraform and HCL — InfoQ
  4. Infrastructure as Code: Terraform vs OpenTofu vs Pulumi — A 2026 Comparison — Dasroot
  5. OpenTofu State and Plan Encryption — OpenTofu Docs
  6. Terraform License Change (BSL) — Impact on Users — Spacelift
  7. OpenTofu | CNCF — CNCF
  8. How To Choose Between Terraform, Pulumi, And OpenTofu — Open Source For You
  9. Pulumi Pricing — Pulumi

Похожие статьи

← Все статьи