Skip to content

IaC:发布、排障与恢复练习 ​

状态保护、发布与销毁管理 ​

维护Terraform 状态与计划审阅前先保存backend、workspace、变量与资源地址,恢复后以计划动作、未知值、状态锁及真实资源映射验收。具体配置见配套示例。

核对日期2026-10-17;适用范围:Terraform >=1.10.0,<1.11.0,内建terraform_data;无外部provider和云账号。固定教学族不是2026最新版本或生产升级建议,状态/锁按所选backend另行核对。示例未执行;真实环境仍需验证产品配置、权限、连通与恢复结果。先读起点理解前置,再按章节完成推演。

Sensitive与状态秘密 ​

IaC秘密保护不能只依赖sensitive输出标记:它主要隐藏常规显示,值仍可能进入state、计划、provider日志和备份。禁止把访问密钥写入tfvars、提交state或公开show -json结果,CI制品同样需要最小访问和保留期。远端backend需选支持的加密、访问控制、版本与锁;加密不能弥补所有人可读的权限配置。示例不含真实秘密,假数据也不能当作生产凭据。

协作发布与漂移 ​

IaC协作流程固定代码版本、变量与backend,在受控身份生成计划,人工核对后应用同一保存计划。环境变化或计划过期时重新计划,不能在审批后偷偷换变量。定期检查漂移区分紧急人工变更和误操作,再决定吸收配置或恢复目标;refresh不是万能回退。多个团队不能同时用不同state管理同一真实对象,否则所有权冲突。

销毁范围与恢复边界 ​

IaC销毁审核先列出将删资源及依赖、备份与保留策略,再确认backend/workspace/环境。prevent_destroy只能在相应配置仍存在时拦截部分破坏,不是删掉整个资源块后的永久保险。state rm只停止管理不删除对象,destroy是真实删除意图;删除state文件既不销毁也不安全退役。误删后通常从备份重建对象并修复状态映射,代码回退不自动恢复数据。

本篇练习与参考解答 ​

练习:sensitive=true是否让state里完全没有秘密?

参考解答

不保证。它隐藏部分显示,但状态、计划和日志仍可能包含值,必须加密、控权并限制制品保留。

核对资料与相邻阅读 ​

继续阅读机制、完整实践、运维、诊断与复习。

锁冲突、漂移与计划异常定位 ​

本节沿计划动作、未知值、状态锁及真实资源映射定位失败层;先确认backend、workspace、变量与资源地址,与配套示例逐项对照,再选择最小修复。

Lock冲突排查 ​

IaC锁冲突先核对backend/workspace、lock ID、持有者、时间和正在运行的任务。确认是合法并行操作则等待,任务中断则查执行是否仍在后台及远端是否已变更,再按backend流程恢复。不能默认-lock=false继续apply,更不能删除锁对象碰运气;即使旧任务死了,部分资源也可能已创建,需要重新计划核对状态。

Unknown与计划不稳定 ​

IaC未知值表示求值依赖尚未产生的结果,不能直接当false或安全默认。for_each键集合需要能在计划阶段确定,依赖创建后才知道的ID常导致无法确定实例数量。先让稳定业务键描述资源身份,再让未知ID作为属性引用;不要用多次-target当常规解决办法,局部计划可能遗漏必要变更。课堂门禁对未知after环境直接拒绝。

State丢失与漂移恢复 ​

IaC漂移排查先保全当前state与远端清单,确认资源是否仍存在及管理地址是否改变,再选择有审阅的import/moved等迁移方式。仅恢复旧state不能恢复已删除的云数据,旧计划也可能因serial或lineage不符失效。练习:误删state后直接apply安全吗?参考解答:不安全,可能重复创建或命名冲突;先确认真实资源与备份,再恢复管理关系,禁止凭空编造远端ID。

本篇练习与参考解答 ​

练习:发现陈旧锁后是否直接-lock=false继续apply?

参考解答

不能。先确认持锁者与真实任务是否结束、检查部分执行和远端变化,再按backend恢复流程处理。

核对资料与相邻阅读 ​

本节沿用本页资料与示例入口。

并发执行与状态漂移的复盘 ​

以下演练将Terraform 状态与计划审阅的变更、失败证据和恢复验收串起来;先熟悉配套示例中的backend、workspace、变量与资源地址。演练未执行。

故障场景与影响 ​

流水线报状态锁冲突,另一位操作者准备强制解锁并再次执行旧计划。

先记录首次异常时间、受影响对象和最近变更,区分个别对象失败与整条管理链路异常。以下是排查演练,不是已发生事故的实测记录。

按证据定位原因 ​

  1. 确认后端、工作空间、锁标识和持有者,核对是否仍有活跃执行;不要仅凭等待时长判断锁已失效。
  2. 保存状态版本与执行日志,对照真实资源判断上次执行是否部分完成。
  3. 重新评估资源漂移和计划差异,特别标记替换、删除和未知值;旧计划不能代表当前环境。

恢复步骤与验收 ​

活跃执行结束前不抢锁;确认锁已失效后按后端约定处理,并基于当前声明、状态和真实资源重新生成及审批计划。不用手工覆盖状态掩盖差异。

验收:状态映射能解释现存资源,新计划不含非预期破坏性动作;恢复路径包含状态备份和数据备份,二者用途分别记录。

将触发条件、直接原因、修复动作、恢复证据和后续检查写入同一份复盘,明确每项后续工作的负责人。机制参考:官方说明。

两种锁练习 ​

IaC锁练习:提交.terraform.lock.hcl后,两台机器是否可同时安全apply同一backend?参考解答:不能,依赖锁只固定provider选择,需要backend支持状态锁并遵守同一状态所有权。课堂无外部provider所以没有伪造.lock.hcl,不能因看不到依赖锁就删掉状态保护。

删除与回退练习 ​

IaC回退练习:git revert恢复旧配置是否保证已销毁数据库回来且数据完整?参考解答:不保证,配置可能重新创建空对象,数据依赖已验证备份与恢复流程。state记录管理映射,计划只表达动作,二者都不是数据备份。先在独立环境确认恢复方案,再审阅新计划与身份映射。

静态审阅的验收边界 ​

IaC静态边界明确:Python只做AST解析,JSON只做数据结构解析,HCL仅只读复核,不把文本检查称terraform validate成功。本课程没有执行任何Terraform、provider或云CLI,没有安装依赖、服务、模拟器与预览。读者仍需补充实际版本兼容、backend锁、权限、apply与销毁恢复验证,不能以本报告批准生产自动化。

本篇练习与参考解答 ​

练习:代码回退能恢复destroy前的数据吗?

参考解答

不能。重新创建可能得到空资源,数据需要已验证备份与恢复流程,state和plan都不是数据备份。

核对资料与相邻阅读 ​

本节沿用本页资料与示例入口。

继续阅读