AltSchool Of Engineering Tinyuka’24 第10月 第2周

发布: (2025年12月8日 GMT+8 04:17)
7 min read
原文: Dev.to

Source: Dev.to

If you missed our previous session you can catch up here.

Image of an image in space

对 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 会比较:

  1. 期望状态 – 你的 HCL 代码
  2. 当前状态 – 状态文件

并决定需要进行哪些更改。

示例

  • 代码写 “创建 1 台服务器” → 状态已经有该服务器 → 不做任何操作。
  • 代码写 “创建 3 台服务器” → 状态只有 1 台 → Terraform 再添加 2 台。

状态存储类型

  • 本地状态 – 默认,保存在本机。
  • 远程状态 – 存储在 S3、GCS、Azure Blob、Terraform Cloud(团队推荐)。

实际案例

在 AWS 项目中将状态存放于 S3 可以实现:

  • 多位工程师协作
  • 状态文件自动备份
  • 安全的变更追踪
  • 防止冲突的基础设施更改

状态文件是 Terraform 自动化的支柱;没有它,Terraform 将无法判断该更新什么。

Image of the galaxy

4. Terraform 语言与核心术语

Terraform 使用 HCL,这是一种简洁、易读的声明式语言。以下是最重要的构建块。

4.1 Provider(提供者)

Provider 让 Terraform 能够与云平台交互。

provider "aws" {
  region = "us-east-1"
}

常见 Provider:awsgoogleazuredigitaloceandocker

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:

  1. 编写一次配置。
  2. 提交到 Git。
  3. 运行 terraform apply

所有资源在几秒钟内完成。将 EC2 实例从 3 台扩容到 6 台,只需修改代码中的数字并重新 apply

Uber、Spotify、Coinbase、Airbnb、Stripe 等大型组织都高度依赖 Terraform 来实现这种层级的自动化。

Image of an advanced satellite technology

Back to Blog

相关文章

阅读更多 »

Terraform 高级

为什么使用 Terraform?Terraform 用于自动化云基础设施,这样人类就不需要手动创建: - VPCs - 子网 - 安全组 - ECS 集群 - …

Terraform 数据源 (AWS)

Terraform 数据源是什么?Terraform 中的数据源是对现有资源的只读查找。Terraform 并不是创建新资源,而是查询…