Terraform 常用指令
init 初始化環境
terraform init
- 依據組態檔,下載需要的 provider 放到 .terraform/ 位置裡面,並快取一份在 ~/.terraform.d/
validate 檢查組態檔語法
terraform validate
- 檢查程式碼的語法是否合法且一致,不管輸入變數以及現存狀態
plan 產生執行計畫
terraform plan
- 跟據組態檔與基礎架構的狀態來預計執行操作
- terraform plan -destroy 預覽 terraform destroy 接下來的執行操作
apply 產 生執行計畫,並詢問是否執行
terraform apply $OPTIONS $FILE
- 輸入 "yes" 就會開始執行,並能看到 terraform 印出處理過程的資訊
-auto-approve
即可不需要輸入 yes
destroy 刪除資源
terraform destroy
- 會刪除經由 terraform 控制的基礎架構,並詢問是否要執行
target
參數指定某項資源,那麼不但會銷毀該資源,同時也會銷毀一切依賴於該資源的資源
console 啟動互動式控制台
terraform console $OPTIONS $FILE
- 可以用來測試各種表達式語法以及內建函數,或是作為偵錯工具
fmt 格式化程式碼的格式和規格
terraform fmt $OPTIONS $FILE
- 用來格式化 Terraform 程式碼檔案的格式和規格
force-unlock 手動解除工作區鎖定
terraform force-unlock $LOCKID $FILE
- 指令不會修改你的基礎設施,它只會刪除目前工作區對應的狀態鎖定
get 下載與更新模組
terraform get $OPTIONS $FILE
- 下載以及更新根模組中使用的模組
graph 建立架構圖
terraform graph $OPTIONS $FILE
- 用來產生程式碼描述的基礎架構或是執行計畫的視覺化圖形
- 它的輸出是 DOT 格式,可以使用 GraphViz 來產生圖片
terraform graph | dot -Tsvg > graph.svg
import 將既有資源物件匯入 Terraform
terraform import $OPTIONS $ADDRESSID
- 用來將已經存在的資源物件匯入 Terraform
output 提取狀態檔案中輸出值
terraform output $OPTIONS $FILE
- 展示根模組內定義的所有輸出值
- 若指定
NAME
,只會輸出相關輸出值
providers 展示 Provider 的資訊
terraform providers $CONFIGPATH
- 可以透過明確傳遞
config-path
參數來指定根模組路徑,預設為目前工作目錄 terraform providers mirror
下載目前程式碼所需的 Provider 並且將其複製到本機目錄下terraform providers schema
展示目前程式碼所使用的 Provider 的架構與參數
show 記錄變更計畫、配置與狀態
terraform show $OPTIONS $PATH
- 從狀態檔或是變更排程檔展示輸出資訊
state 進行複雜的狀態管理操作
terraform state $OPTIONS
list
指令可以列出狀態檔案中記錄的資源物件mv
在狀態檔中移動資源pull
從遠端 Backend 下載狀態並輸出push
上傳本機狀態檔案到遠端 Backendreplace-provider
指令可以取代狀態檔案中資源物件所使用的 Provider 的來源rm
從狀態檔中刪除物件show
指令可以展示狀態檔案中單一資源的屬性
taint 標記資源,下次執行 apply 重建
terrform taint
- 指令可以手動標記某個 Terraform 管理的資源有"污點",強迫在下次執行 apply 時刪除並重建之
untaint 清除資源上的污點
terraform untaint $OPTIONS name
- 清除一個 Terraform 管理的資源物件上的污點,恢復它在狀態檔案中的狀態
- name 參數是要清除污點的資源的資源名稱。此參數的格式為 TYPE.NAME。E.g. aws_instance.foo
workspace 管理工作區
terraform workspace $OPTIONS
list
:列出目前存在的工作 區select
:選擇使用的工作區new
:建立新的工作區new -state
:給定路徑的狀態檔案會被拷貝到新工作區state=path
:用來初始化新環境所使用的狀態檔路徑new -state = old.terraform.tfstate example
Created and switched to workspace example
delete
:用來刪除已經存在的工作區- 無法刪除目前正在使用的工作區
- 如果工作區狀態不是空的,Terraform 會禁止刪除,除非宣告
force
參數 show
指令被用來輸出目前使用的工作區。
refresh 透過真實資源更新狀態檔
terraform refresh
chdir 參數切換工作目錄
terraform -chdir=environments/production apply
- 例外:以下情境,即使透過
chdir
指定路徑,仍會使用目前工作目錄而非指定的目錄- Terraform 處理命令列設定檔中的設定而非執行某個特定的子指令時,此階段發生在解析
chdir
參數之前 - 需要使用目前工作目錄下的檔案作為你配置的一部分時,可以透過在程式碼中使用變數來
path.cwd
獲得對目前工作路徑的引用,而不是chdir
所指定的路徑。可以透過使用path.root
來獲取代表根模組所在的路徑
- Terraform 處理命令列設定檔中的設定而非執行某個特定的子指令時,此階段發生在解析