使用Terraform创建AWS子网时遇InvalidVpcID.NotFound错误求助
Terraform创建子网时InvalidVpcID.NotFound错误的修复方案
错误根源
你在子网资源中使用var.VPC_ID作为vpc_id的值,但这个变量只是VPC的自定义名称(默认值"My-VPC"),而AWS要求vpc_id必须是实际的VPC ID(格式如vpc-0abcd1234efgh5678),而非自定义名称。同时还有几处配置疏漏需要修正。
修复步骤及代码示例
修正子网的VPC ID引用
将子网的vpc_id从变量引用改为Terraform VPC资源的属性引用,这样会自动关联刚创建的VPC的实际ID,同时确保资源创建顺序(先建VPC再建子网)。修正子网CIDR块
当前子网使用了与VPC相同的CIDR范围,会导致地址冲突,应使用var.Public_Subnet中定义的子网专属CIDR。补全缺失的变量
VPC资源中用到的var.Instance_tenancy未在变量文件中定义,需补充该变量。添加可用区配置
子网必须指定可用区,使用已定义的var.Public_AVZ变量配置。
修正后的variable.tf
variable "VPC_ID" { description = "自定义VPC名称" type = string default = "My-VPC" } variable "cidr" { description = "VPC的IPv4 CIDR块" type = string default = "10.0.0.0/16" } variable "Public_Subnet" { description = "公网子网的CIDR列表" type = list(string) default = ["10.0.1.0/24"] } variable "Public_AVZ" { description = "公网子网所在可用区" type = string default = "aps1-az1" } # 补充缺失的实例租期变量 variable "Instance_tenancy" { description = "VPC的实例租期设置" type = string default = "default" }
修正后的VPC资源文件(vpc.tf)
resource "aws_vpc" "My-VPC" { cidr_block = var.cidr instance_tenancy = var.Instance_tenancy tags = { Name = var.VPC_ID } }
修正后的子网资源文件(subnets.tf)
resource "aws_subnet" "Public_Subnet" { vpc_id = aws_vpc.My-VPC.id # 引用实际VPC ID cidr_block = var.Public_Subnet[0] # 使用子网专属CIDR availability_zone = var.Public_AVZ # 指定可用区 tags = { Name = "Public-Subnet" } }
可选:批量创建多个子网
如果需要基于var.Public_Subnet列表创建多个子网,可使用for_each:
resource "aws_subnet" "Public_Subnet" { for_each = toset(var.Public_Subnet) vpc_id = aws_vpc.My-VPC.id cidr_block = each.value availability_zone = var.Public_AVZ tags = { Name = "Public-Subnet-${index(var.Public_Subnet, each.value)}" } }
验证修复
完成配置修改后,依次运行:
terraform validate terraform plan terraform apply
此时应该能正常创建VPC和子网,不再出现InvalidVpcID.NotFound错误。
内容的提问来源于stack exchange,提问作者Support Test email account
相关产品推荐
相关产品推荐

