CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Terraform 基础设施即代码/课时/Terraform 是什么
RawBlame
课时目录12 节

Terraform 基础设施即代码

  1. 01Terraform 是什么
  2. 02HCL 语法
  3. 03init 与 Provider
  4. 04plan 与 apply
  5. 05State 管理
  6. 06变量与输出
  7. 07Module 复用
  8. 08AWS 资源示例
  9. 09Terraform 与 K8s
  10. 10CI 中的 Terraform
  11. 11Terraform vs Helm
  12. 12综合练习

Terraform 是什么

IaC 动机;与 Helm/GitOps 分工。

30 分钟

Terraform 是什么

这一课你将能做到

  1. 用自己的话说清楚 Terraform 解决什么问题、和手工点控制台有什么区别
  2. 在本机装好 Terraform 1.7+,并跑通第一条命令 terraform version
  3. 看懂一份最简单的 Terraform 配置长什么样,知道「声明式」是什么意思

为什么要学

你的 Spring Boot 应用要上云,需要一台 EC2、一个 RDS、一个 S3 桶、一套安全组。第一次你可以在 AWS 控制台点鼠标点出来,但第二个环境(测试环境)怎么办?换区域怎么办?三个月后要扩容,谁还记得当时点了哪些选项?

Terraform 就是把「点鼠标建基础设施」这件事写成文本文件。文件可以进 Git,可以评审,可以复用,可以一键重建整套环境。行业里这叫 IaC(Infrastructure as Code,基础设施即代码),Terraform 是这个领域事实标准,运维、后端、DevOps 岗位几乎必考。

人话:手工建基础设施像在记事本里记密码,只有你自己懂、还容易忘;Terraform 像把菜谱写下来,任何人照着做,做出来的菜都一样。

先建立图像

Terraform 的核心循环只有四个动作:

写 .tf 文件  →  terraform init   (初始化,装插件)
             →  terraform plan   (预览:将创建/修改/删除什么)
             →  terraform apply  (执行:真正调用云 API)
             →  terraform destroy(销毁:整套环境删掉)

对比两种工作方式:

维度控制台手工操作Terraform
操作记录散落在浏览器历史和人脑里Git 提交历史,可追溯
新建一套同样环境再点半小时,还容易漏复制目录,apply
谁改了什么查不到git blame 一清二楚
灾难恢复凭记忆重建重新 apply
多人协作互相覆盖state 锁 + 代码评审

跟着做

步骤 1:安装 Terraform

Windows 推荐用 winget(PowerShell 中执行):

winget install Hashicorp.Terraform

macOS:

brew install terraform

安装后新开一个终端验证:

terraform version

看到类似 Terraform v1.7.x 即成功。本课程全部命令基于 1.7 及以上版本,1.5/1.6 的旧版本部分输出略有差异。

步骤 2:写第一份配置

新建目录 tf-demo,在里面创建 main.tf:

# 约束 Terraform 版本
terraform {
  required_version = ">= 1.7.0"
}

# 用 null_resource 做演示:不需要任何云账号就能跑
resource "null_resource" "hello" {
  triggers = {
    message = "我的第一份 Terraform 配置"
  }
}

null_resource 是一个「什么真实资源都不创建」的演示资源,适合验证工具链。注意它需要 null 插件,下一步 init 会自动下载。

步骤 3:初始化

cd tf-demo
terraform init

输出最后一行是 Terraform has been successfully initialized!。目录下会多出 .terraform 文件夹(存插件)和 .terraform.lock.hjson(依赖锁文件,要提交到 Git)。

步骤 4:预览与执行

terraform plan

plan 会显示「将要创建 1 个资源」。确认无误后:

terraform apply

Terraform 会再次显示计划并要求输入 yes,输入后执行。执行完目录里会生成 terraform.tfstate,这就是状态文件,下一课系列会专门讲。

步骤 5:销毁

terraform destroy

同样输入 yes,资源被删除。这就是「整套环境一键拆除」——用完即毁,不花一分冤枉钱,这是云上省钱的基本功。

讲清楚要点

  1. 声明式,不是命令式:你写的是「我要一个这样的资源」(What),不写「先点哪个按钮再点哪个」(How)。Terraform 自己计算该调用哪些 API、按什么顺序。
  2. 幂等:同一份配置 apply 十次和一次效果一样。资源已存在且符合描述,就什么都不做。
  3. Provider 插件模型:Terraform 核心不懂 AWS,它通过 provider(约两千个)对接 AWS、Azure、GCP、Kubernetes 等各种平台。
  4. 状态(state)是真相的账本:Terraform 用 state 文件记录「配置中的资源」和「真实世界资源」的对应关系,没有它 Terraform 不知道该管谁。
  5. 适用范围:不止云资源,Kubernetes 对象、DNS 记录、GitHub 仓库、监控告警,只要有 provider 就能管。

你可能会懵的地方

  • Terraform 和 Ansible 有什么区别? Terraform 管「资源的生命周期」(机器存在不存在、网络怎么连),擅长 provisioning;Ansible 更擅长把已经存在的机器配置好(装软件、改配置文件),两者经常配合使用。

  • 学 Terraform 必须先有 AWS 账号吗? 不需要。前期可以用 null_resource、local_file 这类本地 provider 练语法;后面 AWS 课时建议注册账号并用免费套餐(Free Tier),注意用完及时 destroy。

  • OpenTofu 是什么?要学哪个? OpenTofu 是 Terraform 1.5 的开源分叉,语法几乎完全兼容。本课程以 Terraform 1.7+ 为准,学到的 HCL 和工作流在两者间通用。

  • Terraform 免费吗? Terraform CLI 个人和企业都可免费使用;收费的是 Terraform Cloud/Enterprise 这类托管协作平台(远程 state、策略管控),小团队用 S3 自建后端即可。

  • 配置文件为什么是 .tf 而不是 yaml? Terraform 用自己设计的 HCL(HashiCorp Configuration Language),下一课专门讲。它比 YAML 更适合表达资源块和表达式引用。

错法对照

错法问题正解
在控制台手改了 Terraform 管的资源下次 apply 被改回去或状态漂移所有变更只改 .tf 文件
不看 plan 直接 apply创建了意外资源甚至产生费用每次先 plan,逐行看 +/−/~
把 .terraform 目录提交到 Git体积大、跨平台不兼容.gitignore 忽略它,只提交 lock 文件
一台机器多人共用本地 state互相覆盖、状态损坏用远程 backend(第 5 课讲)
生产环境用 apply -auto-approve跳过人工确认生产必须人工看计划后确认

卡点急救

  1. terraform 命令找不到:Windows 新装后没重开终端,关掉 PowerShell 重开;仍不行检查 PATH 里有没有 Terraform 安装目录。
  2. init 下载插件卡住:网络访问 registry.terraform.io 慢,可设置国内镜像或配置网络代理:$env:HTTPS_PROXY="http://127.0.0.1:端口"。
  3. apply 后想反悔:别直接删 state 文件。先 terraform plan -destroy 看销毁范围,或用 terraform state rm 等命令处理,第 5 课细讲。

面试常问

  • 什么是 IaC?Terraform 相比直接写脚本(Shell/AWS CLI)好在哪? IaC 即用代码管理基础设施。脚本是命令式的,需要自己处理「资源已存在怎么办、删除顺序、依赖关系」;Terraform 声明目标状态,自动算差异(diff)、维护依赖图、提供统一的 plan 审批环节和状态管理,可重复、可审计。

  • Terraform 的核心工作流是什么? init 初始化并下载 provider;plan 生成执行计划供审查;apply 调用平台 API 落地变更;destroy 释放资源。配套还有 fmt、validate 做代码质量检查。

  • 为什么说 Terraform 是幂等的? 它每次根据配置和 state 计算目标状态与当前状态的差异,无差异则不动作,所以重复执行结果一致。

自测三问

  1. 不用 Terraform,手工搭建一套环境会在哪些场景出问题?至少说出 3 个。
  2. init、plan、apply、destroy 各自的作用是什么?能跳过 plan 直接 apply 吗?
  3. state 文件为什么重要?如果两台机器各有一份本地 state 会怎样?

小结一句话

Terraform 用声明式配置把基础设施变成可版本化、可复用、可一键重建的代码,核心循环就是 init → plan → apply → destroy。

延伸

  • Terraform 官方文档首页
  • Install Terraform 官方安装指南
  • 下一课:HCL 语法——读懂并写好每一个资源块。
加载本节练习…
下一课 →HCL 语法