Terraform: Автоматизация инфраструктуры — просто и эффективно

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

Проблема без Terraform

Представьте: команда разработчиков запрашивает серверы для нового приложения. Вам необходимо создать виртуальные машины, подготовить базы данных и хранилища, настроить Docker, сеть и безопасность. Другая команда запрашивает тестовый и стейджинг-контуры — и всё повторяется. Постоянные изменения требований приводят к трудоёмким ручным действиям.

Решение: Terraform

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

Ключевые компоненты Terraform

Terraform состоит из двух основных компонентов:

  1. Ядро (Core): Работает с файлом конфигурации и состоянием.

    • Файл конфигурации: Описание желаемого состояния инфраструктуры на языке HCL (HashiCorp Configuration Language), похожем на JSON или YAML.
    • Состояние (State): Хранит текущее состояние инфраструктуры. Ядро сравнивает желаемое состояние (из файла конфигурации) с текущим и создаёт план действий: что создать, изменить или удалить.
  2. Провайдеры (Provider): «Плагины», обеспечивающие взаимодействие с различными технологиями. Это могут быть облачные провайдеры (AWS, Google Cloud Platform, Microsoft Azure, Selectel) или локальные решения (OpenStack, KVM, VMware). Провайдеры определяют доступные ресурсы (серверы, базы данных, сети и т.д.).

Ресурсы (Resource)

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

Конфигурационный файл (.tf)

Конфигурационный файл Terraform (.tf) содержит:

  • Блок terraform: Глобальные настройки, включая используемые провайдеры.
  • Блок provider: Настройки для каждого провайдера (например, данные для подключения).
  • Блок resource: Описание ресурсов: тип ресурса, его имя и настройки. Пример: resource "aws_instance" "example" { … }

Основные команды Terraform

  • terraform init: Инициализация проекта.
  • terraform plan: Создание плана изменений.
  • terraform apply: Применение плана изменений.
  • terraform state: Просмотр текущего состояния инфраструктуры.
  • terraform destroy: Удаление всей инфраструктуры.

Множественное использование одного файла состояния

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

Сравнение с Ansible

Terraform и Ansible могут использоваться совместно: Terraform развёртывает инфраструктуру, а Ansible её настраивает.

Что будем искать? Например,программа