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