Terraform 实战:用 IaC 在华为云上一键部署 Web 应用基础设施
Terraform 实战:用 IaC 在华为云上一键部署 Web 应用基础设施
前言
在云原生时代,基础设施即代码(Infrastructure as Code,IaC)已经成为高效运维的标配。传统控制台手动创建资源的方式不仅效率低下,而且难以复现、无法版本管理。Terraform 作为最流行的 IaC 工具之一,通过声明式语法描述云资源拓扑,一条命令即可完成创建、修改和销毁。
本文将手把手演示如何用 Terraform 在华为云上部署一套完整的 Web 应用基础设施,包括 VPC 网络、子网、安全组、弹性云服务器(ECS)、弹性负载均衡(ELB)和弹性公网 IP(EIP)。读完本文,你将掌握华为云 Terraform 的核心用法。
环境准备
1 安装 Terraform
从华为云镜像站下载 Terraform 安装包,解压后放到系统 PATH 目录即可。安装完成后执行 version 命令验证。
华为云提供了 Terraform 的国内镜像,下载速度更快。
2 配置华为云认证
Terraform 通过 AK/SK(访问密钥)认证华为云 API。在华为云控制台「我的凭证」页面创建访问密钥后,通过环境变量配置:
- HW_ACCESS_KEY 设置为你的 AK
- HW_SECRET_KEY 设置为你的 SK
- HW_REGION_NAME 设置为区域,如华北-北京四
安全提醒:AK/SK 是敏感凭证,建议通过环境变量传入,不要硬编码到 tf 文件中,更不要提交到 Git 仓库。
项目结构
一个典型的 Terraform 项目包含以下文件:
- main 配置文件:主配置,包含 provider 声明和资源定义
- variables 变量文件:变量声明
- outputs 输出文件:输出值定义
- tfvars 赋值文件:变量赋值(不提交到 Git)
编写 Terraform 配置
变量声明
声明以下变量:region(华为云区域,默认华北-北京四)、ecs_flavor(ECS 规格,默认 2 核 2G)、ecs_image_id(镜像 ID)、admin_password(管理员密码,标记为 sensitive)。
核心资源配置
以下是 main 配置文件 的核心内容,分为三个层次:
网络层
首先创建 VPC,指定名称和 CIDR 网段。然后创建子网,关联到 VPC,指定子网 CIDR 和网关 IP。
接着创建安全组,并添加三条入站规则:分别放行 80 端口(HTTP)、443 端口(HTTPS)和 22 端口(SSH)。其中 SSH 规则的来源 IP 在生产环境应限制为管理 IP,而非开放给所有人。
计算层
创建弹性公网 IP,使用 BGP 类型,配置独立带宽。然后创建弹性云服务器 ECS,指定规格、镜像、可用区和管理密码,关联子网和安全组。最后将 EIP 绑定到 ECS 实例上。
负载均衡层
创建 ELB 负载均衡器,关联 VPC 和子网。然后创建 HTTP 监听器监听 80 端口,添加后端服务器组(轮询算法),将 ECS 加入后端成员,最后配置 HTTP 健康检查。
输出关键信息
定义三个输出值:ECS 公网 IP、ELB 虚拟 IP、VPC ID。部署完成后通过 terraform output 命令查看。
部署执行
1 初始化
执行 terraform init,Terraform 会自动下载华为云 Provider 插件。
2 预览变更
执行 terraform plan,这一步会显示将要创建的所有资源,不会实际执行。仔细检查输出,确认无误后再执行。
3 应用变更
执行 terraform apply,输入 yes 确认后,Terraform 开始创建资源。整个过程通常需要 2 到 3 分钟。
4 查看输出
执行 terraform output,查看 ECS 公网 IP、ELB 虚拟 IP 等关键信息。
5 销毁资源
执行 terraform destroy 清理所有资源。注意:此操作会删除所有资源且不可逆,生产环境请谨慎操作。
架构说明
整体架构分为三层:
- 最外层是 EIP(BGP 公网 IP),负责接入互联网流量
- 中间层是 VPC 及其子网,提供隔离的网络环境
- 内部层包含 ELB 负载均衡器和 ECS 云服务器,ELB 将流量分发到后端 ECS
ELB 监听 80 端口,通过轮询算法将请求转发到后端 ECS 的 80 端口,同时配置健康检查确保后端可用。
最佳实践
1 状态文件管理
生产环境不要把 state 文件放在本地。推荐使用 OBS 作为远程后端,配置 backend 为 s3 类型,指定 OBS 桶名、状态文件路径、区域和终端节点。
2 安全组最小权限原则
本文为了演示方便,对 SSH 开放了所有来源。生产环境应限制为管理 IP,即将 remote_ip_prefix 设置为你的办公公网 IP 加斜杠 32。
3 多环境管理
使用 terraform workspace 管理多环境:先 new 创建工作空间,再 select 切换,最后用 var-file 指定对应环境的变量文件执行 apply。
4 资源标签
给资源打标签,便于成本分摊和资源管理。建议标签包含 Project(项目名)、Environment(环境名)、ManagedBy(管理工具)。
常见问题
问:terraform init 下载 Provider 很慢?
答:配置华为云镜像源。设置 TF_PLUGIN_CACHE_DIR 环境变量指定插件缓存目录,并在 terraformrc 配置文件中配置 provider 镜像。
问:修改 ECS 规格会重建实例吗?
答:修改 flavor_id 会触发实例重启(不是重建)。但修改 image_id 会强制重建。使用 terraform plan 提前确认变更范围。
问:如何导入已有资源?
答:使用 terraform import 命令,指定资源类型、资源名称和实例 ID,即可将云上已有资源导入到 Terraform 状态中。
总结
本文完整演示了用 Terraform 在华为云上部署 Web 应用基础设施的全流程:
- VPC 网络层:VPC 加子网加安全组,构建隔离的网络环境
- 计算层:ECS 加 EIP,提供计算能力和公网访问
- 负载均衡层:ELB 加监听器加后端组加健康检查,实现流量分发
Terraform 的核心优势在于:声明式描述让你专注于"要什么"而非"怎么做";状态管理让基础设施可追踪、可复现;模块化让配置可复用、可组合。
希望本文能帮助你快速上手华为云 Terraform,开启 IaC 之旅。
- 点赞
- 收藏
- 关注作者
评论(0)