Terraform
Terraform — это программный инструмент с открытым исходным кодом для реализации подхода «Инфраструктура как код» (Infrastructure as Code, IaC), позволяющий описывать, создавать, изменять и версионировать облачную и локальную инфраструктуру с помощью декларативных конфигурационных файлов. Разработан компанией HashiCorp, написан на языке Go. Terraform позволяет управлять широким спектром сервисов — от низкоуровневых компонентов (вычислительные мощности, сети, хранилища) до высокоуровневых (базы данных, DNS-записи, SaaS-решения) — через единый интерфейс командной строки (CLI) и рабочий процесс.
История
Создание и ранние версии
Terraform был анонсирован компанией HashiCorp 25 июля 2014 года. Его создатели — Митчелл Хашимото и Армон Дадгар, ранее разработавшие такие инструменты, как Vagrant, Packer и Consul. Основной мотивацией для создания Terraform стала необходимость в инструменте, который бы абстрагировал управление инфраструктурой от конкретных API облачных провайдеров и позволял бы описывать всю инфраструктуру в виде единого, повторяемого и версионируемого артефакта.
Первая публичная версия (v0.1) была выпущена в том же 2014 году. Она поддерживала ограниченное число провайдеров (AWS, DigitalOcean, Google Cloud Platform, OpenStack) и базовые ресурсы. Ключевой инновацией стал язык конфигурации HCL (HashiCorp Configuration Language), разработанный специально для Terraform.
Развитие и экосистема
В 2015 году вышла версия 0.4, добавившая поддержку модулей — переиспользуемых блоков конфигурации, что стало основой для организации сложных проектов. В 2016 году был представлен Terraform Registry — публичный репозиторий модулей и провайдеров, создаваемых сообществом и вендорами. К 2017 году Terraform стал одним из самых популярных IaC-инструментов, поддерживая десятки провайдеров, включая Microsoft Azure, VMware vSphere, Alibaba Cloud и Kubernetes.
В 2019 году HashiCorp выпустила коммерческую версию продукта — Terraform Cloud, предоставляющую удалённое выполнение планов, управление состоянием (state), политики безопасности (Sentinel) и интеграцию с системами CI/CD. В 2020 году вышла версия 0.13, значительно улучшившая работу с модулями и зависимостями провайдеров. Версия 0.14 (2020) ввела блокировку версий провайдеров и улучшенную обработку ошибок.
Изменение лицензии и форк OpenTofu
В августе 2023 года HashiCorp объявила о смене лицензии Terraform с Mozilla Public License 2.0 (MPL 2.0) на проприетарную Business Source License (BSL v1.1). Это решение вызвало критику в сообществе, так как BSL накладывает ограничения на коммерческое использование, в том числе на создание конкурирующих продуктов. В ответ на это группа компаний (включая Gruntwork, Spacelift, env0, Scalr) инициировала создание форка под названием OpenTofu, который был передан в Linux Foundation. OpenTofu сохранил открытую лицензию (MPL 2.0) и стал независимым проектом. Первый стабильный релиз OpenTofu (v1.6.0) состоялся в сентябре 2023 года. На момент 2024 года Terraform продолжает развиваться под управлением HashiCorp, а OpenTofu — как альтернатива с открытым исходным кодом.
Архитектура и принципы работы
Декларативный подход
Terraform использует декларативную модель: пользователь описывает желаемое конечное состояние инфраструктуры (target state), а инструмент самостоятельно определяет, какие действия необходимо выполнить для перехода из текущего состояния в желаемое. Это отличается от императивного подхода, где пользователь указывает последовательность команд для создания ресурсов.
Язык конфигурации HCL
Конфигурации пишутся на языке HCL (HashiCorp Configuration Language), который является синтаксически близким к JSON, но более читаемым для человека. HCL поддерживает блоки, атрибуты, переменные, циклы, условные конструкции и ссылки на другие ресурсы. Пример базового файла main.tf:
```hcl terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } }
provider "aws" { region = "us-east-1" }
resource "aws_instance" "web" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro"
tags = { Name = "ExampleInstance" } } ```
Жизненный цикл работы
Работа с Terraform включает несколько основных этапов:
- Инициализация (
terraform init) — загрузка и установка провайдеров и модулей, указанных в конфигурации, инициализация бэкенда для хранения состояния. - Планирование (
terraform plan) — создание плана выполнения: Terraform сравнивает текущее состояние инфраструктуры с желаемым и выводит список действий (создание, изменение, удаление ресурсов) без их выполнения. - Применение (
terraform apply) — выполнение плана: Terraform последовательно создаёт, обновляет или удаляет ресурсы, отслеживая их состояние. После выполнения состояние сохраняется. - Уничтожение (
terraform destroy) — удаление всех ресурсов, описанных в конфигурации, для очистки инфраструктуры.
Файлы состояния (State)
Terraform хранит информацию о созданных ресурсах в файлах состояния (state files). По умолчанию это локальный файл terraform.tfstate в формате JSON. Файл состояния содержит привязку между ресурсами в конфигурации и их реальными идентификаторами в облаке. Для командной работы файл состояния обычно хранится удалённо (например, в S3, Azure Storage, Consul, Terraform Cloud) и блокируется для предотвращения конкурентных изменений.
Провайдеры и ресурсы
Провайдер — это плагин, который реализует взаимодействие с API конкретного сервиса (AWS, Azure, GCP, Kubernetes, GitHub, Cloudflare и др.). Каждый провайдер предоставляет набор ресурсов (resource) — типов инфраструктурных объектов (виртуальные машины, сети, базы данных, DNS-записи) и источников данных (data source) — для получения информации о существующих объектах. На 2024 год в Terraform Registry доступно более 3000 провайдеров.
Модули
Модули — это самодостаточные группы ресурсов, объединённые в одну директорию. Они позволяют абстрагировать сложные конфигурации, переиспользовать код и организовывать инфраструктуру по принципу «строительных блоков». Модули могут быть локальными или публиковаться в Registry. Пример использования модуля:
```hcl module "vpc" { source = "terraform-aws-modules/vpc/aws" version = "5.0.0"
name = "my-vpc" cidr = "10.0.0.0/16" azs = ["us-east-1a", "us-east-1b"] } ```
Классификация и основные возможности
По типу управления
- Terraform CLI — бесплатный инструмент командной строки, доступный для Windows, macOS и Linux.
- Terraform Cloud — коммерческий SaaS-продукт HashiCorp с удалённым выполнением, управлением состоянием, политиками и интеграциями.
- Terraform Enterprise — версия для развёртывания в собственной инфраструктуре организации, с дополнительными функциями безопасности и аудита.
Ключевые возможности
- Управление мультиоблачной инфраструктурой — единый рабочий процесс для AWS, Azure, GCP, Яндекс.Облако, VK Cloud и других провайдеров.
- Управление зависимостями — автоматическое построение графа зависимостей между ресурсами и параллельное создание независимых объектов.
- Версионирование инфраструктуры — конфигурации хранятся в системах контроля версий (Git), что позволяет отслеживать изменения, откатываться и проводить код-ревью.
- Инфраструктура как код — возможность тестирования, автоматизации и интеграции с CI/CD (GitLab CI, GitHub Actions, Jenkins, CircleCI).
- Провидение (Provisioning) — выполнение скриптов на созданных ресурсах (через provisioner'ы:
file,remote-exec,local-exec), хотя это считается менее предпочтительным, чем использование специализированных инструментов (Ansible, Chef, Puppet). - Работа с секретами — поддержка переменных окружения, Vault (HashiCorp) и внешних источников секретов.
Применение
Облачная инфраструктура
Terraform широко используется для автоматизации развёртывания и управления инфраструктурой в публичных облаках. Типичные сценарии:
- создание виртуальных сетей (VPC), подсетей, шлюзов, таблиц маршрутизации;
- развёртывание виртуальных машин (EC2, Compute Engine, Azure VMs) и контейнерных кластеров (EKS, GKE, AKS);
- настройка балансировщиков нагрузки, DNS-зон, CDN;
- управление базами данных (RDS, Cloud SQL, Cosmos DB).
Kubernetes и контейнеризация
Terraform позволяет управлять кластерами Kubernetes как ресурсами облачных провайдеров, а также непосредственно объектами Kubernetes (Deployment, Service, ConfigMap) через провайдер kubernetes или helm. Это делает его удобным для развёртывания полного стека приложений.
Локальная и гибридная инфраструктура
С помощью провайдеров для VMware vSphere, OpenStack, Proxmox, libvirt Terraform может управлять виртуальными машинами в локальных дата-центрах. Также поддерживаются гибридные сценарии, когда часть инфраструктуры находится в облаке, а часть — on-premises.
Управление SaaS и PaaS
Terraform автоматизирует настройку сервисов, таких как GitHub (репозитории, команды, ветки), GitLab, Cloudflare (DNS, CDN), Datadog (мониторинг), PagerDuty (инциденты), Fastly, Auth0 и многих других.
Преимущества и недостатки
Преимущества
- Декларативный подход — снижает вероятность ошибок, упрощает понимание конфигурации.
- Мультиоблачность — единый инструмент для разных провайдеров.
- Большое сообщество и экосистема — тысячи модулей и провайдеров в Registry.
- Версионирование и повторяемость — инфраструктура становится воспроизводимой и управляемой через Git.
- Бесплатность базовой версии — CLI доступен без ограничений.
Недостатки
- Сложность управления состоянием — файлы состояния требуют осторожного обращения, блокировок и резервного копирования.
- Отсутствие встроенного управления зависимостями на уровне приложений — Terraform не управляет жизненным циклом приложений (запуск, остановка, обновление), для этого используются другие инструменты.
- Кривая обучения — HCL, модули, работа с состоянием требуют времени для освоения.
- Производительность при большом количестве ресурсов — планирование и применение могут занимать значительное время.
- Изменение лицензии (2023) — привело к расколу сообщества и появлению форка OpenTofu.
Интересные факты
- Название «Terraform» происходит от латинского terra (земля) и английского form (формировать), что отражает идею «формирования инфраструктуры».
- HCL был создан как альтернатива JSON и YAML, которые, по мнению разработчиков HashiCorp, недостаточно выразительны для описания сложной инфраструктуры.
- Terraform Registry содержит более 15 000 модулей, созданных сообществом.
- Согласно опросу HashiCorp (2023), Terraform используется более чем в 70% организаций, применяющих IaC.
Источники
- Официальная документация HashiCorp Terraform (developer.hashicorp.com/terraform)
- Книга: «Terraform: Up & Running» (Yevgeniy Brikman, 3-е издание, 2022)
- Статья: «HashiCorp adopts Business Source License» (hashicorp.com, август 2023)
- Репозиторий OpenTofu (github.com/opentofu/opentofu)
- Документация Terraform Registry (registry.terraform.io)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →