如何引用Terraform模块创建的资源

时间:2018-10-14 16:03:29

标签: terraform

我正在使用AWS VPC Terraform module创建一个VPC。另外,我想使用aws_internet_gateway resource创建Internet网关并将其附加到此VPC。

这是我的代码:

module "vpc" "vpc_default" {
  source = "terraform-aws-modules/vpc/aws"

  name = "${var.env_name}-vpc-default"
  cidr = "10.0.0.0/16"
  enable_dns_hostnames = true
}

resource "aws_internet_gateway" "vpc_default_igw" {
  vpc_id = "${vpc.vpc_default.id}"

  tags {
    Name = "${var.env_name}-vpc-igw-vpcDefault"
  }
}

运行terraform init时,出现以下错误:

  

正在初始化模块...   -module.vpc

     

错误:资源'aws_internet_gateway.vpc_default_igw'配置:变量vpc.vpc_default.id中引用的未知资源'vpc.vpc_default'

如何引用Terraform模块创建的资源?

2 个答案:

答案 0 :(得分:7)

由于您使用的是模块,因此您需要稍微更改参考的格式。 Module Outputs使用格式${module.<module name>.<output name>}。同样重要的是要注意,您只能引用从模块输出的值。

在您的特定情况下,它将根据VPC Module's Outputs变成${module.vpc.vpc_id}

答案 1 :(得分:0)

请注意,您可以在一个文件中包含多个模块实例:

module "vpc1" "vpc_default" {}
module "vpc2" "vpc_default" {}
module "vpc3" "vpc_default" {}
module "vpc4" "vpc_default" {}

${module.vpc1.vpc_id}
${module.vpc2.vpc_id}
${module.vpc3.vpc_id}
${module.vpc4.vpc_id}