AltSchool Of Engineering Tinyuka’24 第10月 第2周
Source: Dev.to
If you missed our previous session you can catch up here.
对 Terraform 的全面深度解析
在当今云驱动的世界,工程师正逐步摆脱手动供应,转而在基础设施的每一层实现自动化。站在这场革命中心的是 Terraform,它是最强大的基础设施即代码(IaC)工具之一。Terraform 让工程师能够使用代码来设计、构建和管理基础设施,确保环境一致、可重复、可扩展且自动化。
涵盖主题
- Terraform 是什么
- CLI 如何工作
- 理解 Terraform 状态
- Terraform 的核心概念和语言
- 实际案例
- 深入探讨其架构和工作流
如果你想进入 DevOps、云工程或 SRE,Terraform 是必须掌握的技能。
1. Terraform 到底是什么?
Terraform 是由 HashiCorp 创建的开源 IaC 工具。它让你使用一种叫 HCL(HashiCorp Configuration Language)的简洁声明式语言来定义整个基础设施。
不再需要在 AWS、Azure 或 GCP 控制台上点按钮,你只需编写描述基础设施的代码,Terraform 会为你创建它。
示例
resource "aws_instance" "web" {
ami = "ami-12345"
instance_type = "t2.micro"
}
运行以下命令:
terraform apply
Terraform 读取代码 → 与 AWS 通信 → 创建服务器。
关键优势
- ✅ 基础设施一致性
- ✅ 更快的部署
- ✅ 基础设施版本化
- ✅ 自动化变更
- ✅ 多云支持
- ✅ 可预测的工作流
Terraform 以干净、易读的方式对复杂架构建模。
2. Terraform CLI(命令行界面)
Terraform CLI 是工程师与 Terraform 交互的方式。以下是最常用的命令:
| 命令 | 描述 |
|---|---|
terraform init | 初始化项目,下载提供者,设置插件。 |
terraform plan | 显示 Terraform 将创建、修改或销毁的内容(干运行)。 |
terraform apply | 确认后构建基础设施。 |
terraform destroy | 销毁所有资源——用于测试或清理。 |
terraform fmt | 自动格式化 Terraform 代码。 |
terraform validate | 检查配置是否有错误。 |
这些命令构成了日常使用 Terraform 的核心。
3. Terraform 状态(最重要的概念之一)
Terraform 使用状态文件(terraform.tfstate)来跟踪基础设施。该文件是 Terraform 已创建资源的唯一事实来源。
为什么状态很重要
Terraform 会比较:
- 期望状态 – 你的 HCL 代码
- 当前状态 – 状态文件
并决定需要进行哪些更改。
示例
- 代码写 “创建 1 台服务器” → 状态已经有该服务器 → 不做任何操作。
- 代码写 “创建 3 台服务器” → 状态只有 1 台 → Terraform 再添加 2 台。
状态存储类型
- 本地状态 – 默认,保存在本机。
- 远程状态 – 存储在 S3、GCS、Azure Blob、Terraform Cloud(团队推荐)。
实际案例
在 AWS 项目中将状态存放于 S3 可以实现:
- 多位工程师协作
- 状态文件自动备份
- 安全的变更追踪
- 防止冲突的基础设施更改
状态文件是 Terraform 自动化的支柱;没有它,Terraform 将无法判断该更新什么。
4. Terraform 语言与核心术语
Terraform 使用 HCL,这是一种简洁、易读的声明式语言。以下是最重要的构建块。
4.1 Provider(提供者)
Provider 让 Terraform 能够与云平台交互。
provider "aws" {
region = "us-east-1"
}
常见 Provider:aws、google、azure、digitalocean、docker。
4.2 Resource(资源)
资源是 Terraform 实际创建的对象(服务器、存储桶、网络、容器、防火墙)。
resource "aws_s3_bucket" "logs" {
bucket = "my-log-bucket"
}
4.3 Variable(变量)
变量使配置可复用。
variable "region" {
default = "us-east-1"
}
4.4 Output(输出)
输出在部署后显示值。
output "public_ip" {
value = aws_instance.web.public_ip
}
4.5 Module(模块)
模块是可复用的 Terraform 包,可封装 VPC、子网、路由和安全组等模式。
5. 深入 Terraform(Terraform 实际工作原理)
每次执行 apply 时,Terraform 都会遵循四步生命周期。
5.1 初始化
下载 Provider 并准备工作区。
5.2 依赖图
Terraform 自动构建资源依赖图。
示例:
如果你定义了 VPC、子网以及位于子网中的 EC2 实例,Terraform 会先创建 VPC,然后是子网,最后是 EC2 实例。
5.3 执行计划
比较期望基础设施(代码)与当前基础设施(状态),并展示计划的变更。
5.4 应用
根据需要创建、修改或销毁资源,并把所有变更记录到状态文件中。
实际案例
某公司需要部署:
- 3 台 AWS EC2 实例
- 1 个 RDS 数据库
- 1 个负载均衡器
- 1 个 S3 存储桶
传统手动设置可能需要数小时。使用 Terraform:
- 编写一次配置。
- 提交到 Git。
- 运行
terraform apply。
所有资源在几秒钟内完成。将 EC2 实例从 3 台扩容到 6 台,只需修改代码中的数字并重新 apply。
Uber、Spotify、Coinbase、Airbnb、Stripe 等大型组织都高度依赖 Terraform 来实现这种层级的自动化。


