跳到主要内容
翻译页面

本页面由 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 语句,针对的是检测所用的同一批表。