Terragrunt: чтение вышестоящих переменных - PullRequest
2 голосов
/ 30 марта 2020

Я пытаюсь разработать свою инфраструктуру AWS и иметь следующую структуру:

regions
└── us-east-2_Ohio
    ├── terragrunt.hcl
    ├── variables.tf
    └── vpcs
        ├── myVPC
            ├── terragrunt.hcl
            ├── variables.tf
            └── vpc.tf

В файле variables.tf на уровне us-east-2_Ohio у меня установлены провайдер и регион:

provider "aws" {
  region = "us-east-2"
}

Когда я запускаю terragrunt plan-all, модуль myVP C для provider.aws.region запрашивает модуль vp c. Я бы хотел, чтобы это было передано из родительского модуля, но что бы я ни пытался, это не сработает. Либо он жалуется, что тип блока не ожидается, либо что целевой модуль не был применен. Я даже создал main.tf на us-east-2_Ohio, который имеет только

output "provider_region" {
  value = "us-east-2a"
}

, и это не сработало.

Любые предложения будут с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 30 марта 2020

При использовании Terragrunt в идеале вам следует придерживаться конфигурации Terragrunt в вашей иерархии Terragrunt и ссылаться на код Terraform в отдельном хранилище. Пример этого см. В репозиториях Terragrunt Infrastructure-Live и Terragrunt Infrastructure-modules . Они демонстрируют несколько концепций, которые могут помочь вам лучше понять, как структурировать ваш код.

Как продемонстрировано в репозиториях, на которые я ссылался выше, вы можете определить регион в файле regions.hcl, который будет выглядеть следующим образом :

locals {
  aws_region = "us-east-1"
}

На уровне вашего модуля terragrunt.hcl (модуль myVPC в вашем примере) у вас будет такой блок:

include {
  path = find_in_parent_folders()
}

This включит переменную aws_region и передаст ее вашему модулю Terraform, где вы можете установить его в блоке provider{}.

...