Prog Academy
RU UA
DevOps и облака

Что такое Terraform?

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

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

Инструмент работает с AWS, Azure, Google Cloud и десятками других провайдеров через единый язык конфигурации HCL. Текущее состояние инфраструктуры хранится в state-файле, который в командной работе размещают в общем защищённом хранилище.

Где применяется

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

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

Пример

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

resource "aws_s3_bucket" "uploads" {
  bucket = "progacademy-uploads"
}

resource "aws_instance" "api" {
  count         = 2
  ami           = "ami-0abcdef1234567890"
  instance_type = "t3.small"

  tags = {
    Name = "api-${count.index}"
  }
}
Описание ресурса: вы задаёте желаемое состояние, а Terraform вычисляет, что для этого сделать.

Частые вопросы

Что такое state в Terraform?

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

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

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

Можно ли случайно удалить продакшен командой Terraform?

Теоретически да, поэтому перед применением всегда смотрят план изменений. Дополнительно ставят защиту от удаления на критичные ресурсы, разделяют окружения на отдельные конфигурации и требуют ревью изменений. Слепое применение без чтения плана — главный источник аварий.

Что такое OpenTofu?

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

Связанные термины