【问题标题】:Terraform: Passing variable from one module to anotherTerraform:将变量从一个模块传递到另一个模块
【发布时间】:2021-08-31 16:34:19
【问题描述】:

我正在为 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}"
}

【问题讨论】:

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


    【解决方案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" {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2021-01-18
      • 1970-01-01
      • 2017-04-23
      • 2020-03-23
      相关资源
      最近更新 更多