执行terraform apply报VPCIdNotSpecified无默认VPC错误如何解决?
报错根因
报错提示
VPCIdNotSpecified是因为你当前使用的AWS账号在us-west-2区域不存在默认VPC,EC2创建时如果不手动指定所属VPC子网,AWS会默认尝试往默认VPC里调度,没有默认VPC就会抛出这个错误。
解决方案
有两种可选方案解决该问题:
方案1:恢复默认VPC(适配原书教程,操作最快)
- 登录AWS控制台,切换到
us-west-2区域,进入VPC服务页面 - 点击右上角「操作」下拉菜单,选择「创建默认VPC」,按提示确认创建即可
- 重新执行
terraform apply就能正常创建EC2实例
方案2:在Terraform代码中显式指定VPC相关配置(符合基础设施即代码规范,推荐长期使用)
你可以直接在代码中补充VPC、子网、安全组的创建逻辑,同时给EC2资源添加对应的关联参数,修改后的完整代码示例如下:
provider "aws" { region = "us-west-2" } # 创建演示用VPC resource "aws_vpc" "demo" { cidr_block = "10.0.0.0/16" tags = { Name = "demo-vpc" } } # 创建公有子网,开启自动分配公网IP resource "aws_subnet" "demo_public" { vpc_id = aws_vpc.demo.id cidr_block = "10.0.1.0/24" availability_zone = "us-west-2a" map_public_ip_on_launch = true tags = { Name = "demo-public-subnet" } } # 创建安全组,开放SSH访问 resource "aws_security_group" "demo_sg" { name = "demo-sg" description = "Allow SSH access" vpc_id = aws_vpc.demo.id ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "demo-sg" } } resource "aws_instance" "helloworld" { ami = "ami-09dd2e08d601bff67" instance_type = "t2.micro" subnet_id = aws_subnet.demo_public.id # 显式指定实例所属子网 vpc_security_group_ids = [aws_security_group.demo_sg.id] # 显式指定绑定的安全组ID tags = { Name = "HelloWorld" } }
- 如果你已经有可用的VPC、子网和安全组,可以直接把对应资源的ID填入
aws_instance的subnet_id和vpc_security_group_ids参数,无需重复创建上述VPC相关资源。 - 修改完成后依次执行
terraform init、terraform apply即可完成部署。
内容的提问来源于stack exchange,提问作者Ajit Goel
相关产品推荐
相关产品推荐

