Terraform 是什么
Terraform 用声明式配置管理基础设施:把云资源写成 HCL,用 init/plan/apply 三段式执行。plan 先把将要发生的变更摊开给人看,apply 只执行被确认过的计划;state 记录现实与配置的对应关系。锁住 provider 版本(lock 文件入库)与执行环境的版本差异,是避免本地能跑、CI 计划意外的关键。与手工操作的差别不只是效率:配置可评审、计划可复现、状态可迁移,事故后能回答环境被谁改成了什么样。
基本信息
| 流程 | terraform init → plan → apply(CI 中 plan 展示、审批后 apply) |
|---|---|
| 锁定 | .terraform.lock.hcl 记录 provider 版本与哈希,应入库 |
| 版本 | required_version 约束 Terraform 本身版本 |
| 状态 | state 是现实的映射;协作场景用远端后端并开启状态锁 |
三段式命令速读
| 命令 | 作用 | 注意 |
|---|---|---|
| init | 下载 provider、初始化后端 | lock 文件据此校验哈希 |
| plan | 生成变更计划 | 存成 tfplan 防执行与评审不一致 |
| apply | 执行计划 | 仅执行 tfplan,不在本地随手跑 |
典型使用场景
- 云资源纳入评审:新开数据库、改安全组都走 PR 与 plan 评审
- 多环境复用:模块化配置,dev/staging/prod 用不同变量与后端
- 灾备重建:基础设施可整体重建,配合镜像与脚本完成恢复演练
- 合规审计:变更以代码留痕,谁改了什么一查即知
- 存量迁移:既有资源用 import 纳入管理,逐步收敛手工操作
- 成本治理:资源规格与标签策略写进代码,新资源默认带上成本归属标签
- 合规基线:禁止公网开放、强制加密等规则用策略工具在计划阶段拦截
常用命令
常用命令
# 标准三段式,plan 产物用于评审后原样执行
terraform init # 初始化 provider 与后端
terraform fmt -check # 格式检查
terraform validate # 语法与引用校验
terraform plan -out=tfplan # 生成计划文件
terraform apply tfplan # 原样执行获批计划plan 产物(tfplan)用于评审后原样执行:保证执行的正是被看过的计划。
执行环境要固定:CI 与本地用同一 Terraform 与 provider 版本,否则出现无法复现的计划差异。
敏感值别进 state:密码与密钥交给专门的后端或外部密钥管理,state 文件本身按敏感数据处理。