Это фрагмент из файла 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)}"]}
Я называю выходы vpc и подсетей в различных других модулях, таких как маршруты, 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: переменная subnet_id0 в модуле nat должна иметь тип string, полученный список
- module.rtassociation.var.rtableid0: переменная rtableid0 в модуле rtassociation должна быть строкой типа, полученный список
- module.rtassociation.var.subnet_id1: переменная subnet_id1 в модуле rtassociation должна быть строкой типа, полученный список
- module.igw0.var.vpc_id0: переменная vpc_id0 в модуле igw0 должна быть строкой типа, полученный список
- module.rtassociation.var.subnet_id2: переменная subnet_id2 в rtassociation модуля должна быть строкой типа, полученный список
- module.privateroute.var.vpc_id1: переменная vpc_id1 в модуле privateroute должна иметь тип string, полученный список
, вследствие чегоинтернет-шлюз nat gw не создается.
Как ссылаться на идентификаторы подсетей отдельных подсетей в других модулях?
ПРИМЕЧАНИЕ Я создаю VPC и подсети в цикле, используя счетчик.