You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:27:06