如何降级Terraform state文件中记录的主版本号
Terraform 跨大版本号误改state报错修复方案
你遇到的报错是Terraform的版本兼容校验逻辑触发的,只要你没有实际使用v1.0.10执行过
apply/refresh等会写入state的操作,仅手动修改了版本字段,可按以下步骤修复:
- 第一步:备份原始state
从存储state的AWS S3 bucket中下载当前异常的tfstate文件到本地,同时额外复制一份作为备份,避免后续操作失误导致状态不可逆损坏。 - 第二步:回改版本标识
用文本编辑器打开本地的tfstate文件,找到JSON结构顶层的terraform_version字段,将其值从"1.0.10"回改为"0.11.14",保存修改。 - 第三步:本地校验可用性
本地安装v0.11.14版本的Terraform,在存放修改后state的目录下执行terraform state list,如果可以正常输出你管理的资源列表,说明state结构兼容无问题。 - 第四步:回传修复后的state
将本地校验通过的tfstate文件上传回S3对应的原始路径,覆盖异常的源文件。 - 第五步:验证修复结果
回到你的原有Terraform工作目录,重新执行terraform init,即可正常通过初始化校验。
额外说明
terraform init本身确实不会修改state文件内容,你遇到的报错是init阶段的前置校验逻辑:Terraform会先读取state的版本字段,确认当前运行的版本不低于state记录的写入版本,避免低版本Terraform识别不了高版本写入的state结构导致数据损坏,校验不通过就会直接阻断操作,不会对state做任何写入。
如果你的state确实被v1.0.10版本写入过(而非仅手动改了版本号),还需要额外清理state中v0.11.14不识别的新增字段、适配格式后才能回退,当前场景无需额外操作。
内容的提问来源于stack exchange,提问作者Marc Robberts
相关产品推荐
相关产品推荐

