Terraform 入门到精通

阅读建议:

  1. 先看“Terraform 到底是什么”
  2. 再看运行模型
  3. 再看工作流和 state
  4. 最后看生产变更治理

配套笔记:[[Terraform-入门到精通.md]]

  1. Terraform 到底解决什么问题

不是“写脚本创建资源”,而是:

  • 用代码表达基础设施期望状态
  • 让基础设施可审查、可复现、可协作
  • 把环境从手工点击变成声明式系统
  1. 核心运行模型

四个核心对象:

  • Configuration
  • State
  • Provider
  • Plan

这是理解 Terraform 的第一性原理。

Configuration

你写的 .tf 文件。 表达的是“我希望世界最终是什么样”,不是脚本步骤。

State

Terraform 对现实世界的工作记忆。 记录:

  • 哪些资源已受管
  • 云上真实 ID
  • 当前认知状态

Provider

Terraform 和外部系统沟通的桥。 例如:

  • hashicorp/aws
  • kubernetes
  • cloudflare

Plan

回答: “如果现在 apply,会发生什么?”

Plan 是审查点,不是附属物。

  1. 基础工作流

init → fmt → validate → plan → apply

这是最基础,但不能只停留在会背命令。

init

初始化 backend、provider、module 依赖。

fmt

格式化 HCL。 解决风格一致性,不解决语义正确性。

validate

静态检查配置是否合法。 不是生产安全检查。

plan

比较 configuration / state / provider 看到的现实世界。

apply

真正执行副作用。 不能把它当“试试看”。

  1. 关键构件

最常见的构件:

  • resource
  • data
  • variable
  • output
  • locals

resource

Terraform 管理的对象。

data

只读现有信息,不接管生命周期。

variable

把可变参数暴露出来。

output

把 root 或 module 的结果暴露出去。

locals

表达中间计算结果。 目标是清晰,不是抽象炫技。

  1. 依赖图

Terraform 不按文件顺序执行,而按依赖图执行。

重点理解:

  • 引用关系
  • 自动推导先后顺序
  • 可并行创建的资源
  1. state / backend / lock

这是 Terraform 从“单机工具”走向“团队系统”的关键。

本地 state

适合 demo,不适合生产团队协作。

远程 state

例如 S3 + DynamoDB。 让团队共享同一份基础设施认知。

lock

防止并发写 state。 没有 lock,多人 apply 容易出事故。

  1. drift / import / refresh

现实世界不会永远和配置一致。 这层是 Terraform 进入真实生产环境后一定会遇到的。

drift

配置和云上现实不一致。

import

把已有资源纳入 Terraform 管理。

refresh

更新 Terraform 对现实世界的认知。

  1. replace 风险

很多生产事故不是 create 导致的,而是 replace。

重点关注:

  • destroy / replace
  • 标识型资源
  • 带状态资源

lifecycle

常见控制:

  • prevent_destroy
  • ignore_changes

它们有用,但不能滥用。

  1. 模块化

模块的目标是复用与清晰边界,不是为了抽象而抽象。

好模块应该:

  • 输入清楚
  • 输出清楚
  • 行为清楚
  1. 真正的分水岭:生产变更治理

从“会写 Terraform”到“会在生产里安全地用 Terraform”,差距主要在这里。

生产环境关注点

  • root/state 范围
  • plan 实际动作
  • add / change / destroy / replace
  • saved plan
  • 回滚路径

共享 root/state 的特殊风险

普通 apply 可能顺带看到无关 drift。

这时重点不是“我想改什么”,而是“Terraform 这次打算动什么”。

  1. targeted plan / apply 的位置

-target 不是日常默认方式,而是例外场景下的边界控制手段。

适用场景

  • root 很大
  • 只改一小块
  • 明确知道资源地址
  • 需要先压 blast radius

不该误解成

  • Terraform 最佳默认实践
  • 可以替代正常建模
  • 永远不用看全局 plan
  1. saved plan 的价值

plan 审过之后,用 -out 冻结执行边界。

更稳的流程: plan -out -> 审核 -> apply tfplan

  1. 学习进阶路径

阶段 1:会跑最小 root 阶段 2:会读 plan 阶段 3:理解 state/backend 阶段 4:理解 drift/import 阶段 5:会做模块化 阶段 6:会做生产变更治理

  1. 和真实案例连接

最好的练法不是只学语法,而是把原理和一次真实生产变更串起来看。

  1. 推荐复习顺序

A. 运行模型 B. state / backend / lock C. plan 和 replace D. 生产变更治理 E. 真实案例 F. 清单化复习

  1. 入门到精通的真正标准

不是“会不会写 HCL”,而是:

  • 能不能解释 plan
  • 能不能控制 blast radius
  • 能不能做可审查、可回滚、可验证的生产变更
拆开理解进入工作流构件层运行图真实世界偏差风险控制组织复用进入生产实践例外手段什么时候用不要误用更稳的做法学习地图落到案例真实实战检查清单怎么复习什么叫精通