Оглавление

  1. Что такое Terragrunt
  2. Установка и запуск
  3. Основные концепции и DRY
  4. Автогенерация конфигураций (Generate)
  5. Управление зависимостями (Dependencies)
  6. Команды и рабочий процесс
  7. Итоги и вердикт

Что такое Terragrunt

Terragrunt — это внешняя оболочка (wrapper) для Terraform, созданная компанией Gruntwork (основатель — Евгений Брикман).

  • Главное правило: Если вы не работаете с Terraform или не знаете его, Terragrunt вам абсолютно не нужен.
  • Основная цель: Решение проблем и минусов чистого Terraform при долгой работе, а именно реализация подхода DRY (Don’t Repeat Yourself — не повторяйся).
  • Фундаментальная концепция: Это “надстройка”, которая сначала выполняет свои манипуляции в фоне, а затем запускает стандартные команды Terraform.

Установка и запуск

Процесс установки максимально прост и идентичен установке Terraform:

  1. Бинарный файл: Нужно скачать всего один исполняемый файл с сайта проекта.
  2. Настройка:
    • Сделать файл исполняемым (chmod +x terragrunt).
    • Переместить в системную папку (например, /usr/local/bin), чтобы запускать из любого места.
  3. Проверка: Выполнить команду terragrunt --version.

Основные концепции и DRY

Иерархия файлов

Вместо множества .tf файлов в каждой директории используются файлы конфигурации Terragrunt (.hcl). Существует два критически важных типа файлов:

  • Parent (Родительский): Коренной файл конфигурации, содержащий общие настройки для всей инфраструктуры (провайдеры, бэкенд).
  • Child (Дочерний): Файлы в директориях модулей, которые наследуют настройки родителя.

Реализация DRY

  • Уменьшение кода: Terragrunt позволяет значительно сократить объем повторяющегося кода (например, настройки S3-бакетов или провайдеров), вынося их в один родительский файл.
  • Наследование: Дочерний файл находит своего родителя по дереву директорий с помощью функции include.
  • Динамические переменные: Terragrunt позволяет использовать функции (например, path_relative_to_include()) там, где в чистом Terraform использование переменных в блоке backend запрещено.

Автогенерация конфигураций (Generate)

Terragrunt умеет автоматически создавать файлы .tf на основе своих .hcl конфигураций.

  1. Remote State: Блок remote_state автоматически генерирует настройки бэкенда для хранения state-файлов.
  2. Блок 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 становится практически неизбежным.