如何處理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。