Terraform 无法为模块内的子网引用vpc_id

Terraform 无法为模块内的子网引用vpc_id,terraform,Terraform,具有模块/网络/测试VPC和模块/网络/子网模块配置 main文件夹/modules/network/testvpc/main.tf main文件夹/modules/network/subnet/main.tf main文件夹/main.tf 主文件夹/var.tf 主文件夹/terraform.tfvars 运行terraform validate-var file=terraform.tfvars时出现以下错误 Error: resource 'aws_subnet.

具有模块/网络/测试VPC和模块/网络/子网模块配置

main文件夹/modules/network/testvpc/main.tf main文件夹/modules/network/subnet/main.tf main文件夹/main.tf 主文件夹/var.tf 主文件夹/terraform.tfvars 运行terraform validate-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_子网无法定位vpc_id,因为资源aws_vpc不是由其创建的。我正在调用testvpc和子网作为main文件夹/main.tf中的模块。我错过了什么

其次是aws_vpc和aws_子网中的环路。它应该创建专有网络共享10.1.0.0/16和该专有网络内的子共享,诸如此类,您需要使用,因为您试图引用单独模块中的资源。那不行,因为

模块封装了它们的资源。一个模块中的资源不能直接依赖于其他模块中的资源或属性,除非这些资源或属性通过输出导出

因此,在main文件夹/modules/network/testvpc/main.tf中添加如下输出

output "vpc_ids" { value=["${aws_vpc.customVpc.*.id}"] }
然后在main文件夹/modules/network/subnet/main.tf中添加一个变量,如下所示

variable "vpc_ids" {type="list"}
并在该模块中使用它(而不是试图直接引用/testvpc/main.tf模块中的资源)

最后,现在从您的main文件夹/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}"
} 

还尝试提及“数据”vpc_id=“${element(data.aws_vpc.customVpc.*.id,count.index)}”,但没有帮助,谢谢@rwisch45。让我试试。此外,当我通过模块增加我的资源(路由表、互联网gw等)时,我需要在所有那些main.tf文件中提到vpc_id。是否有更好的方法,例如全局变量(一站式)用于mainfolder以及模块中引用的所有变量值。从管理层开始变得更易于维护perspective@kathir我不这么认为,但这又回到了我们之前讨论的关于你能指定输出的问题上,它起了作用。谢谢@rwisch45。在环路上下文中创建internet gw并分配vpc_id变量时,gw连接到10.1.0.0/16 vpc。逻辑是什么。创建的最后一个VPC是vpc0?因此,我想知道如果我想将gw连接到两个vpc,该怎么办。如何在保持循环的同时做到这一点
 - 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"]
 - 
            Error: resource 'aws_subnet.subnet' config: unknown 
           resource 'data.aws_vpc.customVpc' referenced in variable 
           data.aws_vpc.customVpc.*.id
output "vpc_ids" { value=["${aws_vpc.customVpc.*.id}"] }
variable "vpc_ids" {type="list"}
resource "aws_subnet" "subnet" {
  count = "${length(var.subcidr)}"
  vpc_id = "${element(var.vpc_ids, count.index)}"

  etc, etc

}
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}"
}