Знакомство с 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, совместимый по синтаксису. Дальше установим инструмент и пройдём базовый цикл.