告别控制台手动点点点,用 Terraform 一键编排华为云基础设施

举报
yd_253349614 发表于 2026/11/04 09:05:48 2026/11/04
【摘要】 【摘要】 本文以部署一套高可用 Web 架构为例,带你从零上手 Terraform + 华为云,体验"声明即基础设施"——一条命令创建,一条命令销毁,版本可控,可复用,可审计。还在控制台里一个一个手动建资源?改个配置要重复操作十几步?环境一多就分不清谁是谁?请花几分钟看完,再去试试 Terraform,你会发现管理基础设施可以像写代码一样优雅。以下整理自实际项目实践,按部署流程分步介绍。01...

【摘要】 本文以部署一套高可用 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 可能随版本更新有调整,请以官方文档为准。

更多精彩,欢迎登录华为云控制台体验!

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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