直接回答:state 是 Terraform 记录"我管了哪些真实资源、它们属性如何"的快照,plan 时对比配置与 state 算出变更,apply 后更新。没有 state,Terraform 就无法把配置里的资源映射到云端实体,无法正确做增删改。团队协同的标准做法:state 存远端后端(S3+DynamoDB 锁、Terraform Cloud、GCS 等),本地绝不长期持有;按环境/系统拆成多个小 state,用 terraform_remote_state 或数据只读互引。
展开解析:核心纪律四条。其一,并发锁:远端后端必须支持锁(DynamoDB lock、内置 locking),两人同时 apply 会撕裂 state。其二,拆分爆炸半径:一个巨型 state 意味着每次 plan 全量刷新、一次手滑毁掉全部基础设施;按网络/数据库/应用分层拆分,上游输出供下游引用。其三,不手改 state 文件,资源漂移用 import 纳管、改名用 moved 块或 state mv,删除用 state rm(只移出管理不删资源)配合 removed 块。其四,state 含敏感值(初始密码、私钥),访问权限要按密钥管理。漂移治理:CI 里定时 plan 期望为空,非空即有人绕过 IaC 手工改了云资源。
追问方向:import 块与传统 import 命令差异?为什么 state 里会出现明文敏感值?workspace 与多目录拆分怎么选?
(约 450 字)