Оглавление
- Что такое Terragrunt
- Установка и запуск
- Основные концепции и DRY
- Автогенерация конфигураций (Generate)
- Управление зависимостями (Dependencies)
- Команды и рабочий процесс
- Итоги и вердикт
Что такое Terragrunt
Terragrunt — это внешняя оболочка (wrapper) для Terraform, созданная компанией Gruntwork (основатель — Евгений Брикман).
- Главное правило: Если вы не работаете с Terraform или не знаете его, Terragrunt вам абсолютно не нужен.
- Основная цель: Решение проблем и минусов чистого Terraform при долгой работе, а именно реализация подхода DRY (Don’t Repeat Yourself — не повторяйся).
- Фундаментальная концепция: Это “надстройка”, которая сначала выполняет свои манипуляции в фоне, а затем запускает стандартные команды Terraform.
Установка и запуск
Процесс установки максимально прост и идентичен установке Terraform:
- Бинарный файл: Нужно скачать всего один исполняемый файл с сайта проекта.
- Настройка:
- Сделать файл исполняемым (
chmod +x terragrunt). - Переместить в системную папку (например,
/usr/local/bin), чтобы запускать из любого места.
- Сделать файл исполняемым (
- Проверка: Выполнить команду
terragrunt --version.
Основные концепции и DRY
Иерархия файлов
Вместо множества .tf файлов в каждой директории используются файлы конфигурации Terragrunt (.hcl). Существует два критически важных типа файлов:
- Parent (Родительский): Коренной файл конфигурации, содержащий общие настройки для всей инфраструктуры (провайдеры, бэкенд).
- Child (Дочерний): Файлы в директориях модулей, которые наследуют настройки родителя.
Реализация DRY
- Уменьшение кода: Terragrunt позволяет значительно сократить объем повторяющегося кода (например, настройки S3-бакетов или провайдеров), вынося их в один родительский файл.
- Наследование: Дочерний файл находит своего родителя по дереву директорий с помощью функции
include. - Динамические переменные: Terragrunt позволяет использовать функции (например,
path_relative_to_include()) там, где в чистом Terraform использование переменных в блокеbackendзапрещено.
Автогенерация конфигураций (Generate)
Terragrunt умеет автоматически создавать файлы .tf на основе своих .hcl конфигураций.
- Remote State: Блок
remote_stateавтоматически генерирует настройки бэкенда для хранения state-файлов. - Блок
generate:- Позволяет создавать файлы провайдеров (
provider.tf) или бэкенда (backend.tf) “на лету”. - Поддерживает флаг
if_exists = "overwrite", чтобы перезаписывать файлы при каждом запуске. - Позволяет использовать переменные окружения и специфические данные аккаунтов (AWS/GCP) для разных окружений (Dev, Prod) из одного места.
- Позволяет создавать файлы провайдеров (
Управление зависимостями (Dependencies)
Это одна из самых мощных функций Terragrunt, которой не хватает в стандартном Terraform.
dependency(Чтение данных): Позволяет получитьoutputsодного модуля и передать их какinputsдругому (например, передать имя созданного S3-бакета в конфигурацию объекта).dependencies(Порядок выполнения): Явное указание списка зависимостей. Terragrunt автоматически определяет, какой ресурс должен быть создан первым, а какой — вторым.- Граф развертывания: При запуске из корня Terragrunt анализирует дерево зависимостей и запускает деплой в правильном порядке.
Команды и рабочий процесс
Команды Terragrunt практически полностью дублируют команды Terraform, но с приставкой run-all для массовых операций:
terragrunt run-all apply: Проходит по всем директориям, определяет зависимости и запускает развертывание всей инфраструктуры.terragrunt run-all destroy: Массовое удаление ресурсов в обратном порядке зависимостей.- Кэширование: При работе создается скрытая директория
.terragrunt-cache, куда копируются исходные коды модулей и сгенерированные файлы. - Inputs: Переменные передаются в модули через блок
inputs = { ... }, что заменяет файлы.tfvars.
Итоги и вердикт
Фундаментальный принцип: Terragrunt делает код Terraform более чистым (DRY), управляемым и позволяет автоматизировать работу с зависимостями в больших проектах.
Плюсы и минусы
- Золото: Реально упрощает работу с мульти-аккаунтами, общими бэкендами и зависимостями.
- “Говно” (Сложность): Синтаксис HCL в Terragrunt бывает крайне запутанным и сложным для понимания, документация иногда заставляет “копипастить” решения без полного понимания.
- Вердикт автора: Это “золотое говно” или “говно из золота”. Идея отличная, но реализация (особенно синтаксис) оставляет желать лучшего. Тем не менее, во многих крупных проектах использование Terragrunt становится практически неизбежным.