Почему террагрунт уничтожает ранее созданные ресурсы

Я организовал наш код 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 в подпапке, не влияя друг на друга.

Другие вопросы по тегам