Terraform:将变量从一个模块传递到另一个模块

时间:2019-09-30 15:17:19

标签: amazon-web-services terraform terraform-provider-aws

我正在创建用于AWS VPC创建的Terraform模块。

这是我的目录结构

➢  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 ID。

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 个答案:

答案 0 :(得分:1)

您的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" {}