Terraform - 狀態
Terraform State
Terraform可以根據state跟蹤托管資源,默認文件存儲在本地(local),可以使用backend定義遠程的存儲(remote)。
狀態文件:terraform.tfstate、terraform.tfstate.backup
State文件
terraform.tfstate文件保存Terraform創建和管理的所有資源信息默認存放在執行Terraform命令的本地目錄下。
執行Terraform命令時,Terraform將會利用該文件與當前目錄下的配置文件做Diff比較。
如果出現不一致,Terraform將按照配置文件中的定義重新創建或者修改已有資源,直到沒有Diff。
如果這個state文件損壞,Terraform 將認為已創建的資源被破壞或者需要重建(實際的云資源通常不會受到影響)。
本地state存在的問題
- 缺乏靈活性:狀態文件存儲在本地,本地多人協作時不僅需要拷貝模板,還需要拷貝state文件,不便于團隊成員協同;
- 缺乏安全性:state存在敏感數據,缺乏數據的保護;當多人同時變更時,存在狀態不一致導致基礎設施風險;文件系統損壞會導致狀態文件丟失;
Backend
Backend是存放State文件的載體,可以存放在本地(local)或遠程(remote),默認為本地。
- state文件放到遠端的存儲服務上可以實現state文件和模板代碼的分離
- 遠程Backend具有lock機制,可以降低多人協作時對state的維護成本,同時保護敏感數據
有關State的命令
- terraform refresh: 刷新當前State的內容,用于檢測不一致的內容并更新狀態文件,也就是再次拉取最新的數據寫入到state文件中。
- terraform import :用于將資源導入到terraform state中,進而加入到Terraform的管理
- terraform state : 用來操作狀態文件
terraform state list 按照 <資源類型>.<資源名稱> 的格式列出當前state中存在的所有資源
terraform state show 按照Key-Value的格式展示出特定資源的所有屬性及其值,格式為 terraformstate show <資源類型>.<資源名稱>
terraform state pull 獲取當前state內容并展示
terraform state rm 將state中的某個資源移除,但實際上并不真正刪除這個資源
行動是絕望的解藥!
歡迎轉載和引用,但請在明顯處保留原文鏈接和原作者信息!
本博客內容多為個人工作與學習的記錄,少數內容來自于網絡并略有修改,已盡力標明原文鏈接和轉載說明。如有冒犯,即刻刪除!
以所舍,求所得,有所獲,方所成。

浙公網安備 33010602011771號