Terraform 状态取证工具
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,把 @user_3c6cb52e/terraform-state-forensics-tool 安装到当前 AI 助手中。
技能介绍
要解决的具体问题
Terraform 的 state 文件长期被视为基础设施的事实来源,但这份文件在真实环境里经常和线上资源不一致:有人直接在控制台做过变更、有历史资源在代码删除后没有清理、模块之间的引用绕成环,等到 terraform plan 输出时,往往已经是一堆难以快速读懂的差异。排查这类问题目前主要靠人工 grep state JSON,或者在 CI 里临时拼脚本,缺少一套统一、可复用的取证流程。
技能如何工作
这个技能把状态取证拆成三个相对独立的分析维度:
- 漂移检测:将当前
state与最新的plan输出做对比,定位实际状态和代码声明状态之间的偏差,包括属性变化和外部修改的字段。 - 孤儿资源识别:遍历
state中登记的资源,结合 Terraform CLI 的 state 相关命令,找出代码里已不存在但仍残留在state中的资源。 - 依赖循环检测:从
state的依赖关系中查找环,提前暴露可能导致plan或apply失败的循环引用。
安全维度通过 tfsec 对配置和状态做扫描;成本维度调用 Infracost API 对相关资源做估算,帮助判断某个漂移或孤儿资源是否值得优先处理。
适用边界与注意点
- 依赖本地可用的 Terraform CLI;
tfsec和 Infracost 分别需要可用的扫描环境与 API Key,缺失时对应维度会失败而不是降级。 - Infracost 的估算基于公开定价,不含承诺折扣、代金券或私有合同价,结果只能作为方向性参考。
- 未内置对
state中敏感字段的脱敏处理,报告可能包含明文密钥或密码,输出需按敏感信息保管。 - 在超大
state上运行依赖检测可能耗时较长,建议先在子模块粒度上执行。 - 技能只负责分析,不会自动修复漂移或删除孤儿资源,后续修复仍需回到 Terraform 流程中手动确认。
使用场景
- 接手遗留环境,先跑一次 `state` 与 `plan` 对比,确认哪些属性被控制台直接改过
- 代码里删除模块后,用 state 命令核对 `state` 中是否还残留未被管理的资源
- `plan` 因依赖环中断时,从 `state` 的依赖关系里定位循环引用的具体模块
- 评审前用 tfsec 做安全扫描,并通过 Infracost 评估漂移资源对月度费用的影响
适合人员
- 负责多环境 Terraform 的 SRE,需要在变更窗口前快速定位漂移与潜在故障
- 云基础设施审计人员,要用统一方式记录 `state` 中的残留资源和安全扫描结果
- FinOps 工程师,需要把某个漂移或孤儿资源的成本影响量化后写进评审材料
- 平台工程团队负责人,想用固定流程替代临时脚本,做状态取证和复盘