Terraform 設定和指令碼
在此單元中,我們會討論 Terraform 設定和指令碼。
為什麼是 Terraform?
作為基礎結構管理員,您需要用來佈建和管理 Azure 基礎結構的工具。 您也想在描述 Azure 資源拓撲的設定檔中,使用 [基礎結構即程式碼]。
HashiCorp Terraform 非常適合在雲端服務提供者間部署基礎結構。 它可為開發人員提供一致的工具來管理每個基礎結構定義。
自動基礎結構管理
Terraform 的範本型設定檔讓您能夠以可重複且可預測的方式定義、佈建和設定 Azure 資源。 這項自動化提供幾項優點:
- 它可在部署和管理基礎結構時,降低人為錯誤的可能性。
- 它會多次部署相同的範本,以建立相同的開發、測試和實際執行環境。
- 可依需求建立開發和測試環境,降低建立這些環境的成本。
可先瞭解基礎結構的變更,然後再套用變更
當資源拓撲變得越來越複雜時,可能很難瞭解基礎結構變更的意義和影響。
藉由使用 Terraform,您可以在套用基礎結構變更之前,先進行驗證和預覽。 透過瞭解建議的變更以及其在開發過程早期造成的效果,小組成員便能更有效率地共同作業。
Terraform 設定檔
設定檔會產生執行計畫,以及計畫將如何達成所需的狀態。 Terraform 接著可以建立所述的基礎結構。 當設定變更時,Terraform 可以判斷變更的內容,然後建立增量執行計畫。
Terraform 設定檔會使用自己的設定語言,類似於 YAML,其設計目的是要允許基礎結構的描述。
您可以使用 HashiCorp Configuration Language (HCL) 來建立設定檔。 宣告式的 HCL 是描述預期的目標,而不是達到該目標所需的步驟。 HCL 語法可讓您指定雲端服務提供者 (例如 Azure) 和構成雲端基礎結構的元素。
設定檔會儲存為副檔名為 .tf 的純文字檔。 畫面如下:
- main.tf:(必要) 定義主要結構,透過呼叫模組或直接部署完整的基礎結構
- outputs.tf:識別 Terraform 模組的每個傳回值
- variables.tf:定義 main.tf 中的變數 (不論是否為必要)
模組
您可以將 Terraform 資源分組為模組,以建立更大的設定單位。 這些模組是一組儲存在單一目錄中的設定檔。 簡單的設定是由具有一或多個 .tf 檔案的單一目錄所組成。
模組提供許多優點。 例如,模組:
- 協助組織您的專案。
- 封裝複雜度。
- 可讓您重複使用一般工作。
- 提供一致性,並確保您遵循的是良好的做法。
main.tf 檔案
您的 main.tf 檔案包含您模組的主要設定詳細資料。 這個檔案通常稱為 Terraform plan。 您的 Terraform plan 會指定所需的基礎結構資源。 您可以任意命名這個檔案,但通常會命名為 main.tf。
Terraform 工作流程
Terraform 推薦其自動化的核心「初始化、規劃及套用」工作流程。 此工作流程會在最新與更新的 Git 提取要求上執行所有 Terraform CI/CD 動作。
此工作流程的核心動作包括:
- 初始化:使用 Terraform 設定檔將工作目錄初始化
- 計劃:產生變更資源以符合目前設定的計畫
- 套用:套用規劃中所描述的變更
州/省
Terraform 可透過 [狀態] 來瞭解要新增、更新或刪除哪些 Azure 資源。
Terraform 會使用狀態來建立規劃內容,並對您的基礎結構進行變更。 在任何作業之前,Terraform 會進行重新整理,以使用真正的基礎結構來更新狀態。
在預設情況下,狀態儲存在名為 terraform.tfstate 的本機文字檔中。 Terraform 會使用您在模組中定義的工作流程動作來管理此檔案。
您也可以從遠端儲存狀態,這種方法更適合小組環境。 如需遠端管理狀態的詳細資訊,請參閱此課程模組結尾的<摘要>單元。
下一步
在下一個單元中,我們將討論如何使用 Terraform 搭配 GitHub Actions 或 Azure Pipelines,來佈建及部署您的應用程式。