Обзор
Terraform — инструмент для автоматизации управления облачной инфраструктурой, основанный на подходе Infrastructure as Code. Пользователь описывает нужное состояние инфраструктуры в декларативных конфигурационных файлах, и на основе этого описания автоматически создаются облачные ресурсы.
Для описания инфраструктуры используется язык HCL (HashiCorp Configuration Language). Также Terraform поддерживает описания в формате JSON.
Процесс работы с Terraform
Работа с Terraform состоит из следующих этапов:
Описание конфигурации. Пользователь описывает необходимое состояние инфраструктуры в формате HCL или JSON.
Инициализация. Пользователь выполняет команду
terraform init. Terraform загружает необходимые для работы плагины и модули.Планирование. Пользователь выполняет команду
terraform plan. Terraform читает конфигурацию, сравнивает желаемое состояние инфраструктуры с текущим и генерирует план изменений с информацией о ресурсах и операциях.Применение изменений. Пользователь выполняет команду
terraform apply. Terraform применяет необходимые изменения: создает, добавляет или удаляет ресурсы в соответствии с описанием. Информация обо всех изменениях сохраняется в файле состояния.
Преимущества Terraform
Декларативный подход. В конфигурациях Terraform описываются не конкретные операции с облачными ресурсами, а состояние, которое нужно получить в результате. Все необходимые для этого действия выполняются автоматически.
Идемпотентность. Многократное применение одной и той же конфигурации не оказывает никакого влияния на инфраструктуру. Terraform сравнивает текущее состояние с желаемым и вносит только необходимые изменения.
Модульность и возможность многократного использования. В Terraform можно создавать готовые шаблоны кода — модули (например, для создания виртуальной машины или сети), чтобы потом повторно использовать их в разных проектах.
Широкие возможности интеграции. Terraform легко интегрируется с GitLab CI, Jenkins, GitHub Actions и другими инструментами, что дает возможность автоматически развертывать инфраструктуру при каждом изменении кода.