升级Terraform版本后能否继续使用原有Terraform state文件?
Terraform v0.12.31 升级到v1.2.3的State兼容性说明
你持有的v0.12.31版本生成的State文件无法直接在v1.2.3版本下正常使用。
Terraform加载State时会做强制版本校验:你提供的State中version字段值为4,是v0.12系列对应的State格式版本;v1.2.3支持的State格式版本更高,直接读取旧版State会直接抛出版本不兼容错误,哪怕是你贴出的这种无实际资源、仅存元数据的空State,也会因为校验不通过无法加载。
Terraform每个大版本仅内置了从上一个大版本迁移State格式的逻辑,不支持跨多个大版本直接升级State,跳版本操作大概率会造成State结构损坏、资源元数据丢失。
旧State适配新版本的标准操作流程
按照以下步骤操作即可完成State适配,全程不会改动实际云上资源:
- 升级前全量备份所有State文件,不管是本地存储的State文件,还是存在S3、OSS、Consul等远端后端的State数据,都要提前拷贝备份,避免操作失误导致State损坏。
- 严格按照大版本递进顺序升级Terraform二进制程序,不要跨版本跳级。每升级到一个版本,就在对应Terraform项目目录下执行
terraform init、terraform refresh命令,Terraform会自动将关联的State升级到当前版本支持的格式;升级完成后执行terraform plan,确认输出显示无资源变更(正常State升级不会触发任何资源的增删改操作),确认无报错后再升级到下一个版本。
固定升级路径为:v0.12.31→ 最新补丁版v0.13.x → 最新补丁版v0.14.x → 最新补丁版v0.15.x → 最新补丁版v1.0.x →v1.2.3 - 所有版本的State迁移完成、确认
terraform plan无异常后,再逐步调整Terraform配置代码,适配v1.x版本的语法规范即可。
内容的提问来源于stack exchange,提问作者Dusayanta Prasad
相关产品推荐
相关产品推荐

