Terraform 由 HashiCorp 開發,是一種廣泛使用的基礎架構即程式碼(IaC)工具,能讓使用者使用高階配置語言來定義和配置軟體基礎架構。隨著企業組織逐漸採用雲端基礎架構,Terraform 已成為管理及自動化基礎架構資源部署的必要條件。Terraform 的核心命令之一是 terraform 計畫,這是部署流程中的關鍵步驟,可確保基礎架構的變更安全、可預測且高效。
在這篇文章中,我們將深入探討此指令、它的功能,以及如何解讀 Terraform 配置的輸出。
什麼是 Terraform 計劃?
Terraform 計劃命令是 Terraform 工作流程中的重要部分,它可作為 Terraform 對您的基礎架構所做的更改的乾式運行或預覽。它將基礎架構的目前狀態與 Terraform 配置檔案中定義的所需狀態進行比較,並顯示 Terraform 將採取的特定行動來彌補差距。這包括資源的新增、刪除和修改,例如建立新的虛擬機器、擴充現有資料庫,或移除未使用的儲存磁碟區。
Terraform 計劃的優勢
能夠預覽您的配置代碼將對您的基礎架構造成什麼改變,在許多方面是有利的,包括:
- 透明度:Terraform 計畫提供近期變更的詳細總覽,清楚說明您的基礎架構中將建立、修改或刪除的內容。這種透明度有助於將錯誤降至最低,並確保參與部署流程的每個人都在同一頁上。
- 風險降低:透過事先預覽變更,使用者可以在潛在問題中斷服務之前先找出並加以解決。Terraform 計畫可以幫助發現資源衝突(例如建立名稱重複的 VM)、缺少相依性(例如,需要未設定的特定安全群組的資料庫),或因配置檔案中的錯別字而進行意外修改。
- 協作:Terraform 計畫與 Git 等版本控制系統無縫整合,促進團隊合作。與團隊成員分享計畫成果,即可在規範承諾的脈絡下審查變更,並在變更實施前提高透明度和責任感。
- 效率:Terraform 計畫可協助使用者有條理地規劃和執行基礎架構變更。分析計畫可讓您在套用變更之前,找出潛在的瓶頸或效率低下。
- 安全性:Terraform 計畫作為安全網,可讓您在變更應用於生產基礎架構之前,先行審查並驗證變更。此防護功能有助於防止意外修改,並確保雲端環境的穩定性和可靠性。
如何執行 Terraform 計劃
若要執行 terraform 計劃,請先確定您的本機已安裝 Terraform。您可以從 HashiCorp 官方網站下載並安裝適當的版本。
在執行計劃指令之前,您需要在工作目錄中建立一個名為 main.tf 的基本 Terraform 組態檔案。以下是在雲端供應商中建立虛擬機器資源的簡易配置範例:
# Configure the cloud provider (replace with your provider details)
provider "aws" {
region = "us-east-1"
}
# Define a virtual machine resource
resource "aws_instance" "my_vm" {
ami = "ami-0f78f7e824d9499e0" # Replace with the desired AMI ID
instance_type = "t2.micro"
}
1. 初始化 Terraform 目錄
導覽至包含 main.tf 檔案的工作目錄,並在您的人機介面中執行以下指令:
$ terraform init
此指令會初始化 Terraform 目錄,下載任何設定中提到的必要外掛程式或模組,並準備使用 Terraform 的環境。
2. 執行 Terraform 計畫
初始化完成後,請執行以下命令以產生執行計畫:
$ terraform plan
此指令會分析您的 Terraform 配置,並將其與基礎架構的目前狀態(若有)進行比較。接著會顯示詳細的計畫,概述 Terraform 為達到設定中定義的所需狀態所採取的行動。計畫通常會顯示建立、修改或刪除的資源
3. 儲存計畫輸出
如果您想儲存計劃以供未來參考,或與團隊成員分享,您可以選擇使用計劃指令的 -out 標誌。例如,以下命令會將計畫儲存至名為 plan.tfplan 的檔案:
$ terraform plan -out=plan.tfplan
terraform plan 命令僅預覽變更。它不會對您的基礎架構進行任何修改。在審查並核准計劃後,您可以使用 $ terraform apply 指令來執行計劃變更。
了解並分析 Terraform 計畫輸出
Terraform 計畫輸出通常分為幾個部分,每個部分都提供對規劃行動的寶貴見解:
資源行動
本節列出 Terraform 打算針對您的基礎架構資源執行的具體行動。這些行動分為三種主要類型:
- 建立(+):此符號表示 Terraform 將根據您的配置建立新的資源。
- 閱讀(~):此符號表示 Terraform 將讀取現有資源的狀態,以確定是否需要進行任何變更。此符號在計劃輸出中較不頻繁,因為 Terraform 通常會在計劃階段決定所需的行動。
- 刪除(-):此符號表示 Terraform 將刪除您配置中不再定義的現有資源。
資源詳情
本節提供各項資源的深度資訊,這些資源將受計劃影響。以下是您通常可以找到的詳細資訊:
- 資源類型:這指明了 Terraform 管理的基礎架構資源類型(例如 aws_instance、azurerm_resource_group)。
- 資源名稱:這會識別在您的 Terraform 配置中指派給資源的唯一名稱。
預定變更
本節詳細說明將套用至資源的特定變更。對於正在建立的資源(以 + 表示),它將列出將定義的屬性及其對應值。對於要修改的資源,將顯示對現有屬性的變更。
概要
計畫輸出通常會以摘要部分作結,提供計畫行動的高層級概述。本摘要一般會將資源總數細分為以下類別:
要新增:將要建立的新資源數量
要變更 :要修改的現有資源數量
銷毀:將刪除的現有資源數量
當您使用我們之前建立的樣品配置運行 terraform 計劃時,您將獲得類似於以下的結果:
# $ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.my_vm will be created
resource "aws_instance" "my_vm" {
+ ami = "ami-0f78f7e824d9499e0"
+ instance_type = "t2.micro"
+ tags = {
+ Name = "sample-tag"
}
}
1. 資源行動:第一行表示 Terraform 將在此計劃期間執行建立行動 (+)。
2. 資源詳細資料:後續章節將深入探討單一資源 aws_instance.my_vm 的細節。這表示 Terraform 會在您的 AWS 環境中建立一個名為 my_vm 的新 AWS EC2 執行個體。 AWS 詳細資料進一步指定了 AMI ID(ami-0f78f7e824d9499e0)、執行個體類型 (t2.micro ),以及 Terraform 將套用至新執行個體的標籤(名稱 = "樣本標籤 ")。
3. 摘要(隱含):雖然此範例並未明確顯示摘要,但摘要可能會顯示在更複雜的計畫輸出結束時,表示要建立的資源總數。
使用 Terraform 計畫的最佳做法
套用基礎架構變更前,terraform 計畫指令就是您的安全網。以下是最大化效益的一些基本做法:
仔細檢查資源變更:
- 專注於標示為建立(+)或刪除(-)的資源。
- 驗證新資源的屬性值是否與您的意圖一致(例如 AMI ID、儲存大小)。
- 再次檢查對現有資源的修改是否正確。
發現潛在問題:
- 尋找資源衝突(例如重複的名稱、缺少相依性)。
- 確保所有必要的相依性(如安全組)都已定義。
- 小心刪除可能中斷服務的意外資源。
利用輸出:
- 驗證規劃的變更是否符合您的基礎架構目標。
- 考慮與資源修改相關的潛在成本影響。您也可以分享計劃輸出,以供團隊審查和溝通。
結論
Terraform 計畫是 Terraform 工作流程中強大的工具。它提供了一種安全、透明的方法,在應用前預覽和驗證基礎架構變更。透過了解並有效使用 Terraform 計畫,您可以確保部署的效率、可預測性,並且沒有意外的後果。
Pure Storage 為您的 Terraform 部署提供了最佳的持久區塊式資料儲存解決方案。Portworx® 為您的所有容器和 Kubernetes Terraform 工作負載提供全面的資料平台。有了 Pure Cloud Block Store 的幫助,您可以在雲端運行任何資料庫或容器工作負載,就像地端基礎架構一樣。