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