Terraform

Инструмент «инфраструктура как код»: серверы, сети и базы данных описываются в файлах, а Terraform создает и меняет их в облаке сам.

Terraform — инструмент для подхода «инфраструктура как код» (Infrastructure as Code). Вместо того чтобы создавать серверы, сети и базы данных вручную в панели облака, их описывают в текстовых файлах. Terraform читает описание, сравнивает с тем, что уже есть, и создает, изменяет или удаляет ресурсы, чтобы реальность совпала с описанием. Инструмент выпустила компания HashiCorp в 2014 году.

Пример

# HCL (Terraform)
resource "yandex_compute_instance" "app" {
  name = "billing-app"

  resources {
    cores  = 2
    memory = 4
  }

  boot_disk {
    initialize_params {
      image_id = var.ubuntu_image_id
    }
  }

  network_interface {
    subnet_id = yandex_vpc_subnet.main.id
    nat       = true
  }
}

Описание виртуальной машины в Yandex Cloud: 2 ядра, 4 ГБ памяти, диск с Ubuntu, подключение к подсети. Нужно 8 ГБ памяти — меняют одну цифру, и Terraform изменит машину.

Как работает

  1. terraform plan показывает, что будет создано, изменено и удалено. Этот план проверяют, как код-ревью.
  2. terraform apply выполняет изменения через API облака.
  3. Terraform запоминает созданное в файле состояния (state), чтобы в следующий раз понимать, что уже существует. Этот файл хранят в общем защищенном хранилище, а не на ноутбуке.

С разными облаками и сервисами Terraform работает через провайдеры: Yandex Cloud, VK Cloud, AWS, а также Kubernetes, DNS-сервисы, системы мониторинга.

Зачем это нужно

  • Воспроизводимость. Тестовая среда создается копией рабочей одной командой и так же удаляется.
  • История изменений. Файлы лежат в Git: видно, кто, когда и зачем изменил инфраструктуру.
  • Меньше ручных ошибок. Нет «забытой галочки» в панели облака, о которой знает один администратор.
  • Автоматизация. Изменения инфраструктуры проходят через тот же конвейер CI/CD, что и код.

Лицензия и доступность

В 2023 году HashiCorp перевела Terraform на лицензию, ограничивающую коммерческое использование конкурентами, и сообщество под крылом Linux Foundation создало совместимый открытый форк OpenTofu. Загрузка Terraform и провайдеров с серверов HashiCorp из России ограничена, поэтому используют зеркала российских облаков или OpenTofu — описания инфраструктуры при этом не меняются.

Подводные камни

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