首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

代码语言:javascript
复制
resource "tencentcloud_cam_policy" "example" {
  name     = "example-name"
  document = "${var.policy_document}"
}

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

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

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

在terraform 命令行内输入:

代码语言:javascript
复制
terraform state rm tencentcloud_cam_policy.example

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

举报
领券