告别手动配置:用 Terraform 在华为云上一键创建 VPC 网络环境
一、为什么要用 Terraform?
如果你还在华为云控制台上手动点选创建 VPC、子网、安全组,每次环境重建都要重复一遍同样的操作,那你一定经历过这些痛苦:
- 步骤多、容易漏配,比如忘了开安全组端口,应用起不来还得回头排查
- 多环境(开发/测试/生产)配置不一致,"在我机器上能跑"的经典场景再次上演
- 团队协作时,谁改了什么无从追溯,出了问题只能翻操作日志
Terraform 解决的就是这个问题。你用一种声明式的语言描述"我要什么样的基础设施",Terraform 负责把它变成现实。一份配置文件就是一份可复用、可版本化、可审查的基础设施蓝图。
二、本文目标
用 Terraform 完成以下资源的创建:
- 一个 VPC(虚拟私有云)
- 一个子网(Subnet)
- 一个安全组(Security Group),放通 SSH 和 HTTP
- 一个对等连接用的路由表(可选,本文先搭基础骨架)
最终效果:一条 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、子网、安全组。核心思路就三条:
- 声明式描述:写"我要什么",不写"怎么创建"
- 资源引用:Terraform 自动处理依赖关系和创建顺序
- 变量化:把可变参数提取出来,一份模板多环境复用
下一步,你可以在这套网络上继续添加 ECS 实例、EIP 弹性公网 IP、ELB 负载均衡等资源,逐步搭建出完整的应用架构。当你能把整套环境用代码描述出来时,"一键创建、一键销毁"就不再是口号,而是日常工作流的一部分。
基础设施即代码,从今天开始用起来。
- 点赞
- 收藏
- 关注作者
评论(0)