HashiCorp Terraform
Terraform — это программное обеспечение с открытым исходным кодом для реализации подхода «Инфраструктура как код» (Infrastructure as Code, IaC), разработанное компанией HashiCorp. Terraform позволяет пользователям определять и предоставлять вычислительные ресурсы, сети, хранилища и другие компоненты облачной и локальной инфраструктуры с помощью декларативных конфигурационных файлов. Инструмент поддерживает множество провайдеров, включая крупнейшие публичные облачные платформы (AWS, Microsoft Azure, Google Cloud Platform), частные облачные решения (OpenStack, VMware vSphere) и различные сервисы (GitHub, Cloudflare, Kubernetes).
История
Terraform был создан компанией HashiCorp, основанной в 2012 году Митчеллом Хасимото и Армоном Дадгаром. Первая публичная версия инструмента (v0.1) была выпущена 28 июля 2014 года. Изначально Terraform поддерживал только несколько провайдеров (AWS, Google Cloud, DigitalOcean), но быстро расширял функциональность.
В 2015 году HashiCorp выпустила Terraform v0.2, которая добавила поддержку модулей и переменных, что позволило создавать более гибкие и переиспользуемые конфигурации. В 2016 году вышла версия v0.7, в которой появилась поддержка состояния (state) и возможность работы с несколькими окружениями.
В 2017 году HashiCorp объявила о коммерческой лицензии на Terraform, что вызвало критику со стороны сообщества. В 2018 году компания выпустила Terraform Cloud — облачный сервис для управления инфраструктурой, который предоставляет возможности для совместной работы, автоматизации и хранения состояния.
В 2023 году HashiCorp изменила лицензию Terraform с Mozilla Public License 2.0 (MPL 2.0) на Business Source License (BSL), что ограничило использование инструмента в коммерческих целях. Это привело к созданию форка OpenTofu, который сохранил открытую лицензию.
Архитектура и принципы работы
Декларативный подход
Terraform использует декларативный язык конфигурации HashiCorp Configuration Language (HCL). Пользователь описывает желаемое состояние инфраструктуры в файлах с расширением .tf, а Terraform автоматически вычисляет необходимые изменения для достижения этого состояния. Инструмент поддерживает императивный синтаксис через команды CLI, но основная работа ведётся через HCL.
Провайдеры
Terraform взаимодействует с различными платформами через провайдеры — плагины, которые реализуют API для управления ресурсами. Каждый провайдер определяет набор ресурсов (например, aws_instance для виртуальной машины в AWS) и источников данных (data sources). На начало 2025 года официальный реестр Terraform Registry содержит более 3000 провайдеров, включая как официальные от HashiCorp, так и созданные сообществом.
Состояние (State)
Terraform хранит информацию о текущем состоянии управляемой инфраструктуры в файле состояния (state file). Этот файл содержит метаданные о каждом ресурсе, включая его идентификатор, атрибуты и зависимости. Состояние может храниться локально (в файле terraform.tfstate) или удалённо (в бэкендах, таких как Terraform Cloud, AWS S3, Azure Storage, HashiCorp Consul). Удалённое хранение состояния позволяет нескольким членам команды одновременно работать с одной инфраструктурой.
План и применение
Основной рабочий процесс Terraform состоит из трёх этапов:
- Инициализация (
terraform init) — загрузка провайдеров и модулей, настройка бэкенда. - План (
terraform plan) — создание плана изменений, который показывает, какие ресурсы будут созданы, изменены или удалены. - Применение (
terraform apply) — выполнение плана с внесением изменений в инфраструктуру.
Ключевые возможности
Модульность
Terraform поддерживает модули — переиспользуемые блоки конфигурации, которые могут быть опубликованы в реестре Terraform Registry или храниться локально. Модули позволяют абстрагировать сложные конфигурации, например, развёртывание кластера Kubernetes или виртуальной сети.
Зависимости и граф ресурсов
Terraform автоматически строит граф зависимостей между ресурсами на основе их ссылок друг на друга. Это позволяет инструменту параллельно обрабатывать независимые ресурсы, ускоряя развёртывание. При необходимости можно явно указать зависимости с помощью атрибута depends_on.
Работа с несколькими окружениями
Terraform поддерживает разделение инфраструктуры на окружения (development, staging, production) с помощью рабочих пространств (workspaces) или отдельных файлов конфигурации. Рабочие пространства позволяют использовать один набор конфигураций для разных окружений, различая их по состоянию.
Интеграция с системами CI/CD
Terraform легко интегрируется с системами непрерывной интеграции и доставки (Jenkins, GitLab CI, GitHub Actions, CircleCI). В таких сценариях Terraform используется для автоматического развёртывания инфраструктуры при каждом изменении кода.
Применение
Облачная инфраструктура
Terraform широко используется для управления инфраструктурой в публичных облаках. Например, можно определить виртуальные машины, балансировщики нагрузки, базы данных и сети в AWS, Azure или GCP с помощью единого набора конфигураций.
Мультиоблачные решения
Инструмент позволяет управлять ресурсами в нескольких облачных провайдерах одновременно, что полезно для организаций, использующих гибридные или мультиоблачные архитектуры. Terraform обеспечивает единый интерфейс для работы с разными платформами.
Локальная инфраструктура
Terraform поддерживает управление локальной инфраструктурой через провайдеры для VMware vSphere, OpenStack, Proxmox и других систем виртуализации. Это позволяет автоматизировать развёртывание виртуальных машин в корпоративных дата-центрах.
Управление Kubernetes
Terraform может использоваться для развёртывания и управления кластерами Kubernetes, а также для настройки ресурсов внутри них (например, через провайдеры Kubernetes и Helm). Это позволяет объединить управление инфраструктурой и приложениями в одном инструменте.
Критика и ограничения
Управление состоянием
Файл состояния Terraform является критическим компонентом. Его повреждение или потеря может привести к невозможности управления инфраструктурой. Для минимизации рисков рекомендуется использовать удалённое хранение состояния с блокировками (например, через Terraform Cloud или AWS DynamoDB).
Сложность работы с большими конфигурациями
При росте количества ресурсов (сотни и тысячи) файлы конфигурации становятся сложными для чтения и поддержки. Модули и рабочие пространства помогают, но требуют продуманной архитектуры.
Зависимость от провайдеров
Качество работы Terraform зависит от стабильности и полноты провайдеров. Некоторые провайдеры, особенно от сторонних разработчиков, могут содержать ошибки или не поддерживать все возможности API.
Лицензионные изменения
Переход на Business Source License в 2023 году вызвал недовольство части сообщества. Форк OpenTofu, поддерживаемый Linux Foundation, предлагает альтернативу с открытой лицензией, но не имеет полной совместимости с экосистемой Terraform.
Альтернативы
Основными конкурентами Terraform на рынке IaC являются:
- AWS CloudFormation — проприетарный инструмент от Amazon, работающий только с AWS.
- Azure Resource Manager (ARM) — проприетарный инструмент от Microsoft для Azure.
- Google Cloud Deployment Manager — проприетарный инструмент от Google для GCP.
- Pulumi — инструмент с открытым исходным кодом, использующий языки общего назначения (TypeScript, Python, Go) вместо HCL.
- Ansible — инструмент для управления конфигурациями, который также может использоваться для развёртывания инфраструктуры, но не является специализированным IaC-решением.
- OpenTofu — форк Terraform с открытой лицензией, поддерживающий совместимость с HCL и провайдерами Terraform.
Источники
- HashiCorp. «Terraform Documentation». Официальная документация.
- HashiCorp. «Terraform Registry». Реестр провайдеров и модулей.
- Brikman, Yevgeniy. «Terraform: Up and Running». O'Reilly Media, 2022.
- Morris, James. «Infrastructure as Code: Dynamic Systems for the Cloud Age». O'Reilly Media, 2020.
- OpenTofu. «OpenTofu Documentation». Официальная документация форка.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →