HashiCorp發布了Terraform 0.9,對遠程狀態的管理方式做了顯著的改進,其中包括:狀態鎖定(State Locking)、狀態環境(State Environments)、新的集中式初始化命令“terraform init”、可配置先于資源銷毀運行的“銷毀供應者”(Destroy Provisioner),以及“資源中斷”(Resource Intereupt)方式,允許使用自定義邏輯對選定資源即刻處理操作符的中斷。
Terraform 0.9顯著地改進了對遠程“狀態”(State)的管理方式。雖然新版本確保了對當前狀態的向后兼容問題,但是還應指出,在Terraform 0.11中,將移除對遠程狀態遺留配置的支持。首個主要改進是可以對受支持的后端做原生狀態鎖定,這是為了防止多重并行寫入。在Terraform 0.9中,支持狀態鎖定的后端包括本地、AWS S3和Consul。
在HashiCorp的博客中,介紹了狀態鎖定是如何通過降低某個團隊成員意外覆蓋其它成員工作的風險,使Terraform可更安全地用于團隊環境。狀態鎖定在所有具有寫入狀態的操作上自動執行,在狀態鎖定失敗時,Terraform停止繼續運行。對大多數命令而言,可以使用“-lock”標志禁用狀態鎖定,但是這種做法是不推薦的。Terraform在解鎖失敗時會給出一個鎖ID和元數據,使用這些信息可在必要時實現“強制解鎖”。關于狀態鎖定的更多信息,請參考Terraform文檔。
現在遠程狀態是“后端”(Backend)的一個組成部分。后端是一種Terraform新提出的抽象,它封裝了“狀態環境(state environments)”等可插拔功能。狀態環境是一種狀態命名空間,允許一個Terraform配置文件夾管理多個不同的架構資源集合。狀態環境類似于版本控制系統中的分支,只是狀態環境不能被合并(merge)。按HashiCirp博客的建議,狀態環境最有用之處在于隔離一系列資源以測試開發期間的變更,此后其中所有必要的變更將必須重新應用于其他環境中。環境管理使用命令行接口(CLI),如圖所示:
在HashiCorp的博客中還指出,狀態環境本身并不能單獨用于開發、測試機和生產環境中的差異管理。當Terraform的配置逐漸增大后,“將一個大規模配置分割為多個使用“terraform_remote_state”數據資源鏈接在一起的小型配置,這是更可管理的,也是更加安全的”,因為這種做法允許團隊委派所有權,降低了更改所產生的影響。關于狀態環境的更多信息,請參考Terraform文檔。
Terraform 0.9還引入了一個新命令“terraform init”,實現Terraform配置的初始化和設置。在初始化過程中,Terraform檢測后端配置的任何更改,以及任何對現有狀態遷移的提議,使得開發人員可以在各個類型的后端間遷移,這一更改是被Terraform自動管理的。按HashiCorp博客的說法,這一新命令應成為所有Terraform工作流的重要組成:
對于每個團隊成員可運行的所有Terraform配置,“terraform init”命令應成為一個不可或缺的設置命令。多次運行命令是安全的,這確保后端得到了適當的配置。
無論“terraform plan”這樣的主命令,還是“terraform taint”和“terraform console”這樣的輔助命令,所有的Terraform命令都可以與遠端狀態無縫工作。當一個命令從本機運行時,會自動地根據遠端狀態而非本地狀態運行。按HashiCorp的介紹,“這種方式使得用戶可以按照自身的習慣使用CLI,同時依然能在團隊環境中受益于遠程狀態存儲的優點”。在后端文檔的完全版中,對此提供了更多信息。
Terraform 0.9還支持在銷毀資源時運行供應者(provisioner)。供應者是一種執行預定措施行為的機制,自最初的0.1版本以來,Terraform的資源創建就支持供應者機制,無論是本地運行命令還是遠程運行命令。銷毀供應者增強了供應者機制,如果指定了參數“when = 'destroy'”,銷毀供應者就會實現資源銷毀中同樣部分的功能。供應者的運行要先于對所定義資源的銷毀。Terraform會在銷毀失敗時報錯,并在下一次運行“terraform apply”時重新運行供應者。由于這一默認行為,多次銷毀供應者時應加倍小心。
在0.9版本中還包括了其它一些小改進。例如,中斷已可以被檢測到,并為使用用戶邏輯處理中斷提供資源。Terraform 0.9中還添加了對多個新提供者和上百種新資源的支持。對已有資源也做了很大的改進,包括:無需強制銷毀就可以重新調整AWS實例的大小、對EC2的完全IPv6支持,以及對DNSimple提供者的更新,使得僅需一個新的認證令牌時就可使用APIv2。
除了在文檔“升級指南”中給出禁用和更改,Terraform 0.9核心都是向后兼容的。關于Terraform 0.9版本的更多信息,可以參考HashiCorp的博客。
查看英文原文: HashiCorp Terraform 0.9. Released with State Locking, State Environments, and Destroy Provisioners