失败回滚
Rollback 策略、部分成功处理。
25 分钟
失败回滚
Stack create/update 失败 时,CloudFormation 默认 自动回滚 到上一个稳定状态,避免半套资源悬空。理解 Rollback 策略与 部分成功 场景,是安全实验与生产变更的前置知识。
学习目标
- 读懂
CREATE_FAILED、UPDATE_ROLLBACK_COMPLETE等状态 - 配置
DisableRollback与更新失败时的行为 - 对照 Terraform apply 失败与 state 一致性(tf-state)
Stack 失败与回滚
CREATE_IN_PROGRESS → 某 Resource CREATE_FAILED
→(默认)ROLLBACK_IN_PROGRESS → DELETE 已创建资源 → ROLLBACK_COMPLETE
UPDATE_IN_PROGRESS → 某 Resource UPDATE_FAILED
→ UPDATE_ROLLBACK_IN_PROGRESS → 恢复旧配置 → UPDATE_ROLLBACK_COMPLETE
控制台 Events 页签按时间倒序列出 哪条 Resource、什么 Reason——排障第一步。
创建时的 Rollback 选项
aws cloudformation create-stack \
--stack-name coderoadmap-lab \
--template-body file://template.yaml \
--disable-rollback # 失败时不自动删资源,便于调试
| 选项 | 场景 |
|---|---|
| 默认自动回滚 | 实验/生产常规部署 |
--disable-rollback | 教学:保留失败现场查 Events |
DeletionPolicy: Retain | 删 Stack 时保留 RDS 等(见 cf-resources) |
DisableRollback 不等于安全:失败 Stack 可能占配额、产生费用,调试完应 delete 或 fix 后 update。
更新失败处理
- 读 Events → 修正 template(如 IAM 权限、配额、无效 Property)
- 若 Stack 处于
UPDATE_ROLLBACK_COMPLETE:可再次 update(已回到旧模板状态) - 若资源卡在
DELETE_FAILED:Console 手工删资源或 continue-update-rollback(高级)
Terraform 失败时 state 可能 partial apply;需 terraform plan 对齐。CFN 由 Stack 引擎 事务式 回滚,但 Replace 类变更 仍可能短暂中断服务。
CodeRoadMap 建议
生产 infra 变更走 TF + PR plan + approval;CFN 实验用 小 Stack、t3.micro,失败允许 rollback。勿在 prod 开 DisableRollback。
练习
- 故意在模板写无效
InstanceType,观察 create 失败与 rollback Events