Skip to main content

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 上傳本機狀態檔案到遠端 Backend
  • replace-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 來獲取代表根模組所在的路徑