如何强制terraform重置它';什么州?

如何强制terraform重置它';什么州?,terraform,Terraform,我不小心用错了次要版本,现在我什么都做不了 Error: Terraform doesn't allow running any operations against a state that was written by a future Terraform version. The state is reporting it is written by Terraform '0.11.14' 我只想重置我的地形状态,以便使用正确的版本 如果您保持远程状态,并对其进行了版本控制(我强烈建议

我不小心用错了次要版本,现在我什么都做不了

Error: 
Terraform doesn't allow running any operations against a state
that was written by a future Terraform version. The state is
reporting it is written by Terraform '0.11.14'

我只想重置我的地形状态,以便使用正确的版本

如果您保持远程状态,并对其进行了版本控制(我强烈建议您同时执行这两种操作),则可能需要简单地恢复到旧版本。但我想你不会问这个问题,如果它这么简单的话

所以,Terraform state只是一个微不足道的JSON文件,它没有完整性检查——不管是好是坏。试着直接编辑状态文件,用正确的版本运行
TerraformPlan
,看看有什么效果。最有可能的情况是,它只会工作,但最坏的情况下,你会得到一个错误,所以值得一试

也就是说,如果您的配置在新版本的Terraform上运行良好,为什么不直接使用它呢?我通常建议使用与您的代码兼容的最新版本的Terraform,并将您的代码更改为与可供下载的最新版本的Terraform兼容


在将来,您可能希望提出一个关于如何管理和更新Terraform版本的策略和程序。这是我一直在尝试解决的问题(目前在私人测试版中,欢迎加入等待名单),下面更详细地描述了解决方案。但要点是——您可以在任何CI/CD平台上使用它,您可以将Terraform版本放在作业定义文件(例如CircleCI)中——您总是尝试在功能分支中使用较新的Terraform版本运行
Terraform plan
,在将版本bump合并到代码更改触发的主分支之前,请查看结果并修复任何不兼容问题
terraform apply

要使用哪个版本?如果州文件增加了一个主要版本,那么它很可能被套住了。要么回滚状态文件(如果您使用的是S3,那么这就是为什么他们建议在bucket上设置版本控制),要么删除状态文件并手动重新导入所有内容。如果只是一个小更改,您可以尝试手动编辑状态文件以将其设置为您的版本,并查看Terraform是否可以使用它。奇怪的事情可能会发生,这就是为什么Terraform对Terraform版本的匹配或超过状态文件版本要求如此严格的原因