Практика и гайды

Что такое Terraform

Что такое Terraform

Terraform — это инструмент класса инфраструктура как код (IaC), который позволяет описывать серверы, сети, балансировщики, DNS-записи, Kubernetes-кластеры и другие ресурсы в конфигурационных файлах. После этого Terraform сравнивает желаемое состояние с текущим и создаёт, изменяет или удаляет ресурсы через API нужных платформ и сервисов.

Содержание статьи

Как работает Terraform

Terraform работает по простой схеме: вы описываете целевую инфраструктуру, Terraform строит план изменений и затем применяет его в правильном порядке с учётом зависимостей между ресурсами.

Подход у Terraform декларативный. Пользователь не расписывает пошагово, какие команды и в какой момент запускать. Он задаёт конечный результат: например, виртуальную сеть, несколько виртуальных машин, правила доступа и балансировщик нагрузки.

Дальше Terraform сам определяет, что уже существует, что нужно добавить, а что изменить или удалить. Если виртуальная машина зависит от сети, сначала будет создана сеть. Если кластер зависит от других компонентов, Terraform выстроит цепочку действий сам.

Такой подход удобен по двум причинам. Во-первых, конфигурации читаются как описание инфраструктуры, а не как длинный сценарий. Во-вторых, их можно хранить в системе контроля версий, переиспользовать и согласовывать в команде.

Базовый цикл работы

У Terraform три основных шага: написать конфигурацию, посмотреть план и применить изменения.

  1. Write — разработчик описывает нужные ресурсы в человекочитаемом конфигурационном файле.
  2. Plan — Terraform анализирует конфигурацию и текущее состояние инфраструктуры, после чего показывает, какие ресурсы будут созданы, изменены или удалены.
  3. Apply — после подтверждения Terraform выполняет эти действия через API провайдеров и сервисов.

Эта последовательность помогает избежать случайных изменений. Сначала команда видит план, потом принимает решение, и только после этого инфраструктура меняется.

Что именно умеет Terraform

Terraform управляет инфраструктурой через API и подходит как для облачных, так и для локальных сред, если у платформы есть доступный интерфейс управления.

На практике это означает, что с его помощью можно работать с ресурсами в AWS, Microsoft Azure, Google Cloud, IBM Cloud, Docker, GitHub и других системах. Один и тот же подход применяется к разным типам ресурсов: от вычислительных инстансов и хранилищ до DNS-записей и отдельных SaaS-функций.

Terraform работает не только с низкоуровневыми компонентами вроде дисков, сетей и виртуальных машин. Он может описывать и более высокоуровневые сущности, если для них есть провайдер и API.

Из каких компонентов состоит Terraform

Ключевые части Terraform — это конфигурации, модули, файл состояния, провайдеры, реестры и командная строка Terraform CLI.

Конфигурационные файлы

Конфигурационные файлы описывают желаемое состояние инфраструктуры. В них указывают, какие ресурсы нужны, с какими параметрами и в каких связях друг с другом.

Именно эти файлы становятся основой для планирования и применения изменений. Их удобно хранить вместе с кодом приложения или в отдельном репозитории инфраструктуры.

Модули

Модуль — это переиспользуемый набор конфигураций Terraform. Он помогает не копировать один и тот же код для типовых инфраструктурных блоков.

Например, команда может один раз оформить стандартный шаблон развертывания сети или виртуальной машины, а затем вызывать его в разных проектах. Это упрощает повторное использование и делает инфраструктуру более предсказуемой.

Файл состояния

Файл состояния хранит информацию о том, какие ресурсы Terraform уже создал и как они связаны с конфигурацией. Без состояния Terraform не сможет корректно сравнить реальную инфраструктуру с описанной.

Именно на основе состояния инструмент понимает, нужно ли создать новый объект, изменить существующий или удалить его.

Провайдеры и реестры

Провайдер — это компонент, через который Terraform общается с конкретной платформой или сервисом. Реестры используются для получения готовых провайдеров и модулей.

За счёт провайдеров Terraform работает с разными облаками и сервисами в едином подходе. Это одна из причин, почему его часто используют в разнородной инфраструктуре.

Terraform CLI

Terraform CLI — это интерфейс командной строки, через который запускаются основные команды: инициализация, проверка, построение плана и применение изменений.

Через CLI обычно и строится рабочий процесс команды: от локальной проверки конфигурации до запуска в CI/CD.

Где используют Terraform

Terraform применяют для управления инфраструктурой на всём её жизненном цикле: от первичного развёртывания до изменения и удаления ресурсов.

Сценарии использования зависят от того, как устроена инфраструктура в компании. Где-то он нужен для унификации работы с несколькими облаками. Где-то — для сборки стандартных окружений под приложения. А иногда — для того, чтобы команды могли поднимать утверждённые ресурсы без ручного участия центральной ИТ-команды.

Управление мультиоблачной инфраструктурой

Terraform часто используют в мультиоблачной среде, потому что он позволяет описывать ресурсы разных провайдеров в одном подходе и в одном рабочем процессе.

Когда часть сервисов работает в одном облаке, часть в другом, а вспомогательные компоненты вынесены в сторонние системы, ручное управление быстро становится неудобным. Terraform снимает часть этой разрозненности: команда использует общий язык конфигураций и единый механизм планирования изменений.

Управление инфраструктурой приложений

Terraform подходит для развертывания инфраструктуры многослойных приложений, где есть зависимости между компонентами.

Если приложению нужны веб-серверы, база данных, API-слой, кэш и маршрутизация, Terraform помогает описать это как одну систему. При применении он учитывает зависимости и не пытается создать зависящие компоненты раньше базовых.

Самообслуживание команд

Terraform помогает выстроить модель самообслуживания, в которой продуктовые или инженерные команды получают доступ к утверждённым инфраструктурным шаблонам.

Это особенно полезно там, где централизованная команда получает много однотипных запросов. Если типовые модули уже подготовлены и согласованы, команды могут использовать их напрямую. В результате снижается объём ручной работы и уменьшается разброс в настройках.

Terraform также можно связывать с системами заявок и конвейерами CI/CD, чтобы запускать инфраструктурные изменения по формализованному процессу.

Политики и соответствие внутренним требованиям

Terraform помогает закреплять инфраструктурные правила в коде и повторно применять их во всех командах.

Если организация использует утверждённые модули для развёртывания сетей, вычислительных ресурсов или других компонентов, это упрощает соблюдение внутренних стандартов. Команда получает не просто шаблон, а заранее описанный способ создания ресурсов с нужными параметрами.

Командная работа

Terraform хорошо вписывается в совместную разработку, потому что конфигурации можно хранить в системе контроля версий и проверять через обычные процессы ревью.

Это даёт прозрачность изменений. Команда видит, кто и зачем меняет инфраструктуру, может сравнить версии конфигураций и при необходимости вернуться к предыдущему варианту.

Чем Terraform отличается от Kubernetes

Terraform управляет инфраструктурой в широком смысле, а Kubernetes отвечает за оркестрацию контейнерных приложений. Это инструменты для разных задач, хотя они часто используются вместе.

Kubernetes нужен для развертывания, управления и масштабирования контейнеризованных приложений. Terraform решает другую задачу: создаёт и изменяет саму инфраструктуру, включая кластеры Kubernetes.

Их связь на практике выглядит просто. Terraform может поднять кластер Kubernetes в облаке, настроить связанные ресурсы и подготовить окружение. После этого Kubernetes управляет приложениями внутри этого кластера.

Параметр Terraform Kubernetes
Основная задача Создание и изменение инфраструктуры Управление контейнерными приложениями
Уровень работы Сети, машины, кластеры, сервисы Поды, сервисы, деплойменты, масштабирование
Может ли управлять Kubernetes-кластером Да Нет, он сам является платформой кластера

Чем Terraform отличается от Ansible

Terraform в первую очередь создаёт и изменяет инфраструктурные ресурсы, а Ansible чаще используют для настройки систем и программного окружения внутри этих ресурсов.

Разница особенно заметна на примере виртуальной машины. Terraform может создать саму машину, задать её тип, сеть и диск. Ansible удобнее применять уже после этого — чтобы установить пакеты, изменить системные настройки или привести сервер к нужной конфигурации.

У этих инструментов отличается и подход к описанию действий. Terraform делает упор на декларативное описание целевого состояния инфраструктуры. Ansible использует playbook-файлы в YAML и подходит для более детального управления задачами конфигурации.

Поэтому их часто применяют вместе. Один инструмент поднимает инфраструктурный каркас, другой доводит систему до рабочего состояния.

Короткое сравнение

Если нужно создать ресурсы, чаще выбирают Terraform. Если нужно настроить программную среду внутри уже созданных ресурсов, чаще используют Ansible.

  • Terraform — создание, изменение и удаление инфраструктурных ресурсов.
  • Ansible — настройка операционных систем, пакетов, служб и параметров на уже существующих узлах.
  • Совместное использование — Terraform создаёт основу, Ansible настраивает содержимое.

Почему Terraform относят к инфраструктуре как коду

Terraform относят к IaC, потому что инфраструктура в нём описывается файлами, которые можно хранить, проверять, переиспользовать и версионировать так же, как обычный программный код.

Это меняет сам подход к управлению средой. Вместо ручных действий в панели облака команда работает с конфигурациями, которые можно обсудить в pull request, сохранить в репозитории и повторно применить в другом окружении.

У такого подхода есть практический эффект. Инфраструктура становится воспроизводимой. Изменения видны заранее через план. А повторяющиеся блоки можно вынести в модули и не собирать заново каждый раз.

Что нужно запомнить о Terraform

Terraform — это открытый инструмент HashiCorp для управления инфраструктурой через код. Он описывает целевое состояние ресурсов, строит план изменений и применяет его через API провайдеров и сервисов.

Terraform используют для облачной и локальной инфраструктуры, мультиоблачных сред, типовых шаблонов развертывания и совместной работы команд. Он не заменяет Kubernetes и Ansible, а решает другую задачу: управляет самими инфраструктурными ресурсами и их жизненным циклом.