У меня нет опыта использования terragrunt, но обычно я вызываю свои модули из файла "main.tf" в корне проекта. Пример структуры папок ниже
.
├── main.tf
└── modules
├── app1
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── app2
├── main.tf
├── outputs.tf
└── variables.tf
Мой app1 output.tf объявляет выход группы безопасности A
output "sec_group_a" { value = "${aws_security_group.sec_group_A}" }
Затем я могу вызвать этот вывод в моем файле main.tf в корне проекта. Это будет выглядеть примерно так:
module "app1" {
source = "./modules/app1"
...
// Pass in my variables
}
module "app2" {
source = "./modules/app2"
sec_group_A = "${module.app1.sec_group_A}"
...
//Pass in the rest of my variables
}
Наконец, внутри модуля app2 вы можете вызывать это, как и любую другую переменную.
resource "aws_elb" "bar" {
name = "foobar-terraform-elb"
security_groups = ["${var.sec_group_A.id}"]
...
...
}
Я бы прочитал здесь модули https://www.terraform.io/docs/modules/index.html, чтобы лучше понять, как они сочетаются друг с другом.
В качестве альтернативы вы можете получить данные из вашего удаленного состояния (если оно у вас настроено), если sec_group_A объявлена как выходная информация в app1. См https://www.terraform.io/docs/providers/terraform/d/remote_state.html