告别手动配置:用 Terraform 在华为云上一键创建 VPC 网络环境

举报
yd_243668775 发表于 2026/11/09 08:13:57 2026/11/09
【摘要】 一、为什么要用 Terraform?如果你还在华为云控制台上手动点选创建 VPC、子网、安全组,每次环境重建都要重复一遍同样的操作,那你一定经历过这些痛苦:步骤多、容易漏配,比如忘了开安全组端口,应用起不来还得回头排查多环境(开发/测试/生产)配置不一致,"在我机器上能跑"的经典场景再次上演团队协作时,谁改了什么无从追溯,出了问题只能翻操作日志Terraform 解决的就是这个问题。你用一种...

一、为什么要用 Terraform?

如果你还在华为云控制台上手动点选创建 VPC、子网、安全组,每次环境重建都要重复一遍同样的操作,那你一定经历过这些痛苦:

  • 步骤多、容易漏配,比如忘了开安全组端口,应用起不来还得回头排查
  • 多环境(开发/测试/生产)配置不一致,"在我机器上能跑"的经典场景再次上演
  • 团队协作时,谁改了什么无从追溯,出了问题只能翻操作日志

Terraform 解决的就是这个问题。你用一种声明式的语言描述"我要什么样的基础设施",Terraform 负责把它变成现实。一份配置文件就是一份可复用、可版本化、可审查的基础设施蓝图。

二、本文目标

用 Terraform 完成以下资源的创建:

  1. 一个 VPC(虚拟私有云)
  2. 一个子网(Subnet)
  3. 一个安全组(Security Group),放通 SSH 和 HTTP
  4. 一个对等连接用的路由表(可选,本文先搭基础骨架)

最终效果:一条 terraform apply,整个网络环境就绪,后续可以直接在这套网络上挂 ECS、ELB 等资源。

三、环境准备

安装 Terraform

在本地机器上安装 Terraform CLI。官方提供了各平台的安装包,下载对应版本解压即可,不需要复杂编译过程。安装完成后在终端执行 terraform version,能看到版本号说明安装成功。

配置华为云认证信息

Terraform 操作华为云需要 AK/SK(访问密钥)。你可以在华为云控制台的"我的凭证"页面创建访问密钥。拿到 AK 和 SK 后,建议通过环境变量传入,而不是硬编码到配置文件中:

export HW_ACCESS_KEY="你的AK"
export HW_SECRET_KEY="你的SK"
export HW_REGION="cn-north-4"

这样做的好处是:密钥不会进入代码仓库,团队协作时每个人用自己的密钥,互不干扰。

四、编写 Terraform 配置

1. 声明 Provider(告诉 Terraform 我们要用华为云)

创建一个文件 provider.tf:

terraform {
  required_providers {
    huaweicloud = {
      source  = "huaweicloud/huaweicloud"
      version = ">= 1.50.0"
    }
  }
}

provider "huaweicloud" {
  region = var.region
}

required_providers 块声明了我们要用的插件和版本约束。provider 块配置认证信息,这里 region 用变量传入,AK/SK 通过环境变量自动读取,不需要在这里写明。

2. 定义变量(让配置可复用)

创建 variables.tf:

variable "region" {
  description = "华为云区域"
  type        = string
  default     = "cn-north-4"
}

variable "vpc_cidr" {
  description = "VPC网段"
  type        = string
  default     = "192.168.0.0/16"
}

variable "subnet_cidr" {
  description = "子网网段"
  type        = string
  default     = "192.168.1.0/24"
}

把可变的部分提取成变量,是 Terraform 的基本习惯。以后换区域、换网段,改一处即可,不用动资源定义。

3. 创建 VPC 和子网

创建 network.tf:

resource "huaweicloud_vpc" "main" {
  name = "tf-demo-vpc"
  cidr = var.vpc_cidr
}

resource "huaweicloud_vpc_subnet" "main" {
  name       = "tf-demo-subnet"
  cidr       = var.subnet_cidr
  gateway_ip = "192.168.1.1"
  vpc_id     = huaweicloud_vpc.main.id
}

注意 vpc_id = huaweicloud_vpc.main.id 这一行——这是 Terraform 最核心的能力:资源间引用。子网依赖 VPC,Terraform 会自动推断出创建顺序:先建 VPC,拿到 ID,再建子网。你不需要手动先建 VPC 再复制 ID 过来。

4. 创建安全组

创建 security.tf:

resource "huaweicloud_networking_secgroup" "web" {
  name        = "tf-demo-sg-web"
  description = "安全组:放通SSH和HTTP"
}

resource "huaweicloud_networking_secgroup_rule" "ssh" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 22
  port_range_max    = 22
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = huaweicloud_networking_secgroup.web.id
}

resource "huaweicloud_networking_secgroup_rule" "http" {
  direction         = "ingress"
  ethertype         = "IPv4"
  protocol          = "tcp"
  port_range_min    = 80
  port_range_max    = 80
  remote_ip_prefix  = "0.0.0.0/0"
  security_group_id = huaweicloud_networking_secgroup.web.id
}

这里放通了 22(SSH)和 80(HTTP)端口。实际生产环境中,SSH 的 remote_ip_prefix 不建议设为 0.0.0.0/0,应该限制为你的运维 IP 段。本文为了演示方便暂时全放通,但这一点请务必记住。

五、执行部署

初始化

terraform init

这一步会下载华为云 Provider 插件。首次执行需要联网,之后插件缓存在本地,离线也能用。

预览变更

terraform plan

这是 Terraform 的安全阀。它会告诉你"接下来要创建什么、修改什么、删除什么",但不会真正执行。养成先 plan 再 apply 的习惯,能避免很多误操作。

你会看到类似这样的输出:

Plan: 5 to add, 0 to change, 0 to destroy.

表示将创建 5 个资源(1个VPC + 1个子网 + 1个安全组 + 2条安全组规则),不修改不删除任何现有资源。

正式执行

terraform apply

输入 yes 确认后,Terraform 开始创建资源。整个过程通常不到一分钟。完成后会输出各资源的 ID,你也可以在华为云控制台验证。

六、销毁环境(重要)

实验结束后,一条命令清理所有资源:

terraform destroy

同样会先展示要删除的资源列表,确认后执行。这就是 IaC 的魅力——创建和销毁是对称的,不会留下"孤儿资源"在云上悄悄计费。

七、小结与下一步

本文用 Terraform 在华为云上创建了一套基础网络环境:VPC、子网、安全组。核心思路就三条:

  1. 声明式描述:写"我要什么",不写"怎么创建"
  2. 资源引用:Terraform 自动处理依赖关系和创建顺序
  3. 变量化:把可变参数提取出来,一份模板多环境复用

下一步,你可以在这套网络上继续添加 ECS 实例、EIP 弹性公网 IP、ELB 负载均衡等资源,逐步搭建出完整的应用架构。当你能把整套环境用代码描述出来时,"一键创建、一键销毁"就不再是口号,而是日常工作流的一部分。

基础设施即代码,从今天开始用起来。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。