用 Terraform 管理华为云基础设施:从零到第一台 ECS

举报
yd_276566677 发表于 2026/10/30 15:14:08 2026/10/30
【摘要】 本文介绍如何使用 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)

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

全部回复

上滑加载中

设置昵称

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

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

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