Terraform: передача переменной от одного модуля к другому - PullRequest
0 голосов
/ 30 сентября 2019

Я создаю модуль Terraform для создания AWS VPC.

Вот моя структура каталогов

➢  tree -L 3
.
├── main.tf
├── modules
│   ├── subnets
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   └── vpc
│       ├── main.tf
│       ├── outputs.tf
│       └── variables.tf
└── variables.tf

3 directories, 12 files

В модуле подсетей я хочу получить идентификатор vpc vpc (sub) module.

В modules/vpc/outputs.tf Я использую:

output "my_vpc_id" {
  value = "${aws_vpc.my_vpc.id}"
}

Будет ли этого достаточно для выполнения следующих действий в modules/subnets/main.tf?

resource "aws_subnet" "env_vpc_sn" {
   ...
   vpc_id                  = "${aws_vpc.my_vpc.id}"
}

1 Ответ

1 голос
/ 30 сентября 2019

Ваш main.tf (или где бы вы ни использовали модуль подсети) должен был бы передать это с выхода модуля VPC, а ваш модуль подсети должен принять обязательную переменную.

Для доступа кВыходные данные модуля необходимо ссылаться на него как module.<MODULE NAME>.<OUTPUT NAME>:

В родительском модуле выходные данные дочерних модулей доступны в выражениях в виде модуля ... Например, еслидочерний модуль с именем web_server объявил выход с именем instance_ip_addr, вы можете получить доступ к этому значению как module.web_server.instance_ip_addr.

Таким образом, ваш main.tf будет выглядеть примерно так:

module "vpc" {
  # ...
}

module "subnets" {
  vpc_id = "${module.vpc.my_vpc_id}"
  # ...
}

и subnets/variables.tf будет выглядеть так:

variable "vpc_id" {}
...