­

如何处理terraform中tfstate与线上不一致的状态

  • 2019 年 12 月 9 日
  • 筆記

在处理客户需求的时候,曾经遇到过客户在线上删除了资源,但是本地资源编排不能处理tfstate状态与线上资源不一致的情况,这时候会读到空的资源引用,进而导致terraform crash。虽然现在在tencent terraform的最新版本中,基本上所有资源都能处理这个情景,但是如果你使用的是一些比较早的版本同时也遇上了类似问题,可以看一下下面的解决方案。

这里使用CAM policy这个资源作为例子来描述具体的方法。在本地新创建的tf文件

resource "tencentcloud_cam_policy" "example" {    name     = "example-name"    document = "${var.policy_document}"  }

apply并且create 成功后,这时手动在控制台上将其删除。此时,这个资源已经不存在,但是tfstate文件内存在这个资源的状态。如果直接apply,refresh会造成crash。

解决方案一:升级tencent terraform版本到较高版本。再次apply可以避免crash。

解决方案二:如果不想升级,可以手动处理tfstate文件状态。

在terraform 命令行内输入:

terraform state rm tencentcloud_cam_policy.example

rm命令后面分别是 这个资源的名称命名属性,成功删除后,就能保证tfstate内与线上一致了。再次apply就可以避免crash。