terraform
Terraform — это инструмент с открытым исходным кодом от HashiCorp для управления инфраструктурой как кодом (Infrastructure as Code). Он позволяет декларативно описывать облачные ресурсы — серверы, сети, базы данных, DNS-записи — в файлах конфигурации, а затем создавать, изменять и удалять их автоматически через API облачных провайдеров.
Принцип работы Terraform
Terraform использует декларативный подход: вы описываете желаемое состояние инфраструктуры, а не последовательность команд для её достижения. Инструмент сам вычисляет разницу между текущим и желаемым состоянием и применяет минимально необходимые изменения.
Конфигурационные файлы пишутся на языке HCL (HashiCorp Configuration Language) — читаемом, декларативном языке с поддержкой переменных, функций, условий и циклов. Альтернативно можно использовать JSON.
Terraform хранит текущее состояние инфраструктуры в state-файле (terraform.tfstate). Этот файл — источник правды для инструмента: по нему определяется, что уже создано и что нужно изменить. В командах хранят state в удалённых backend-хранилищах: S3, GCS, Terraform Cloud.
Основные команды
- terraform init — инициализация рабочей директории, загрузка провайдеров и модулей.
- terraform plan — вычисление и отображение изменений без их применения.
- terraform apply — применение изменений после подтверждения.
- terraform destroy — удаление всей управляемой инфраструктуры.
- terraform import — импорт уже существующих ресурсов в state.
Провайдеры: интеграция с любым облаком
Terraform работает с любой платформой через провайдеры — плагины, реализующие API конкретного сервиса. Реестр Terraform Registry содержит тысячи провайдеров: AWS, Azure, GCP, Kubernetes, GitHub, Datadog, Cloudflare, MongoDB Atlas и другие. Провайдеры пишутся на Go и распространяются как бинарные плагины.
Один Terraform-конфиг может одновременно управлять ресурсами в нескольких облаках и сервисах — например, создать VM в AWS, DNS-запись в Cloudflare и репозиторий в GitHub.
Модули: переиспользование и стандартизация
Модуль — это набор Terraform-файлов, оформленный как переиспользуемый компонент. Корпоративная команда создаёт модуль «стандартный веб-сервер» с согласованными настройками сети, безопасности и мониторинга, а разработчики используют его как строительный блок, передавая только параметры.
Публичные модули публикуются в Terraform Registry. Частные модули размещают в приватных реестрах Terraform Cloud или в Git-репозиториях.
Управление состоянием в команде
Работа нескольких разработчиков с одним state-файлом без координации приводит к конфликтам. Решение — remote state с блокировками (locking). При выполнении apply Terraform захватывает блокировку, предотвращая параллельные изменения. AWS S3 + DynamoDB, Google Cloud Storage или Terraform Cloud реализуют этот паттерн.
Terraform Cloud и Enterprise
HashiCorp предлагает управляемую платформу Terraform Cloud (бесплатный тариант для небольших команд): удалённый state, блокировки, историю применений, политики Sentinel (OPA-подобные), SSO и другие возможности. Terraform Enterprise — self-hosted версия для организаций с жёсткими требованиями к data residency.
Альтернативы и конкуренты
Pulumi позволяет описывать инфраструктуру на TypeScript, Python, Go или C# — без нового языка HCL. Привлекает разработчиков, которые хотят использовать привычные языки и тесты. AWS CloudFormation и Azure Bicep — нативные решения конкретных облаков без мультиоблачной поддержки. Ansible больше подходит для управления конфигурацией, чем для provisioning инфраструктуры.
Лучшие практики
- Никогда не редактируйте state вручную — только через terraform state команды.
- Используйте remote backend с блокировками для командной работы.
- Разбивайте инфраструктуру на небольшие state-файлы по контексту (сеть, приложение, данные).
- Прогоняйте terraform plan в CI и требуйте ревью плана перед apply.
- Версионируйте провайдеры и модули явно, избегая latest.
Частые вопросы
Terraform бесплатен?
Terraform CLI (open source) полностью бесплатен. Terraform Cloud имеет бесплатный тариф для небольших команд. Terraform Enterprise — коммерческий продукт с расширенными возможностями для больших организаций.
Что такое state в Terraform?
State (tfstate) — файл, в котором Terraform хранит информацию о реальных ресурсах, которыми управляет. Он связывает декларации в HCL с фактическими объектами в облаке. Без state Terraform не знает, что уже создано.
Terraform или Ansible: что выбрать?
Terraform лучше подходит для provisioning (создание инфраструктуры), Ansible — для configuration management (настройка ПО на уже созданных серверах). В зрелых командах их используют вместе.
Другие термины в теме «DevOps и облака»
Не хватает деталей?
Напишите, что уточнить по теме «terraform» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).