在瞭解了 IaC 的基礎知識之後,本文將幫您深入理解什麼是Terraform。
什麼是 Terraform
Terraform 是 HashiCorp 公司建立的一個開源的“基礎設施即代碼”的工具,它允許您使用聲明式的設定檔來定義阿里雲資源。
Terraform 所管理的資源,即包括如虛擬機器、容器、儲存和網路等基礎類組件,也包括如安全性群組規則、DNS 條目、權限原則等配置類組件,還可以包括某些 SaaS 類功能。
Terraform 以一種簡單的、人類易讀的語言 — HashiCorp 配置語言(HCL)將基礎設施表達為代碼。Terraform 讀取代碼設定檔,並提供變更的執行計畫,通過對這個執行計畫的預覽、確認和執行來完成基礎設施的最終建立和管理。
阿里雲提供了面向阿里雲資源的 Terraform Provider,營運人員可以通過 Provider 定義和編寫阿里雲上的資源,並自動化地建立這些資源。
Terraform 的特點
Terraform 的特點包括:
多雲和多 API 支援:除了阿里雲,Terraform還支援所有主要的雲端服務供應商,並且支援像 GitHub 和Kubernetes 等的 API 服務。
開放的核心架構:提供從自託管到全託管的三個不同版本,包括企業級的支援。
龐大的社區:提供了一個開放的註冊中心,支援包括阿里雲在內的所有 Provider 和 Module 的線上註冊和管理。
基礎設施的配置:提供的是對基礎設施資源層面生命週期(建立、修改、刪除、查看)的管理,而不是基礎設施系統層面的組態管理,如啟動服務、安裝依賴、安裝應用程式和運行更新等
阿里雲上的 Terraform 提供了如下的能力:
資源配置:您可以使用 Terraform 定義和配置阿里雲資源,即您可以使用資源塊(resource)來定義諸如虛擬機器、網路、儲存和防火牆等基礎設施資源。
資源關聯建立:您可以建立資源之間明確的依賴關係,以便在建立另一個資源之後才能建立另一個特定的資源。
標準化的模組:您可以通過建立可重用的模組來標準化特定資源的建立方式。阿里雲也提供了一些標準化的模組,您可以直接引用。
IaC 工作流程
接下來,讓我們看看標準的 IaC 工作流程。
範圍確定
在進入 Terraform 工作流程之前,您必須確定專案或者應用應該建立哪些資源。例如,對於常見的兩層架構,你需要一個 Web 服務器池用於構建資料庫。因此,在“範圍確定”階段,您需要確定所需的阿里雲資源,並對它們之間如何相連進行規劃。
模板編寫
Terraform工作流程以編寫模板開始,您編寫想要建立的基礎設施的代碼,然後程式碼群組織在不同的設定檔中,比如 main.tf,variables.tf,tfvars 等
初始化
接下來就是初始化,在這個階段會自動安裝代碼所需的任何外掛程式或模組。您運行 terraform init 命令,它將初始化Terraform 工作目錄並安裝阿里雲 Terraform Provider。
預覽
在預覽階段,您需要運行 terraform plan 命令。該命令提供了按照模板編寫階段所定義的資源配置來建立、更改或銷毀資源的執行計畫,並且在將該計劃應用到您的阿里雲基礎設施之前,您可以對其進行審查,以確保符合您的預期。
執行
在您審查了執行計畫中描述的資源配置後,執行 terraform apply 命令,它將建立實際的基礎設施或者對已經存在的基礎設施資源進行變更或者銷毀,執行的同時將會建立相對應的狀態檔案或者對已有的狀態檔案變更。
隨著本教程的不斷深入,您將更加詳細地探索 Terraform 工作流程。
使用情境
現在讓我們來看一些常見的 Terraform 使用情境。
管理基礎設施
Terraform 被用來管理基礎設施,它採用的是不可變的方法,意味著您編寫的代碼可以降低升級或修改服務和基礎設施所涉及的複雜度。
追蹤變更
Terraform 還被用來追蹤基礎設施的變更。每當一個新的變更被預覽或者被執行的時候,Terraform 都會要求您在修改基礎設施狀態之前進行確認。Terraform 在建立基礎設施時,會自動產生一個狀態檔案。狀態檔案反映了您的基礎設施的目前狀態,並顯示了配置模板中所修改的阿里雲資源的數量和類型。
自動變更
Terraform 被用來自動化變更。由於模板設定檔是聲明式的,您不需要編寫詳細的指令來構建基礎設施,只需定義最終狀態,Terraform 將自動管理依賴關係並完成資源的建立。
標準化配置模板
Terraform 也被用來標準化配置。您可以使用自訂模組或者 Terraform 註冊中心中所提供的公用模組來提升效率並實現最佳實務。Terraform 還支援自動化的強制執行策略,以實現對團隊可以配置和使用的資源類型進行約束和限制。