故障复盘

一次 Terraform 状态迁移事故:手工改 state 的代价

← 全部文章

事故经过

把状态从本地迁移到 S3 后端时,为了“清理”一个报错条目,手工编辑了 state JSON,删掉了一个 VPC 资源条目。下一次 apply,Terraform 认为 VPC 不存在,新建了一套——连带路由表、对等连接全部漂移。

正确流程

1
2
3
terraform state pull > backup.tfstate        # 1. 先备份
terraform init -migrate-state                # 2. 用官方命令迁移后端
terraform plan                                # 3. 必须看到 No changes

需要调整条目时只用 terraform state mv / terraform import,永远不要手写 state JSON。

制度层面的改进

  • state 写权限收敛到 CI,个人只有 plan 权限。
  • 后端开启版本控制与锁(S3 + DynamoDB)。
  • 任何 apply 前的 plan 结果必须有人复核。