LabHub
学习 学习路径 课程

基础设施即代码

有人在控制台上改过了

在 LabHub 中继续学习

一句话总结

漂移是指代码宣布的状态和实际状态发生变化。 引入IaC的组织实际上面临的大部分问题都在这里。

概念图: 漂移 · 理所当然的动作 · 所有者必须只有一个 · 定期

为什么需要这个?

周五晚上出现了故障。有人进入控制台,在安全组中设置了规则。 加了一个,就关掉了急火。是正确的判断。

问题是星期一。想做与别人无关的变更。plan转过身来, 显示“将删除周五添加的那个规则”。代码中包含那个规则。 因为没有。不知道apply这样做就会复发障碍。

这就是漂移。而且这不是工具的缺陷,而是理所当然的动作 是。声明型工具把代码当成真理,把现实放在那里。

产生漂移的路径

路线 对应
紧急手动变更 应对故障中操作控制台 将事后代码反映纳入程序
其他团队的变更 保安团队调整政策 明确所有权界限
自动缩放 实例数量不断变化 ignore_changes除外
云基本值 生成时自动赋予的标签 反映在代码中或忽略
其他代码库 两个存储库管理相同的资源 绝对禁止 — 所有者只有一个

最后一个项目是最危险的。如果两个状态文件管理同一资源的话 继续互相倒退。每个资源的所有者必须只有一个

检测——plan是诊断工具

plan不是只有在分发前才会旋转。定期旋转 检测漂移是很好的运营。

# 아무 변경도 안 했는데 plan 에 diff 가 있다 = 드리프트
plan → 변경 없음  ✅ 코드와 실제가 일치
plan → 변경 있음  ⚠️ 조사 필요

在CI每天plan如果打开后结果没有空,会发送通知。 这样做的话,周五的变更不是在周一而是周六早上知道。

解决——三个选择

发现漂移时,答案是三个中之一。

1. 吸收到代码中 — 如果那个变更是正确的,就会反映到代码中。 这是最常见且通常正确的选择。

2. 撤销 — 如果那个变更是错误的apply强制码状态为。 但是,首先要确认为什么会有这样的变更。

3.从管理对象中删除—如果是像自动缩放一样原来的变动值的话 ignore_changes所以只排除那个属性。不是把整个资源都排除在外 关键是用属性单位进行筛选。

导入——把已经有的东西放入代码中

IaC的引入一般不会从白纸开始。已经手动制作好的资源 有数百个,需要用代码转移。

绝对不能在这里做的事情:删除后重新创建。如果是正在运行的资源的话 是停机时间,如果有数据的话会丢失。

请写入导入。将实际资源注册到状态文件中,工具“这个是 让他们认识到“是我管理的”。

1. 자원의 실제 설정을 조사한다
2. 그와 똑같은 코드를 작성한다
3. import 로 상태에 등록한다
4. plan 을 돌려 '변경 없음' 이 나올 때까지 코드를 다듬는다

4号是核心。plan是空的导入结束。diff还剩 保持原样继续的话,下次apply时那个资源会变。

处理状态文件时

状态文件包含资源的实际ID、属性、依赖关系。认证信息 也有用平文进入的情况。

在现场相遇的样子

在下面的理论中看到的东西

在接下来的阅读中,在复制漂移对应到多个环境时,模块边界在哪里 看看是否应该保留。吸收、反馈、排除中,将哪些决定放入共同模块,哪些 请尝试将决定留存在呼叫环境中,看看是否可以减少变更爆炸半径。