OpenTofu в 2026: чем живёт форк и как мигрировать

Рейтинг: 71.7% · 16 голосов
Подробный курс по Terraform и OpenTofu на примерах Yandex Cloud: ресурсы и провайдеры, состояние и бэкенды, модули, циклы и условия HCL, секреты и Lockbox, тестирование, CI/CD и командная работа. С актуализацией на 2026 (Terraform 1.3-1.10, OpenTofu).
Ответить
Аватара пользователя
Vlad_DevOps
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

OpenTofu в 2026: чем живёт форк и как мигрировать

Сообщение Vlad_DevOps »

Оглавление курса (47)
  1. Что такое инфраструктура как код и зачем она нужна
  2. Категории инструментов IaC: чем отличаются Ansible, Packer, Kubernetes и Terraform
  3. Чем Terraform отличается от Ansible, Pulumi и CloudFormation
  4. Как работает Terraform под капотом и кто такой OpenTofu
  5. Установка Terraform и OpenTofu, подготовка Yandex Cloud
  6. Первый ресурс: разворачиваем виртуальную машину в Yandex Cloud
  7. Веб-сервер на ВМ: метаданные, user-data и группы безопасности
  8. Переменные ввода и выходные значения в Terraform
  9. Кластер ВМ: группа экземпляров Yandex Compute Instance Group
  10. Балансировщик нагрузки: Application Load Balancer в Yandex Cloud
  11. Состояние Terraform: что такое tfstate и чем опасен локальный файл
  12. Удалённое хранилище состояния: бэкенд на Yandex Object Storage
  13. Изоляция состояния: рабочие области против раскладки по папкам
  14. Источники данных и terraform_remote_state: связываем компоненты
  15. Модули Terraform: переиспользуем инфраструктуру
  16. Входные, локальные и выходные переменные модуля
  17. Версионирование модулей и подводные камни
  18. Циклы в Terraform: параметр count
  19. Циклы в Terraform: for_each по множествам и картам
  20. Выражения for и строковые директивы
  21. Условная логика: count-трюк, for_each и директива if
  22. Встроенные функции, типы и выражения HCL
  23. Развёртывание без простоя: create_before_destroy
  24. Подводные камни Terraform и рефакторинг с блоком moved
  25. Управление секретами: основы и типы
  26. Инструменты управления секретами: Yandex Lockbox, Vault, SOPS
  27. Аутентификация провайдера и секреты: сервисные аккаунты и OIDC
  28. Секреты в ресурсах и состоянии, ephemeral-значения
  29. Провайдеры Terraform: установка, версии, required_providers
  30. Несколько копий одного провайдера: alias и мультизона
  31. Несколько провайдеров и аккаунтов: configuration_aliases
  32. Terraform, Docker и Kubernetes: Managed Kubernetes в Yandex Cloud
  33. Код Terraform промышленного уровня: почему это долго
  34. Мелкие компонуемые модули вместо монолита
  35. Тестируемые модули и проверки: validation, precondition, postcondition
  36. Версионирование, публикация модулей и Terragrunt
  37. Ручное тестирование Terraform и очистка ресурсов
  38. Автоматические тесты на Terratest: модульные тесты
  39. Интеграционные и сквозные тесты, пирамида тестирования
  40. Нативный terraform test и статический анализ
  41. Внедрение Terraform в команде: процессы и культура
  42. Конвейер развёртывания прикладного кода
  43. Конвейер инфраструктурного кода и золотое правило Terraform
  44. Стиль, ревью и CI/CD-инструменты: Atlantis, TACOS, policy as code
  45. Что нового в Terraform 1.3-1.10: моды, импорт, провайдер-функции, Stacks
  46. OpenTofu в 2026: чем живёт форк и как мигрировать (вы здесь)
  47. Сертификация HashiCorp Terraform Associate и карьера
Представь, что ты три года писал инфраструктуру как код на Terraform, у тебя сотни модулей, CI завязан на terraform plan и terraform apply, а потом в один прекрасный день вендор меняет лицензию и говорит: "теперь так можно, а так нельзя". Именно это случилось в августе 2023 года, когда HashiCorp сменила лицензию Terraform с открытой MPL 2.0 на Business Source License (BSL) 1.1. Формально для тебя, если ты просто катишь свою инфраструктуру, ничего не поменялось. А вот для всех, кто строил продукты вокруг Terraform - платформы, обёртки, SaaS - внезапно появилось слово "нельзя конкурировать с HashiCorp". Сообщество это проглатывать не стало, и так на свет появился OpenTofu.

В этом уроке разберём, что такое OpenTofu в 2026 году, какие у него киллер-фичи, которых нет в Terraform, насколько больно (спойлер - почти не больно) мигрировать с одного на другое, и главный вопрос - terraform или opentofu, что выбрать в 2026, особенно если ты в РФ.

Почему форкнули и кто за этим стоит

Коротко по истории. Terraform до версии 1.5 включительно был под MPL 2.0 - нормальная OSI-одобренная открытая лицензия. С версии 1.6 HashiCorp перешла на BSL 1.1. BSL - это не open source в строгом смысле: исходники видны, но есть ограничение на коммерческое использование "в конкурентных целях". Это ударило по вендорам и по самому духу проекта.

Группа компаний и контрибьюторов сделала форк от последней открытой версии (Terraform 1.5.x), назвала его сначала OpenTF, потом OpenTofu, и передала под крыло Linux Foundation. Это ключевой момент: проектом теперь рулит не одна корпорация, а фонд с открытым управлением. Поддерживают его Spacelift, env0, Scalr, Harness и куча других - то есть ровно те, кому BSL мешал жить. Лицензия у OpenTofu - снова MPL 2.0, чистый open source.

Для нас, инженеров, важны два вывода. Первый - OpenTofu это не очередной форк-однодневка, за ним стоит фонд и индустрия. Второй - инфраструктура как код (IaC) перестала быть заложником одного вендора, и это здорово.

Изображение

Уникальные фичи OpenTofu, которых нет в Terraform

Первые версии OpenTofu просто догоняли Terraform по фичам. Но в 2026 форк уже не догоняет, а кое в чём обгоняет. Вот что есть в OpenTofu и чего нет в открытом CLI Terraform.

1. Client-side state encryption (с версии 1.7). Шифрование terraform state из коробки. Раньше, если ты хранил state в S3 или Object Storage, в нём лежали все твои секреты практически открытым текстом - пароли БД, токены, ключи. Защита сводилась к "ну зашифруй бакет и молись". Теперь OpenTofu шифрует state на стороне клиента, ДО того как он уедет в хранилище. То есть бэкенд хранит шифротекст, который сам прочитать не может. Ключ можно завести через PBKDF2 от парольной фразы (самый простой вариант, без внешних сервисов) или через KMS - AWS KMS, GCP KMS, OpenBao. Для РФ актуально, что не обязательно тащить чужой KMS - хватит парольной фразы из переменной окружения.

2. Динамические провайдеры - for_each по провайдерам (с версии 1.9). Раньше, если тебе нужно было раскатать ресурсы в пять регионов или в десять аккаунтов, ты руками копипастил блоки provider с alias. Теперь можно перебирать конфигурации провайдера через for_each. Меньше копипасты - меньше багов.

3. Early variable / provider evaluation. OpenTofu умеет вычислять переменные на раннем этапе, поэтому ты можешь использовать var в местах, где Terraform ругается - например в backend-блоке или в version провайдера. Мелочь, а жизнь упрощает.

4. Provider-defined functions (провайдер-функции). Провайдер может приносить свои собственные функции, которые ты вызываешь прямо из HCL. Это расширяет язык за пределы встроенного набора функций.

5. Ephemeral values и .tofu-файлы. Эфемерные значения не попадают в state вообще (хороши для секретов на время прогона). А файлы с расширением .tofu позволяют держать переопределения только для OpenTofu - удобно, если конфиг должен работать и там и там, но с нюансами для форка.

Посмотрим на главную фичу в деле. Вот так включается шифрование state в OpenTofu:

Код: Выделить всё

terraform {
  encryption {
    key_provider "pbkdf2" "passphrase" {
      passphrase = "menshe-20-simvolov-tochno-ne-prokatit"
    }

    method "aes_gcm" "default" {
      keys = key_provider.pbkdf2.passphrase
    }

    state {
      method   = method.aes_gcm.default
      enforced = true
    }

    plan {
      method = method.aes_gcm.default
    }
  }
}
В жизни парольную фразу не хардкодят, а тянут из переменной окружения через метод по умолчанию или из секрет-менеджера. Но суть видна: блок encryption, провайдер ключа, метод шифрования, и применение к state и plan. После такого даже если кто-то вытащит твой файл состояния из бакета - он получит бесполезный шифротекст.

Совместимость, реестр и миграция terraform -> tofu

Поскольку OpenTofu форкнут от Terraform 1.5.x, язык HCL, протокол провайдеров, модель state и команды совместимы. Те же бинарники провайдеров работают в обоих движках. У OpenTofu есть свой публичный реестр провайдеров и модулей (registry.opentofu.org), где в 2026 уже тысячи провайдеров и десятки тысяч модулей - включая, разумеется, провайдер Yandex Cloud.

Самое приятное - миграция чаще всего бесшовная. В простом случае ты просто меняешь бинарь:

Код: Выделить всё

# было
terraform init
terraform plan
terraform apply

# стало - тот же конфиг, другой движок
tofu init
tofu plan
tofu apply
А вот минимальный осмысленный пример на провайдере Yandex Cloud, который одинаково жуётся и Terraform, и OpenTofu - создаём сеть, подсеть и виртуалку:

Код: Выделить всё

terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}

provider "yandex" {
  zone = "ru-central1-a"
}

resource "yandex_vpc_network" "net" {
  name = "tofu-demo-net"
}

resource "yandex_vpc_subnet" "subnet" {
  name           = "tofu-demo-subnet"
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.net.id
  v4_cidr_blocks = ["10.10.0.0/24"]
}

resource "yandex_compute_instance" "vm" {
  name        = "tofu-demo-vm"
  platform_id = "standard-v3"
  zone        = "ru-central1-a"

  resources {
    cores  = 2
    memory = 2
  }

  boot_disk {
    initialize_params {
      image_id = "fd8..."  # подставь актуальный id образа Ubuntu
    }
  }

  network_interface {
    subnet_id = yandex_vpc_subnet.subnet.id
    nat       = true
  }
}
Один и тот же код, и terraform apply, и tofu apply дадут одинаковый результат. Имена ресурсов yandex_vpc_network, yandex_vpc_subnet, yandex_compute_instance - реальные, провайдер Yandex Cloud в реестре OpenTofu тот же самый.

Типичные грабли
  • Дорога в одну сторону по state. OpenTofu читает старые файлы состояния от Terraform 1.5.x и 1.6.x. Но как только ты сделал apply через OpenTofu 1.7+, в state может появиться метаинформация или шифрование, после которых обычный Terraform его уже не прочитает. Поэтому решай заранее: мигрируешь - так мигрируешь.
  • Версии разошлись. Это уже не зеркала друг друга. На 2026 год Terraform ушёл в ветку 1.14.x, OpenTofu - в ветку 1.11-1.12.x, со своими отдельными фичами. Конфиг, который завязан на новые возможности одного движка, на другом не заведётся.
  • Забыл про парольную фразу. Включил state encryption, потерял ключ - всё, state не расшифровать. Это не баг, это криптография. Храни ключ как самый ценный секрет.
  • CI всё ещё зовёт terraform. После миграции не забудь поменять бинарь в пайплайнах, pre-commit хуках и Makefile. Иначе плейбук сделает вид, что мигрировал, а на деле катит старым движком.
Мини-лаба

Что повторить руками за полчаса:
  • Поставь OpenTofu (через пакетный менеджер или скрипт установки) и проверь tofu version.
  • Возьми любой свой простенький Terraform-проект на Yandet Cloud (или собери пример выше), сделай tofu init и tofu plan. Убедись, что план совпал с тем, что показывал Terraform.
  • Добавь блок encryption с pbkdf2, прогони tofu apply и открой файл state глазами - убедись, что внутри шифротекст, а не твои секреты.
  • Поломай нарочно: убери парольную фразу и попробуй tofu plan. Почувствуй, как это - потерять ключ от состояния.
Контрольные вопросы
  • Почему вообще появился OpenTofu и под какой лицензией он сейчас живёт?
  • Назови минимум три фичи, которые есть в OpenTofu, но которых нет в открытом CLI Terraform.
  • В чём состоит главная "необратимость" при миграции state с Terraform на OpenTofu?
  • Как технически включается шифрование state и какой самый простой провайдер ключа?
Итог - что запомнить

OpenTofu - это открытый форк Terraform под Linux Foundation и лицензией MPL 2.0, появившийся как ответ на переход HashiCorp к BSL. В 2026 году он уже не просто клон, а самостоятельный движок с фичами, которых в открытом Terraform нет: client-side state encryption из коробки, динамические провайдеры через for_each, early evaluation, провайдер-функции, эфемерные значения. Совместимость с HCL и провайдерами (включая Yandex Cloud) почти полная, миграция terraform -> tofu в типовом случае бесшовная, но переход по state - дорога в одну сторону. Если коротко отвечать на вопрос "terraform или opentofu что выбрать в 2026", особенно в РФ: для большинства команд OpenTofu - разумный выбор по умолчанию, потому что это честный open source, независимое управление и шифрование state без чужих облачных KMS. А раз и terraform plan, и tofu apply работают с одним и тем же кодом - попробовать форк ничего не стоит.
👍5 ❤️4 🔥1 😄 🤔
Аватара пользователя
quantum03
Сообщения: 1
Зарегистрирован: 07 июн 2026, 16:24

Re: OpenTofu в 2026: чем живёт форк и как мигрировать

Сообщение quantum03 »

Вопрос по граблям: если я сделал tofu apply, а потом захочу вернуться на terraform - реально уже никак? Или можно как-то выключить шифрование и откатить state обратно? Боюсь мигрировать прод, пока не пойму пути назад.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
len1n
Сообщения: 1
Зарегистрирован: 15 май 2026, 22:11

Re: OpenTofu в 2026: чем живёт форк и как мигрировать

Сообщение len1n »

Спасибо, наконец дошло зачем вообще этот форк. Поставил tofu, прогнал tofu plan на старом проекте с яндексом - реально один в один с терраформом. Шифрование state теперь точно включу, у меня там пароли от баз лежали открытым текстом, аж стыдно стало.
👍 ❤️1 🔥 😄 🤔1
Ответить
← Предыдущая глава
Что нового в Terraform 1.3-1.10: моды, импорт, провайдер-функции, Stacks
Следующая глава →
Сертификация HashiCorp Terraform Associate и карьера

Все главы курса «Terraform: инфраструктура как код на Yandex Cloud»

Поделиться темой: ✈ Telegram VK
Похожие запросы: миграция terraform на opentofu после смены лицензии

Вернуться в «Terraform: инфраструктура как код на Yandex Cloud»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость