2. Terraform 核心概念回顾:Provider、Resource、Data Source、State、Plan/Apply 工作流

在深入容灾自愈 Runbook 编排之前,必须重新夯实 Terraform 的五大核心支柱。这些概念不仅是日常 IaC 操作的基础,更是实现自动化故障转移与状态恢复的底层能力。本节通过结构化的对比与流程图,帮助你在 10 分钟内完成关键知识的校准。

2.1 五大核心概念速览

概念 角色 容灾自愈中的关键作用
Provider 云/服务 API 的抽象层 对接阿里云、AWS、Kubernetes 等目标平台,执行故障切换 API 调用
Resource 基础设施的声明式定义 定义 ECS、RDS、SLB 等资源,作为自愈操作的“目标对象”
Data Source 只读查询外部数据 实时探测故障状态、获取可用区列表、拉取最新镜像 ID
State 当前基础设施的快照 记录资源 ID 与属性,是判断“当前状态 vs 期望状态”的唯一依据
Plan / Apply 变更执行工作流 生成自愈操作计划,经审批或自动执行后完成故障恢复
SRE 视角: 在 Runbook 中,terraform plan 的输出就是“自愈操作清单”,terraform apply 就是“执行手术”。State 文件则是“病历本”,必须远程存储并加锁。

2.2 Provider:基础设施的“驱动层”

Provider 是 Terraform 与目标平台之间的桥梁。每个 Provider 负责管理一组特定的资源类型和 API 版本。在容灾场景中,通常需要同时配置多个 Provider 来覆盖跨区域或跨云的操作。

# 多 Provider 配置示例:主区域与容灾区域
provider "alicloud" {
  alias   = "cn-hangzhou"
  region  = "cn-hangzhou"
  profile = "production"
}

provider "alicloud" {
  alias   = "cn-shanghai"
  region  = "cn-shanghai"
  profile = "dr-backup"
}

# 在资源中通过 provider 参数指定使用哪个区域
resource "alicloud_instance" "primary" {
  provider = alicloud.cn-hangzhou
  # ...
}

2.3 Resource 与 Data Source:声明与查询

  • Resource:使用 resource 块定义需要创建、更新或删除的基础设施对象。它是自愈动作的执行单元。
  • Data Source:使用 data 块查询外部信息,不产生副作用。在 Runbook 中常用于动态获取故障实例的当前状态、可用区库存或最新 AMI ID。
# Data Source:查询当前故障的 ECS 实例状态
data "alicloud_instances" "faulty" {
  ids        = ["i-xxxxxxxxxxxxx"]
  status     = "Running"  # 实际 Runbook 中可能查询 Stopped 或异常状态
}

# Resource:基于查询结果执行重启操作
resource "alicloud_instance" "recovery" {
  count = length(data.alicloud_instances.faulty.instances) > 0 ? 1 : 0

  instance_id = data.alicloud_instances.faulty.instances[0].id
  status      = "Running"

  # 触发重新部署
  force_stop = true
}

2.4 State:自愈的“真相源”

State 文件记录了 Terraform 管理的所有资源及其当前属性。在容灾自愈中,State 的作用被放大:

  • 依赖追踪:判断资源创建顺序,确保先恢复网络再恢复应用。
  • 性能优化:避免每次 plan 都全量调用云 API。
  • 协同锁:防止多个 Runbook 同时执行冲突操作。
关键实践: 必须将 State 文件存储在远程后端(如 OSS、S3、Consul),并启用状态锁(DynamoDB / OSS 锁)。本地 State 在分布式自愈场景下会导致“脑裂”。

2.5 Plan / Apply 工作流:自愈的执行引擎

标准工作流是 Terraform 的核心循环,在 Runbook 中表现为“检测 → 计划 → 执行 → 验证”的闭环。

Terraform Plan / Apply 工作流 —— 自愈闭环 1. 故障检测 Data Source 查询 2. terraform plan 生成变更计划 3. 审批/自动 策略判断 4. terraform apply 执行恢复操作 State 远程后端(OSS + 锁) 5. 验证状态 状态更新 验证通过 / 重试

2.6 核心概念关系图

下图展示了 Provider、Resource、Data Source、State 之间的依赖与数据流关系,这是理解 Runbook 编排架构的基础。

Terraform 核心概念关系图 Provider 层(阿里云 / AWS / Kubernetes / ...) Resource 声明式定义(创建/更新/删除) Data Source 只读查询(探测/获取属性) State 文件(远程后端 + 锁)

2.7 常见误区与避坑指南

误区 1: 在 Runbook 中直接硬编码资源 ID。
正确做法: 始终通过 Data Source 动态查询故障实例 ID,避免 State 与实际环境脱节。
误区 2: 所有资源放在同一个 State 文件中。
正确做法: 按环境(prod/dr)或服务边界拆分 State,减少锁竞争和爆炸半径。
误区 3: 忽略 terraform plan 的 -target 参数。
正确做法: 在自愈场景中使用 -target 精确指定恢复资源,避免触发全局变更。
# 精确自愈:只针对故障实例执行 plan
terraform plan -target=alicloud_instance.recovery -out=recovery.tfplan
terraform apply recovery.tfplan