Почему террагрунт уничтожает ранее созданные ресурсы
Я организовал наш код 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. Но когда я запускаю terragrunt в каталоге ECR, он уничтожит ранее созданный кластер ECS. Если я сначала создал ресурс ECR, а затем cd ecs для запуска terragrunt, он уничтожит ресурсы ECR. Даже если я поместил зависимости ECR в файл ECS terraform.tfvars, он имеет тот же результат. Я думаю, что это потому, что Terragrunt не включает определение ресурса из всех подпапок в разделе "Инфраструктура". Если это так, возможно ли структурировать каталоги terraform таким образом?
1 ответ
Да, я могу разделить компоненты инфраструктуры на разные папки. Однако вы должны держать ключ каждого компонента разным, чтобы разные компоненты не разделяли состояние друг с другом. Вот мое изменение.
$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
}
}
}
После этого изменения я могу запустить terragrunt в подпапке, не влияя друг на друга.