Я работаю над проектом по автоматизации инфраструктуры AWS с помощью Terraform. Первоначально я создал две папки (bootstrap и live).
Ниже представлена структура папок Bootstrap.
введите здесь описание изображения
Мы знаем, что нам нужно создать серверный файл конфигурации для хранения состояния Terraform в корзине S3. Но конфигурация бэкэнда не поддерживает интерполяцию переменных, поэтому нам приходится жестко закодировать значения в бэкэнде. В дополнение к этому существует также проблема курицы и яйца (перед их использованием необходимо создать серверную часть S3 и DynamoDB).
Для решения этих проблем хорошим вариантом является Terragrunt.
Но мы также можем создать сценарий Python для автоматического создания файла конфигурации серверной части и запустить команду миграции для сохранения состояния Terraform в серверной части S3.
Подход следующий:
- terraform init (вручную): для инициализации всех модулей, включая S3 и DynamoDB.
- terraform validate (вручную): для проверки синтаксиса всех модулей
- terraform plan -var-file dev.tfvars (вручную)
- А затем запустите сценарий Python, чтобы применить модули и извлечь выходные данные из файла outputs.tf + сгенерировать внутренний файл + перенести состояние на S3.
Разве это не лучший подход к решению этих проблем вместо использования Terragrunt (особенно в папке начальной загрузки) для инициализации модулей, таких как iam_policy, iam_role, dynamoDb, S3 и kms?