用 Terraform 管理华为云基础设施:从零到第一台 ECS
【摘要】 本文介绍如何使用 Terraform 在华为云上以基础设施即代码(IaC)的方式创建和管理资源。从安装配置 Terraform provider 开始,逐步演示 VPC、子网、安全组、ECS 实例的声明式创建流程,并解释 state 文件、变量复用、plan/apply 确认机制等核心概念。适合有云基础但初次接触 IaC 的开发者,读完后可独立用 Terraform 管理自己的华为云环境。
为什么用 Terraform 管理华为云
如果你习惯了在控制台手动点选创建资源,可能会遇到这些问题:
- 环境无法复现——“上次怎么配的来着?”
- 多环境(dev/staging/prod)配置不一致
- 变更没有历史记录,出问题难以回溯
Terraform 用声明式配置文件描述资源的目标状态,通过 plan 预览变更、apply 执行变更,所有基础设施定义变成可版本管理的代码。华为云官方维护了 [huaweicloud provider],覆盖 VPC、ECS、RDS、OBS、CCE 等主流产品。
环境准备
1. 安装 Terraform
# 下载并安装(以 Linux 为例)
wget https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_arm64.zip
unzip terraform_1.7.5_linux_arm64.zip
sudo mv terraform /usr/local/bin/
terraform version
2. 配置华为云认证
推荐通过环境变量传入 AK/SK,避免硬编码到文件中:
export HW_ACCESS_KEY="你的AK"
export HW_SECRET_KEY="你的SK"
export HW_REGION_NAME="cn-north-4"
写第一个配置
创建一个工作目录,新建 main.tf:
terraform {
required_providers {
huaweicloud = {
source = "huaweicloud/huaweicloud"
version = "~> 1.60"
}
}
}
provider "huaweicloud" {
region = var.region
}
# --- 变量定义 ---
variable "region" {
default = "cn-north-4"
}
variable "ecs_password" {
default = "YourStrongPass123!"
sensitive = true
}
# --- VPC ---
resource "huaweicloud_vpc" "main" {
name = "tf-demo-vpc"
cidr = "192.168.0.0/16"
}
# --- 子网 ---
resource "huaweicloud_vpc_subnet" "main" {
name = "tf-demo-subnet"
cidr = "192.168.0.0/24"
gateway_ip = "192.168.0.1"
vpc_id = huaweicloud_vpc.main.id
}
# --- 安全组 ---
resource "huaweicloud_networking_secgroup" "main" {
name = "tf-demo-sg"
description = "Allow SSH"
}
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.main.id
}
# --- ECS 实例 ---
resource "huaweicloud_compute_instance" "web" {
name = "tf-demo-ecs"
image_id = "your-image-id" # 替换为实际镜像 ID
flavor_id = "s6.large.2"
availability_zone = "cn-north-4a"
key_pair = "your-keypair" # 替换为实际密钥对名
network {
uuid = huaweicloud_vpc_subnet.main.id
}
security_group_ids = [
huaweicloud_networking_secgroup.main.id
]
}
三个核心命令
# 1. 初始化——下载 provider 插件
terraform init
# 2. 预览变更——看清楚要创建/修改/删除什么,不实际执行
terraform plan
# 3. 执行变更——输入 yes 确认后真正创建资源
terraform apply
关键习惯:每次 apply 之前先 plan,确认变更符合预期再执行。这是 IaC 的安全网。
几个容易踩的坑
| 坑 | 说明 |
|---|---|
| AK/SK 硬编码 | 不要把密钥写进 .tf 文件,用环境变量或 provider 的 profile 参数 |
| 改了配置忘了 plan | 直接 apply 可能触发 force-new 重建资源,先 plan 看有没有 ~> destroyed |
| 手动改了云上资源 | 会导致 drift,再次 apply 会用代码覆盖手动变更;想保留手动变更要先 import |
| state 文件丢失 | state 记录了资源与代码的映射关系,丢失后 Terraform 不知道已创建的资源,建议用 OBS 作为远程 backend |
小结
Terraform 的价值不在于"少点几次鼠标",而在于把基础设施变成可审查、可复现、可协作的代码。本文只演示了一台 ECS 的创建,实际项目中你还可以用 module 复用组件、用 variable 和 tfvars 管理多环境、用 output 导出资源信息给下游使用。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)