Вы должны начать с создания структуры каталогов, которая отражает желаемую структуру учетной записи. Исходя из вашего вопроса, может показаться, что вы хотите что-то вроде этого:
├── dev
│ ├── terragrunt.hcl
│ └── us-east-1
├── master
│ ├── _global
│ │ └── dns
│ ├── terragrunt.hcl
│ └── us-east-1
│ └── kms
├── prod
│ ├── terragrunt.hcl
│ └── us-east-1
└── uat
├── terragrunt.hcl
└── us-east-1
У учетной записи master
здесь есть два каталога, которых нет у других:
_global/dns
- поскольку маршрут 53 в AWS является глобальной сущностью (не региональной), вы не хотите вкладывать его в us-east-1
. Он существует только в учетной записи master
, поскольку вы указали, что хотите управлять DNS с главного устройства. (Я бы также рекомендовал назвать его route53
, а не dns
, но я отвлекся.)
us-east-1/kms
- содержит конфигурацию KMS, также только для master
.
Теперь, в master/terragrunt.hcl
, настройте свою конфигурацию remote_state
:
remote_state {
backend = "s3"
config = {
encrypt = true
bucket = "master-terraform-state" # Just for example - must be a globally unique
key = "${path_relative_to_include()}/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
}
}
При желании вы также можете включить iam_role
атрибут :
iam_role = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
Обратите внимание, что это необязательно, поскольку вы также можете просто запустить Terragrunt с учетными данными для главной учетной записи, или вы можете использовать опцию --terragrunt-iam-role
CLI, или вы можете установить TERRAGRUNT_IAM_ROLE
env var. Во всех случаях вы будете выполнять terragrunt с ролью, которая имеет разрешения для основной учетной записи.
Теперь для учетных записей dev / uat / prod вы можете иметь аналогичную конфигурацию remote_state
, заменяя другую. название ведра для каждого из них. Затем вы можете использовать роль IAM, соответствующую каждой из этих учетных записей, либо определив ее как iam_role
в terragrunt.hcl
в каждой учетной записи, либо другими способами, которые я упомянул.
TL; DR Вам не нужно создавать провайдера для этого, и вам не нужно называть профиль в конфигурации провайдера. Вы просто выполняете terragrunt с правильной ролью IAM для каждой учетной записи. Террагрунт возьмет на себя эту роль, прежде чем вызывать Терраформ. Поместите конфигурацию провайдера в свой модуль Terraform, оставив профиль выключенным.