iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

原簡體中文教程連結: Introduction.《Terraform入門教程》


1.6.15.1. providers

terraform providers 指令列印目前程式碼定義的 Provider 的資訊。

Provider 依賴關係透過幾種不同方式建立:

  • 在程式碼中明確使用 terraform.required_providers 區塊,包含可選的 version 約束
  • 在程式碼中明確使用 provider 區塊,包含可選的 version 約束
  • 在目前狀態檔案中存在屬於某個 Provider 管理的資源實例。例如,如果程式碼中刪除了特定資源物件的聲明,那麼仍然存在對對應 Provider 實例的依賴,直到物件被銷毀

這個指令總結了目前所有的 Provider 依賴,有助於理解為什麼會需要特定 Provider。

這個指令是含有內嵌子指令,這些子指令我們會逐一解釋。

1.6.15.1.1. 用法

terraform providers [config-path]

可以透過明確傳遞 config-path 參數來指定根模組路徑,預設為目前工作目錄。


1.6.15.1.1. terraform providers mirror

該子指令從 Terraform 0.13 開始引入。

terraform providers mirror 指令下載目前程式碼所需的 Provider 並且將其拷貝到本機檔案系統的一個目錄下。

一般情況下,terraform init 會在初始化目前工作目錄時自動從 registry 下載所需的 Provider。有時 Terraform 會工作在無法執行該操作的環境下,例如無法存取 registry 的區域網路內。這時可以透過配置 Provider 鏡像儲存來使得在這樣的環境下 Terraform 可以從本機插件鏡像儲存中取得插件。

terraform providers mirror 指令可以自動填入準備用以作為本機插件鏡像儲存的目錄。

1.6.15.1.1.1. 用法

terraform providers mirror [options] \

target-dir 參數是必填的。Terraform 會自動在目標目錄下建立起插件鏡像儲存所需的檔案結構,填入包含插件檔案的 .zip 檔案。

Terraform 同時會產生一些包含了合法的網路鏡像協定回應的 .json 索引文件,如果你把填滿的資料夾上傳到一個靜態站點,那就能夠得到一個靜態的網路插件鏡像儲存服務。Terraform 在使用本機文件鏡像儲存時會忽略這些鏡像文件,因為使用本機文件鏡像時資料夾本身的資訊更為權威。

此指令支援如下可選參數:

  • -platform=OS_ARCH:選擇建構鏡像的目標平台。預設情況下,Terraform 會使用目前運行 Terraform 的平台。可以反覆聲明該參數以建立多目標平台插件鏡像

目標平台必須包含作業系統以及 CPU 架構。例如:linux_amd64 代表運行在 AMD64 或 X86_64 CPU之上的 Linux 系統。

你可以針對已建置的鏡像資料夾重新執行 terraform providers mirror 來新增外掛程式。例如,你可以透過傳入新的 -platform 參數來新增目標平台的插件,Terraform 會下載新平台插件同時保留原先的插件,將二者合併存儲,並更新索引檔。


1.6.15.2.1. terraform providers schema

terraform providers schema 指令被用來列印目前程式碼所使用的 Provider 的架構。Provider 架構包含了該Provider 本身的參數訊息,以及所提供的 resource、data 的架構資訊。

1.6.15.2.1.1. 用法

terraform providers schema [options]

可選參數為:

  • -json:用機器可讀的 JSON 格式列印架構

請注意,目前 -json 參數是必填的,未來該指令將允許使用其他參數。


1.6.16.1. refresh

terraform refresh 指令將實際存在的基礎設施物件的狀態同步到狀態檔案中所記錄的物件狀態。它可以用來偵測真實狀態與記錄狀態之間的漂移並更新狀態檔。

警告!!!該命令已在最新版本 Terraform 中被廢棄,因為該命令的預設行為在當前使用者錯誤配置了使用的雲端平台令牌時會引發對狀態檔案錯誤的變更。

該指令並不會修改基礎設施對象,只修改狀態檔。如果狀態文件改變,將有可能在下次執行 plan 或 apply 時引發變更計畫。

1.6.16.1.1. 用法

terraform refresh [options] [dir]

該命令本質上是以下命令的別名,具有完全相同的效果:

terraform apply -refresh-only -auto-approve

因此,該命令支援所有 terraform apply 所支援的參數,除了它不接受一個現存的變更計劃文件,不允許選擇 "refresh only" 之外的模式,並且始終應用選項 -auto-approve

主動使用 refresh 是很危險的,因為如果當前使用者錯誤配置了使用的 Provider 的令牌,那麼 Terraform 會錯誤地以為當前狀態檔案中記錄的所有資源都被刪除了,隨即從狀態檔案中無預警地刪除所有相關記錄。

作為替代我們建議使用以下命令來取得相同的效果,同時可以在修改狀態文件之前預覽即將對其作出的修改:

terraform apply -refresh-only

此指令將會在互動介面中提示使用者偵測到的變更,並提示使用者確認執行。

terraform applyterraform plan 指令的 -refresh-only 選項是從 Terraform v0.15.4 版本開始被引進的。對更早的版本,使用者只能直接使用 terraform refresh 指令,同時要小心本篇警告過的危險副作用。盡可能避免明確使用 terraform refresh 命令,Terraform 在執行 terraform planterraform apply 命令時都會自動執行刷新狀態的操作以產生變更計劃,盡可能依賴該機制來維持狀態檔案的同步。


1.6.17.1. show

terraform show 指令從狀態檔或是變更排程檔列印人類可讀的輸出資訊。這可以用來檢查變更計劃以確定所有操作都是預期的,或審查目前的狀態文件。

可以透過新增-json參數輸出機器可讀的JSON格式輸出。

需要注意的是,使用 -json 輸出時所有標記為 sensitive 的敏感資料都會以明文形式被輸出。

1.6.17.1.1. JSON 輸出

可以使用 terraform show -json 指令列印 JSON 格式的狀態資訊。

如果指定了一個變更計畫文件,terraform show -json 會以 JSON 格式記錄變更計畫、配置以及目前狀態。

1.6.17.1.2. 用法

terraform show [options] [path]

你可以用 path 參數指定一個狀態檔或是變更計畫檔。如果沒有給定 path,那麼就會使用目前工作目錄對應的狀態檔。

此命令支援以下參數:

  • -no-color:與 apply 類似,不再贅述
  • -json:以 JSON 格式輸出

原簡體中文教程連結: Introduction.《Terraform入門教程》


上一篇
Day22-【入門教程】graph, import, init, output, plan
下一篇
Day24-【入門教程】state(list, mv, pull, push, replace-provider, rm, show)
系列文
Terraform 繁體中文25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言