1. Terraform 入门:发展史、核心概念与 CLI 基础
1.1 Terraform 发展史:从配置工具到多云编排标准
Terraform 由 HashiCorp 公司于 2014 年首次发布,旨在解决传统基础设施管理工具(如 CloudFormation、Heat)只能绑定单一云平台的问题。其核心设计理念是“Write, Plan, Create”——通过声明式配置实现跨云资源编排。
| 版本阶段 | 发布时间 | 关键特性 |
|---|---|---|
| v0.1 – v0.6 | 2014 – 2016 | 基础 Provider 架构、状态文件、terraform plan/apply |
| v0.7 – v0.11 | 2016 – 2018 | 状态锁定、远程状态后端、模块注册中心 |
| v0.12 – v0.14 | 2019 – 2020 | HCL2 语法增强、for_each、count 改进 |
| v1.0 – v1.5 | 2021 – 2023 | 正式 GA、Provider 协议稳定、terraform test、moved 块 |
| v1.6+ | 2024 – 至今 | Provider-defined functions、removed 块、性能优化 |
关键里程碑:v1.0 版本(2021年6月)标志着 Terraform 进入生产就绪阶段,Provider 协议不再向后兼容破坏,企业级用户可放心升级。
1.2 核心概念:IaC、状态文件与 Provider
1.2.1 基础设施即代码(IaC)
IaC 是将基础设施配置(服务器、网络、数据库等)以代码形式管理,实现版本控制、自动化部署与可重复性。Terraform 采用声明式模型:用户描述“最终状态”,工具自动计算并执行变更。
1.2.2 状态文件(State File)
Terraform 使用 terraform.tfstate 记录已管理资源的真实 ID、属性与依赖关系。状态文件是 Terraform 的“单源真相”,用于增量更新而非全量重建。
| 状态文件特性 | 说明 |
|---|---|
| 本地状态 | 默认存储在项目目录,适合个人开发 |
| 远程状态 | 存储在 S3、Consul、Terraform Cloud 等后端,支持团队协作 |
| 状态锁定 | 防止并发执行导致状态损坏(DynamoDB、Consul 等支持) |
| 敏感数据 | 状态文件可能包含密码、密钥,必须加密存储 |
⚠ 常见陷阱:不要手动编辑
terraform.tfstate!直接修改状态文件会导致资源与实际基础设施不一致,引发不可预知的错误。应始终通过 terraform state 子命令操作。
1.2.3 Provider(提供者)
Provider 是 Terraform 与目标平台(AWS、Azure、GCP、Kubernetes 等)交互的插件。每个 Provider 定义一组资源类型(如 aws_instance)和数据源(如 aws_ami)。
# 声明 AWS Provider 并指定版本
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "cn-north-1"
}
1.3 Terraform 核心工作流(内联 SVG)
1.4 安装 Terraform 与 CLI 基础
1.4.1 安装方式
- Linux/macOS:使用
brew install terraform(macOS)或从 releases.hashicorp.com 下载二进制 - Windows:使用 Chocolatey:
choco install terraform,或手动下载并配置 PATH - 容器化:
docker run --rm -v $(pwd):/workspace -w /workspace hashicorp/terraform:latest
1.4.2 验证安装
# 检查版本
terraform version
# 输出示例(v1.7+)
# Terraform v1.7.5
# on linux_amd64
# + provider registry.terraform.io/hashicorp/aws v5.40.0
1.4.3 常用 CLI 命令速查
| 命令 | 作用 | 使用频率 |
|---|---|---|
terraform init |
初始化工作目录,下载 Provider 插件 | 每次新项目/模块 |
terraform plan |
生成执行计划,显示哪些资源将创建/修改/删除 | 每次变更前 |
terraform apply |
执行计划并更新状态文件 | 部署时 |
terraform destroy |
销毁所有被管理的资源 | 清理环境时 |
terraform fmt |
自动格式化 .tf 文件为规范风格 | 代码提交前 |
terraform validate |
检查配置文件语法和内部一致性 | CI 流程中 |
terraform state list |
列出状态文件中所有资源 | 调试时 |
💡 效率技巧:在
terraform plan 或 apply 时使用 -out=tfplan 参数将计划保存到文件,后续可直接 terraform apply tfplan 执行,确保计划与执行一致。
1.5 Provider 与资源声明示例
以下是一个完整的 Terraform 配置文件,演示如何声明 Provider 并创建 AWS EC2 实例:
# main.tf
terraform {
required_version = ">= 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "cn-north-1"
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "TerraformDemo"
}
}
1.6 状态文件与 Provider 关系图(内联 SVG)
1.7 本章小结
- Terraform 从 2014 年发展至今,已成为多云 IaC 的事实标准,v1.0+ 版本提供生产级稳定性。
- 三大核心概念:IaC(声明式配置)、状态文件(资源映射与增量更新)、Provider(平台适配插件)。
- CLI 工作流:
init → plan → apply是日常操作铁三角,destroy用于资源回收。 - 状态文件必须安全存储,远程后端与锁定机制是团队协作的必备条件。