Terraform 入门到精通
阅读建议:
- 先看“Terraform 到底是什么”
- 再看运行模型
- 再看工作流和 state
- 最后看生产变更治理
配套笔记:[[Terraform-入门到精通.md]]
- Terraform 到底解决什么问题
不是“写脚本创建资源”,而是:
- 用代码表达基础设施期望状态
- 让基础设施可审查、可复现、可协作
- 把环境从手工点击变成声明式系统
- 核心运行模型
四个核心对象:
- Configuration
- State
- Provider
- Plan
这是理解 Terraform 的第一性原理。
Configuration
你写的 .tf 文件。
表达的是“我希望世界最终是什么样”,不是脚本步骤。
State
Terraform 对现实世界的工作记忆。 记录:
- 哪些资源已受管
- 云上真实 ID
- 当前认知状态
Provider
Terraform 和外部系统沟通的桥。 例如:
- hashicorp/aws
- kubernetes
- cloudflare
Plan
回答: “如果现在 apply,会发生什么?”
Plan 是审查点,不是附属物。
- 基础工作流
init → fmt → validate → plan → apply
这是最基础,但不能只停留在会背命令。
init
初始化 backend、provider、module 依赖。
fmt
格式化 HCL。 解决风格一致性,不解决语义正确性。
validate
静态检查配置是否合法。 不是生产安全检查。
plan
比较 configuration / state / provider 看到的现实世界。
apply
真正执行副作用。 不能把它当“试试看”。
- 关键构件
最常见的构件:
- resource
- data
- variable
- output
- locals
resource
Terraform 管理的对象。
data
只读现有信息,不接管生命周期。
variable
把可变参数暴露出来。
output
把 root 或 module 的结果暴露出去。
locals
表达中间计算结果。 目标是清晰,不是抽象炫技。
- 依赖图
Terraform 不按文件顺序执行,而按依赖图执行。
重点理解:
- 引用关系
- 自动推导先后顺序
- 可并行创建的资源
- state / backend / lock
这是 Terraform 从“单机工具”走向“团队系统”的关键。
本地 state
适合 demo,不适合生产团队协作。
远程 state
例如 S3 + DynamoDB。 让团队共享同一份基础设施认知。
lock
防止并发写 state。 没有 lock,多人 apply 容易出事故。
- drift / import / refresh
现实世界不会永远和配置一致。 这层是 Terraform 进入真实生产环境后一定会遇到的。
drift
配置和云上现实不一致。
import
把已有资源纳入 Terraform 管理。
refresh
更新 Terraform 对现实世界的认知。
- replace 风险
很多生产事故不是 create 导致的,而是 replace。
重点关注:
- destroy / replace
- 标识型资源
- 带状态资源
lifecycle
常见控制:
- prevent_destroy
- ignore_changes
它们有用,但不能滥用。
- 模块化
模块的目标是复用与清晰边界,不是为了抽象而抽象。
好模块应该:
- 输入清楚
- 输出清楚
- 行为清楚
- 真正的分水岭:生产变更治理
从“会写 Terraform”到“会在生产里安全地用 Terraform”,差距主要在这里。
生产环境关注点
- root/state 范围
- plan 实际动作
- add / change / destroy / replace
- saved plan
- 回滚路径
共享 root/state 的特殊风险
普通 apply 可能顺带看到无关 drift。
这时重点不是“我想改什么”,而是“Terraform 这次打算动什么”。
- targeted plan / apply 的位置
-target 不是日常默认方式,而是例外场景下的边界控制手段。
适用场景
- root 很大
- 只改一小块
- 明确知道资源地址
- 需要先压 blast radius
不该误解成
- Terraform 最佳默认实践
- 可以替代正常建模
- 永远不用看全局 plan
- saved plan 的价值
plan 审过之后,用 -out 冻结执行边界。
更稳的流程: plan -out -> 审核 -> apply tfplan
- 学习进阶路径
阶段 1:会跑最小 root 阶段 2:会读 plan 阶段 3:理解 state/backend 阶段 4:理解 drift/import 阶段 5:会做模块化 阶段 6:会做生产变更治理
- 和真实案例连接
最好的练法不是只学语法,而是把原理和一次真实生产变更串起来看。
- 推荐复习顺序
A. 运行模型 B. state / backend / lock C. plan 和 replace D. 生产变更治理 E. 真实案例 F. 清单化复习
- 入门到精通的真正标准
不是“会不会写 HCL”,而是:
- 能不能解释 plan
- 能不能控制 blast radius
- 能不能做可审查、可回滚、可验证的生产变更