这是从Mainfolder / main.tf文件中剪切的

module "testvpc" {
source = "./modules/network/testvpc"
vpccidr="${var.vpccidr}"
vpcname="${var.vpcname}"
vpc_id0="${module.testvpc.vpc_id0}"
vpc_id1="${module.testvpc.vpc_id1}"
vpc_id2="${module.testvpc.vpc_id2}"
rtableid0="${module.testvpc.rtableid0}"
 }

从./modules/network调用子网模块以在每个vpc中创建子网

module "subnet" {
source = "./modules/network/subnet"
subcidr = "${var.subcidr}"
subname = "${var.subname}"
vpc_ids = "${module.testvpc.vpc_ids}"
subnet_id0 = "${module.subnet.subnet_id0}"
subnet_id1 = "${module.subnet.subnet_id1}"
subnet_id2 = "${module.subnet.subnet_id2}"
  }

这是modules / testvpc / main.tf

variable "vpccidr" {type="list"}
variable "vpcname" {type="list"}
 variable "vpc_id0" {type="list"}
 variable "vpc_id1" {type="list"}
 variable "vpc_id2" {type="list"}
 variable "rtableid0" {type="list"}

 resource "aws_vpc" "customVpc" {
 count = "${length(var.vpccidr)}"
 cidr_block = "${element(var.vpccidr,count.index)}"
 enable_dns_support = true
 enable_dns_hostnames = true

 tags {
  #count = "${length(var.vpcname)}"
  Name = "${element(var.vpcname,count.index)}"
  }
  }

  output "vpc_ids" { value=["${aws_vpc.customVpc.*.id}"]}
  output "vpc_id0" { value=["${element(aws_vpc.customVpc.*.id,0)}"] }
  output "vpc_id1" { value=["${element(aws_vpc.customVpc.*.id,1)}"] }
  output "vpc_id2" { value=["${element(aws_vpc.customVpc.*.id,2)}"] }
   output "rtableid0" { value 
  ["${element(aws_vpc.customVpc.*.main_route_table_id,0)}"]}

我在各种其他模块中调用vpc和子网的输出,如routes,privateroutes,internet gw,nat gw .

terraform validate --var-file=file.tfvars and terraform plan --var-file=file.tfvars

但是当试图做的时候:

terraform apply --var-file=file.tfvars i get a error saying

module.nat.var.subnet_id0:模块nat中的变量subnet_id0应为type string,got list module.rtassociation.var.rtableid0:模块rtassociation中的变量rtableid0应为type string,got list module.rtassociation.var.subnet_id1:variable模块rtassociation中的subnet_id1应为type string,got list module.igw0.var.vpc_id0:模块中的变量vpc_id0 igw0应为type string,got list module.rtassociation.var.subnet_id2:module rtassociation中的变量subnet_id2应为type string,got list module.privateroute.var.vpc_id1:模块privateroute中的变量vpc_id1应为type string,got list

因此互联网网关nat gw不会被创建 .

如何引用其他模块中各个子网的子网ID?

NOTE 我正在使用计数器在循环中创建VPC和子网 .