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)

Terraform 核心工作流:Write → Plan → Apply 1. Write 编写 .tf 配置文件 2. Init 初始化 Provider 插件 3. Plan 预览变更计划 4. Apply 执行变更并更新状态 状态文件(terraform.tfstate)在 Apply 后自动更新,作为下一次 Plan 的输入 Destroy 是 Apply 的特殊形式:将资源计数降为 0

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)

Terraform 状态文件与 Provider 协作关系 Terraform Core terraform.tfstate Provider 插件 云平台资源 读取/写入状态 (JSON 格式) API 调用 (CRUD 操作)

1.7 本章小结

  • Terraform 从 2014 年发展至今,已成为多云 IaC 的事实标准,v1.0+ 版本提供生产级稳定性。
  • 三大核心概念:IaC(声明式配置)、状态文件(资源映射与增量更新)、Provider(平台适配插件)。
  • CLI 工作流:init → plan → apply 是日常操作铁三角,destroy 用于资源回收。
  • 状态文件必须安全存储,远程后端与锁定机制是团队协作的必备条件。