使用 moved 与 removed 重构状态
使用状态操作命令以及声明式 moved 和 removed 块,安全地重命名和重构资源,而不销毁基础设施。
使用 moved 与 removed 重构状态 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
重命名问题
当您在配置中重命名资源时,Terraform 会发现旧地址已消失,并出现了新地址。默认情况下,它会销毁并重新创建该资源,这可能导致停机或数据丢失。
状态重构工具可以让您告知 Terraform,资源只是移动了位置。
检查状态
首先列出状态中记录的内容。terraform state list 命令会显示每个受管理资源的地址。
terraform state list命令式 state mv
传统方法是使用 terraform state mv,在状态中重写资源地址。这里,我们将实例从 aws_instance.web 重命名为 aws_instance.app。
terraform state mv aws_instance.web aws_instance.appstate mv 的缺点
state mv 是一次性的手动 CLI 操作。它不会记录在代码中,因此团队成员在自己的机器上执行相同更改时必须重复操作。在协作流程中,这很容易出错。
声明式 moved 块
moved 块会在配置中记录重命名操作。Terraform 会在下一次计划期间自动为所有人应用该操作,之后您可以移除这个块。
moved {
from = aws_instance.web
to = aws_instance.app
}移动到模块中
moved 块也可以处理将资源封装到模块中的情况。目标地址会包含模块路径。
moved {
from = aws_instance.app
to = module.compute.aws_instance.app
}使用计划进行验证
添加 moved 块后,请运行 terraform plan。正确的移动操作不会显示销毁或创建,只会显示地址变更。如果仍然看到替换操作,说明该块有误。
terraform plan从状态中移除
有时,您希望 Terraform 停止管理某个资源,但不销毁实际基础设施。命令式命令是 terraform state rm。
terraform state rm aws_instance.legacy声明式 removed 块
较新版本的 Terraform 支持 removed 块。配合 lifecycle { destroy = false } 使用时,它会将资源从状态中遗忘,但不会触碰实际基础设施。
removed {
from = aws_instance.legacy
lifecycle {
destroy = false
}
}拆分状态文件
对于大型项目,terraform state mv -state-out 可以在独立的状态文件之间移动资源,这在将单体结构拆分为分别应用的堆栈时非常有用。
terraform state mv -state-out=network.tfstate \
aws_vpc.main aws_vpc.main备份与安全
Terraform 会在修改状态前写入一个 .backup 文件。不过,使用远程后端时,始终请先确认状态未被团队成员锁定,再执行手动操作,以免造成损坏。
快速检查
测试您对重构的了解。
回顾:安全地重构状态
现在,您可以在不销毁基础设施的情况下重构它:
- 使用
state mv/state rm执行命令式更改。 - 使用
moved块执行声明式重命名。 - 使用
removed块在不销毁资源的情况下将其遗忘。 - 始终通过计划进行验证,确保其中不显示替换操作。
用 AI 导师学习 DevOps Bootcamp — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 142
- 课程
- 568
常见问题解答
「使用 moved 与 removed 重构状态」课时是免费的吗?
是的 — 「使用 moved 与 removed 重构状态」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「使用 moved 与 removed 重构状态」这节课中我会学到什么?
使用状态操作命令以及声明式 moved 和 removed 块,安全地重命名和重构资源,而不销毁基础设施。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 moved 与 removed 重构状态」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。