这一章是 Terraform 最关键、也最容易踩坑的地方。
State 是 Terraform 的施工档案库。
很多人刚学 Terraform,只看 HCL 代码,不理解 state,结果一上生产就出事。
因为 Terraform 不是只看蓝图文本。 它还必须知道:
- 上一次到底建了什么
- 这些资源在真实世界里的 ID 是什么
- 蓝图里的哪个资源,对应现实中的哪个对象
- 下次更新时该改谁、删谁、保留谁
这就是 state 的作用。
你可以把它理解成:
蓝图文件
= “这座城市应该长什么样”
state 文件
= “现实里已经建成了哪些对象,以及它们和蓝图怎么对应”没有 state,总工局就像失忆了一样。
#为什么 state 这么重要
比如:
resource "aws_s3_bucket" "assets" {
bucket = "software-city-assets-prod"
}如果没有 state,Terraform 很难稳定判断:
- 这个 bucket 是这份蓝图以前建的吗
- 还是别的地方手动建的
- 现在该创建新对象还是管理现有对象
所以 state 不是附属品。
它就是基础设施蓝图系统的记忆。