告别控制台手动点点点,用 Terraform 一键编排华为云基础设施
【摘要】 本文以部署一套高可用 Web 架构为例,带你从零上手 Terraform + 华为云,体验"声明即基础设施"——一条命令创建,一条命令销毁,版本可控,可复用,可审计。
还在控制台里一个一个手动建资源?改个配置要重复操作十几步?环境一多就分不清谁是谁?请花几分钟看完,再去试试 Terraform,你会发现管理基础设施可以像写代码一样优雅。
以下整理自实际项目实践,按部署流程分步介绍。
01 为什么需要 IaC
先说个真实场景:你刚接手一个项目,要在华为云上部署一套 Web 服务。打开控制台,开始操作——创建 VPC、创建子网、创建安全组、添加安全组规则、创建 EIP、创建负载均衡器、创建监听器、创建后端服务器组、创建 ECS × 2、绑定网卡、挂载磁盘、注入用户数据……二十多步操作下来,手心冒汗。更可怕的是,下周要再部署一套测试环境,全部重来一遍。
基础设施即代码(IaC)解决的就是这个问题。
"二十步手动操作?一条命令搞定"
"测试环境要重来?改个变量就行"
"配置变更没记录?走 Pull Request 留痕"
而 Terraform 是目前最主流的 IaC 工具,华为云官方提供了完整的 Provider 支持。
02 前置准备
安装 Terraform
从 HashiCorp 官方或华为云镜像下载,解压后放入 PATH 即可。推荐使用 1.7 以上版本。
"国内网络慢?华为云镜像直接下"
获取华为云认证信息
在控制台"我的凭证"页面获取 AK(访问密钥 ID)、SK(访问密钥)、区域 ID(如 cn-north-4)和项目 ID。
"AK/SK 是云账户凭证,切勿提交到 Git 仓库"
配置环境变量
将 AK、SK、区域、项目 ID 通过环境变量注入,不写进代码文件。这是安全底线。
"环境变量注入,代码里零凭证"
03 网络层:VPC + 子网 + 安全组
用 Terraform 的 resource 块声明三个资源:VPC(192.168.0.0/16)、子网(192.168.1.0/24)、安全组(允许 80 和 22 端口入站)。
子网引用 VPC 的 ID,安全组规则引用安全组的 ID——Terraform 自动处理依赖顺序,你不需要手动编排先建谁后建谁。
"引用关系自动推导,创建顺序不用操心"
"安全组规则代码化,变更走 review 不再裸改"
> ⚠️ SSH 开放 0.0.0.0/0 仅适用于测试环境,生产环境请限制为运维 IP 段。
04 计算层:ECS × N
用 count 元参数声明多台 ECS,指定规格 s6.large.2,绑定安全组,注入 user_data 脚本开机自动安装 Nginx 并写入不同的 index.html。
count 设为 2 就创建两台,改成 3 就扩容——改一个数字的事。
"count 改一个数字,扩缩容瞬间完成"
"user_data 开机自动装 Nginx,不用手动登机器"
"打上 Environment/Component/ManagedBy 标签,资源归属一目了然"
05 负载均衡层:ELB + EIP
创建弹性公网 IP 挂载到 ELB,ELB 监听 80 端口,后端服务器组用轮询算法,把两台 ECS 作为 member 加入。
配置逻辑是:负载均衡器 → 监听器 → 后端服务器组 → 添加成员。每一步引用上一步的 ID,链式串联。
"EIP 暴露公网入口,ELB 分发流量到多台后端"
"多刷几次 curl,交替返回 Server 1 和 Server 2 就对了"
06 执行部署:三步走
第一步 terraform init,下载 Provider 插件,初始化后端。
第二步 terraform plan,预览将要创建的资源——不会真正执行,只给你看。输出会列出"12 to add, 0 to change, 0 to destroy"。
第三步 terraform apply,确认无误后正式部署。
"plan 先看再 apply,看清楚再动手"
"12 个资源一条命令,30 秒全部拉起"
部署完成后,用输出的公网 IP 验证:curl 多刷几次,交替返回不同内容,说明负载均衡生效了。
07 踩过的坑,希望你避开
坑一:AK/SK 硬编码到 .tf 文件
图方便把凭证写进代码,结果不小心 git push 了。正确做法是通过环境变量注入,.tf 文件里不出现任何凭证。
"图方便硬编码?一次 git push 就泄露"
坑二:改了 image_id 触发重建
image_id 是 force-new 参数,修改它意味着 ECS 先删除再创建——数据全没了。plan 输出里会标注 forces replacement,看到这行字一定要警惕。
"plan 里看到 forces replacement,停下来想想"
坑三:手动改了 Terraform 管理的资源
在控制台手动加了一条安全组规则,再跑 apply 时报冲突。既然用了 IaC,所有变更都走代码,不要手动改。
"用了 IaC 就别手改,所有变更走代码"
坑四:忘记销毁持续计费
测试完忘了 terraform destroy,资源一直跑着,月底账单惊到了。用完即销毁,养成习惯。
"测试环境用完即 destroy,别让账单给你惊喜"
08 进阶方向
本文是最简版,真实生产环境还需要考虑以下方向:
多可用区:ECS 分布在不同 AZ,单 AZ 故障不影响服务。
"单 AZ 挂了不影响?多 AZ 才算真高可用"
自动伸缩:接入 AS 弹性伸缩,按 CPU 水平弹性。
"流量来了自动扩,流量走了自动缩"
数据库层:加 RDS for MySQL,放内网子网,安全组仅允许 ECS 访问。
"数据库不放公网,安全组只开给 ECS"
HTTPS:ELB 监听器加 443,配合华为云 SCM 证书。
"HTTP 升 HTTPS,证书用 SCM 托管"
模块化:把网络层、计算层封装成 Module,多环境复用。
"一套 Module 多环境用,测试生产只改变量"
远程状态:用 OBS 做 Terraform 后端,团队协作不冲突。
"状态存 OBS,团队协作不踩脚"
09 写在最后
从手动点击到代码编排,最大的变化不是省了几次点击——而是基础设施变成了可版本化、可审查、可复用的资产。
新人入职?给他仓库地址,terraform apply 就能拉起一套完整环境。配置变更?走 Pull Request,review 通过再 apply,变更有记录。灾难恢复?代码还在,从头拉起一套环境只需几分钟。
"这不是效率的提升,是工程方式的转变"
如果你也在华为云上实践 IaC,欢迎在评论区交流你的经验和问题。更多 Terraform Provider 文档,请参考华为云官方文档。
本文示例基于 Terraform 1.7 + huaweicloud provider 1.60,部分 API 可能随版本更新有调整,请以官方文档为准。
更多精彩,欢迎登录华为云控制台体验!
- 点赞
- 收藏
- 关注作者
评论(0)