具有模块/网络/ testvpc和模块/网络/子网模块配置。
variable "vpccidr" {type="list"}
variable "vpcname" {type="list"}
resource "aws_vpc" "customVpc" {
count = "${length(var.vpccidr)}"
cidr_block = "${element(var.vpccidr,count.index)}"
tags {
Name = "${element(var.vpcname,count.index)}"
}
variable "subcidr" {type="list"}
variable "subname" {type="list"}
resource "aws_subnet" "subnet" {
count = "${length(var.subcidr)}"
vpc_id = "${element(aws_vpc.customVpc.*.id, count.index)}"
cidr_block = "${element(var.subcidr, count.index)}"
tags {
Name = "${element(var.subname, count.index)}"
}
}
module "testvpc" {
source = "./modules/network/testvpc"
vpccidr="${var.vpccidr}"
vpcname="${var.vpcname}"
}
module "subnet" {
source = "./modules/network/subnet"
subcidr = "${var.subcidr}"
subname = "${var.subname}"
}
variable "vpccidr" {type="list"}
variable "vpcname" {type="list"}
variable "subcidr" {type="list"}
variable "subname" {type="list"}
- vpccidr=["10.1.0.0/16","10.2.0.0/16","10.3.0.0/16"]
vpcname=["vpc-shared","vpc-sand","vpc-preprod"]
subcidr=["10.1.1.0/24","10.2.1.0/24","10.3.1.0/24"]
subname=["sub-shared","sub-sand","sub-preprod"]
-
在运行terraform时,验证-var-file = terraform.tfvars会出现以下错误
Error: resource 'aws_subnet.subnet' config: unknown
resource 'data.aws_vpc.customVpc' referenced in variable
data.aws_vpc.customVpc.*.id
是不是因为aws_subnet无法找到vpc_id,因为没有创建资源aws_vpc。我在mainfolder / main.tf中将testvpc和子网都称为模块。我想念的是什么。
第二个是aws_vpc和aws_subnet中的适当的循环。它应创建vpc共享的10.1.0.0/16,并在该vpc中进行子共享,依此类推
答案 0 :(得分:1)
您需要使用module outputs,因为您试图在单独的模块中引用资源。那是行不通的,因为
模块封装其资源。一个模块中的资源不能直接依赖其他模块中的资源或属性,除非这些资源或属性是通过输出导出的。
因此,在 mainfolder / modules / network / testvpc / main.tf 中,添加这样的输出
output "vpc_ids" { value=["${aws_vpc.customVpc.*.id}"] }
然后在 mainfolder / modules / network / subnet / main.tf 中添加一个变量
variable "vpc_ids" {type="list"}
并在该模块中使用它(而不是尝试直接引用 /testvpc/main.tf 模块中的资源)
resource "aws_subnet" "subnet" {
count = "${length(var.subcidr)}"
vpc_id = "${element(var.vpc_ids, count.index)}"
etc, etc
}
,最后从您的 mainfolder / main.tf
module "testvpc" {
source = "./modules/network/testvpc"
vpccidr="${var.vpccidr}"
vpcname="${var.vpcname}"
}
module "subnet" {
source = "./modules/network/subnet"
subcidr = "${var.subcidr}"
subname = "${var.subname}"
vpc_ids = "${module.testvpc.vpc_ids}"
}