Знакомство с Terraform и OpenTofu

Terraform — самый популярный инструмент IaC: один язык (HCL) и единый workflow позволяют управлять ресурсами в AWS, Azure, GCP, Kubernetes и сотнях других систем.

Terraform не «про AWS» и не «про облако». Он про универсальный язык, на котором вы описываете API любой системы как набор ресурсов — а провайдер переводит это в реальные вызовы.

Terraform создала компания HashiCorp в 2014 году. Его ключевая идея — провайдер-агностичность: вы учите один синтаксис и один набор команд (plan, apply, destroy), а дальше управляете чем угодно через плагины-провайдеры. AWS, Cloudflare, GitHub, базы данных, даже мониторинг — всё описывается одинаково.

Лицензия и форк OpenTofu

В августе 2023 HashiCorp сменила лицензию Terraform со свободной MPL 2.0 на Business Source License (BSL) — это ограничивает коммерческое использование конкурентами. В ответ сообщество создало форк OpenTofu, который остаётся полностью открытым под MPL 2.0 и управляется нейтрально через Linux Foundation. В феврале 2025 HashiCorp вошла в состав IBM.

Технически OpenTofu — это почти drop-in замена: тот же HCL, тот же CLI, та же совместимость с провайдерами. Но он уже начал расходиться по фичам: OpenTofu первым добавил шифрование state (v1.7), provider for_each, флаг -exclude и раннее вычисление переменных. Для обучения разница несущественна — всё в этом курсе работает в обоих. Команды называются terraform и tofu соответственно.

                  ваш HCL-код
                      |
                      v
              +---------------+
              |   Terraform   |  ядро: парсинг, граф, план
              |   / OpenTofu  |
              +-------+-------+
                      |
       +--------------+--------------+
       v              v              v
   provider aws  provider azure  provider github
       |              |              |
       v              v              v
    AWS API       Azure API      GitHub API

Как работает под капотом

Ядро Terraform само по себе ничего не знает об AWS. Оно умеет только парсить HCL, строить граф и считать план. Всю реальную работу делают провайдеры — отдельные плагины, которые скачиваются при terraform init. Каждый провайдер знает, как создать/прочитать/обновить/удалить (CRUD) свои ресурсы через API соответствующей системы.

Смоделируем, как ядро выбирает провайдера по типу ресурса. Ресурс aws_instance → провайдер aws; github_repository → провайдер github:

resources = ["aws_instance.web", "aws_s3_bucket.data",
             "github_repository.app", "cloudflare_record.dns"]

def provider_of(resource_type):
    return resource_type.split("_")[0]

needed = set()
for r in resources:
    rtype = r.split(".")[0]      # aws_instance
    needed.add(provider_of(rtype))

print("Ресурсы:", len(resources))
print("Нужно скачать провайдеров:", sorted(needed))

«Попробуй сам ▶» — так terraform init понимает, какие плагины подтянуть: по префиксу типа ресурса.

Частые ошибки

  • Думать, что Terraform = AWS. Это лишь один из сотен провайдеров.
  • Считать BSL «закрытием». Terraform остаётся бесплатным для большинства; ограничение касается только конкурентов HashiCorp.
  • Смешивать стейты Terraform и OpenTofu. Версии state могут расходиться; в одном проекте выбирайте один инструмент.

Best practices

  • Фиксируйте версию ядра в блоке required_version, чтобы команда работала на одной версии.
  • Для новых проектов в 2025 году OpenTofu — безопасный выбор: открытая лицензия и активное развитие.
  • Всегда указывайте версии провайдеров — об этом подробно в следующих разделах.

Разбор глубже

Полезно понимать масштаб экосистемы. В публичном Terraform Registry опубликованы тысячи провайдеров: не только большая тройка облаков (AWS, Azure, GCP), но и Kubernetes, Helm, Docker, Cloudflare, GitHub, Datadog, PostgreSQL и даже бытовые системы вроде управления записями DNS или мониторингом. Один и тот же язык и workflow означают, что инженер, освоивший Terraform на AWS, за день переключается на управление, скажем, репозиториями GitHub — меняется только провайдер и набор ресурсов, но не сам способ мышления.

Про OpenTofu стоит знать практическую деталь: миграция с Terraform на OpenTofu для большинства проектов сводится к замене бинарника и команды (terraform на tofu), потому что формат state и синтаксис пока совместимы. Но по мере расхождения версий это окно будет сужаться. Поэтому в 2025 году выбор стоит делать осознанно на старте проекта: если важна гарантированно открытая лицензия и нейтральное управление — OpenTofu; если нужна интеграция с коммерческими продуктами HashiCorp (Terraform Cloud, Sentinel) — Terraform. В обучении же разница незаметна, и всё в этом курсе работает в обоих.

Итог: Terraform — провайдер-агностичный движок IaC; реальную работу делают провайдеры-плагины. OpenTofu — открытый форк под MPL 2.0, совместимый по синтаксису. Дальше установим инструмент и пройдём базовый цикл.

Проверьте себя
1. Почему появился OpenTofu?
AHashiCorp обанкротилась
BСообщество форкнуло Terraform после смены лицензии на BSL
CTerraform перестал поддерживать AWS
DЭто коммерческий продукт IBM
2. Что делает провайдер в архитектуре Terraform?
AХранит state-файл
BПереводит описание ресурсов в реальные API-вызовы конкретной системы
CЗаменяет ядро Terraform
DШифрует переменные