我组织了我们的 terraform 代码如下:
$ tree infrastructure
infrastructure
├── ecr
│ └── terraform.tfvars
├── ecs
│ ├── ecs-iam.json
│ └── terraform.tfvars
└── terraform.tfvars
2 directories, 4 files
$cat infrastructure/terraform.tfvars
terragrunt = {
remote_state {
backend = "s3"
config {
bucket = "terraform-dev-state-west2"
key = "dev/terraform.tfstate"
region = "us-west-2"
encrypt = true
}
}
}
在每个组件目录下,我将定义共享模块的属性
$more infrastructure/ecr/terraform.tfvars
terragrunt = {
include {
path = "${find_in_parent_folders()}"
}
terraform {
source = "git::ssh://git@git.xxx.xxx/deployment//modules/ecr"
}
}
repository_names = [
"web",
"db",
"cache",
"log"
]
我可以转到 ecr 或 ecs 等单个目录,运行“terragrunt init; terragrunt apply”没有问题。它将创建 AWS ECR 或 AWS ECS 集群。但是当我在 ECR 目录中运行 terragrunt 时,它会破坏之前创建的 ECS 集群。如果我先创建 ECR 资源,然后 cd ecs 运行 terragrunt,它将破坏 ECR 资源。即使我将 ECR 依赖项放在 ECS terraform.tfvars 文件中,它也具有相同的结果。我认为这是因为 terragrunt 不包括“基础设施”下所有子文件夹的资源定义。如果是这种情况,是否可以以这种方式构建 terraform 目录?