翻译页面
本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。
什么是基础设施漂移?
基础设施漂移是指云资源的声明状态或记录状态与其在 Provider 中的实际状态之间的偏差。Terraform 状态文件记载某个安全组有 3 条规则;而实际运行中的安全组有 5 条,因为有人在某次事件期间通过控制台添加了 2 条。多出的这 2 条规则就是漂移。
漂移如何产生
漂移是结构性的,而不是偶然的。任何保存状态副本的系统(状态文件、CMDB、资源清单导出)都会与现实发生漂移,其速度等于现实在该系统之外发生变化的速度。典型来源:
- 带外变更:控制台修改、临时 CLI 命令、紧急修复。
- 并发工具:2 条流水线或 2 个团队管理相互重叠的资源。
- Provider 自动化:自动伸缩、托管升级、密钥和证书轮换。
- 部分失败:某次 apply 创建了 6 个资源中的 4 个,却一个也没有记录。
IaC 模型把漂移视为一种异常,在下一次 plan/apply 周期中予以纠正。在存在自主行动者(自动伸缩器、事件响应人员、AI 智能体)的环境中,更适合把漂移视为一种正常且持续存在的状况,加以观察和调谐。
使用实时查询检测漂移
由于 StackQL 根据实时的 Provider API 计算结果,StackQL 结果集就是实际状态。漂移检测由此简化为将该结果集与基线进行比较。例如,按区域获取 EC2 实例的实时资源清单:
SELECT region, COUNT(*) as num_instances
FROM aws.ec2.instances
WHERE region IN ('us-east-1','us-west-2','eu-west-1')
GROUP BY region;
将其与期望状态定义所隐含的数量进行比较,可以立即发现未受管或缺失的资源,而不论 IaC 工具自身的状态文件是否是最新的。同样的模式也适用于属性级别:查询资源的实时配置,并将其与声明的配置进行差异比较。
漂移与调谐
检测回答的是“哪里出现了偏差?”;调谐回答的是“应该如何处理?”:将该变更导入期望状态、将其回退,或将其作为有意为之的变更予以接受。调谐需要对控制平面的写入权限,因此读写型查询工具能够闭合环路,而只读的资源清单工具只能就此出具报告。StackQL 将纠正操作表示为 UPDATE 或 DELETE 语句,针对的是检测所用的同一批表。
相关概念
- 什么是可查询基础设施?:使实时状态比较成为可能的模型
- 什么是 StackQL?:对实时状态的读写访问
- 为什么状态文件对 AI 智能体失效:漂移是状态副本的结构性属性
- StackQL vs Terraform:状态文件模型与实时查询模型的对比
- 如何使用 StackQL 查询 AWS EC2 实例:漂移基线中使用的资源清单查询