Открыть сервис

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 включает несколько основных этапов:

  1. Инициализация (terraform init) — загрузка и установка провайдеров и модулей, указанных в конфигурации, инициализация бэкенда для хранения состояния.
  2. Планирование (terraform plan) — создание плана выполнения: Terraform сравнивает текущее состояние инфраструктуры с желаемым и выводит список действий (создание, изменение, удаление ресурсов) без их выполнения.
  3. Применение (terraform apply) — выполнение плана: Terraform последовательно создаёт, обновляет или удаляет ресурсы, отслеживая их состояние. После выполнения состояние сохраняется.
  4. Уничтожение (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 →