这是从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}"
}
这是模块/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)}"]}
我在其他各种模块(例如route,privateroutes,internet gw,nat gw)中调用vpc和子网的输出。
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应该是 输入字符串,得到列表
- module.rtassociation.var.rtableid0:模块中的变量rtableid0 rtassociation应该是字符串类型,得到列表
- module.rtassociation.var.subnet_id1:模块中的变量subnet_id1 rtassociation应该是字符串类型,得到列表
- module.igw0.var.vpc_id0:模块igw0中的变量vpc_id0应为 输入字符串,得到列表
- module.rtassociation.var.subnet_id2:模块中的变量subnet_id2 rtassociation应该是字符串类型,得到列表
- module.privateroute.var.vpc_id1:模块中的变量vpc_id1 privateroute应该是字符串类型,得到列表
由于未创建Internet网关nat gw。
我如何在其他模块中引用各个子网的子网ID?
注意:我正在使用计数器在循环中创建VPC和子网。