为什么 terragrun 会破坏之前创建的资源
why terragrunt destroy previous created resources
我将我们的地形代码组织如下:
$ 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目录下运行 terrag运行t时,会破坏之前创建的ECS集群。如果我先创建 ECR 资源,然后 cd ecs 到 运行 terrag运行t,它会破坏 ECR 资源。即使我将 ECR 依赖项放在 ECS terraform.tfvars 文件中,它也有相同的结果。
我认为这是因为 terrag运行t 不包含 "infrastructure" 下所有子文件夹的资源定义。如果是这样,是否可以以这种方式构建 terraform 目录?
是的,我可以将基础结构组件分成不同的文件夹。但是,您必须让每个组件保持不同的密钥,这样不同的组件之间就不会共享状态。这是我找的零钱。
$cat infrastructure/terraform.tfvars
terragrunt = {
remote_state {
backend = "s3"
config {
bucket = "terraform-dev-state-west2"
key = "${path_relative_to_include()}/terraform.tfstate"
region = "us-west-2"
encrypt = true
}
}
}
修改后,我可以在子文件夹下运行 terrag运行t 而不会互相影响。
我将我们的地形代码组织如下:
$ 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目录下运行 terrag运行t时,会破坏之前创建的ECS集群。如果我先创建 ECR 资源,然后 cd ecs 到 运行 terrag运行t,它会破坏 ECR 资源。即使我将 ECR 依赖项放在 ECS terraform.tfvars 文件中,它也有相同的结果。 我认为这是因为 terrag运行t 不包含 "infrastructure" 下所有子文件夹的资源定义。如果是这样,是否可以以这种方式构建 terraform 目录?
是的,我可以将基础结构组件分成不同的文件夹。但是,您必须让每个组件保持不同的密钥,这样不同的组件之间就不会共享状态。这是我找的零钱。
$cat infrastructure/terraform.tfvars
terragrunt = {
remote_state {
backend = "s3"
config {
bucket = "terraform-dev-state-west2"
key = "${path_relative_to_include()}/terraform.tfstate"
region = "us-west-2"
encrypt = true
}
}
}
修改后,我可以在子文件夹下运行 terrag运行t 而不会互相影响。