Skip to Content

什麼是 Terraform State?

手動配置和管理基礎架構可能是一個複雜且容易出錯的流程。值得慶幸的是,像 Terraform 這樣的工具已經出現,能夠使用基礎架構作為程式碼 (IaC)來簡化基礎架構的管理。 

然而,為了充分利用 Terraform 的全部潛力,了解 Terraform 狀態至關重要。這種狀態在確保基礎架構配置一致,並實現跨團隊有效協作方面發揮著重要作用。 

本文將探討什麼是 Terraform 狀態、其重要性,以及如何有效管理與操作狀態檔案。

什麼是 Terraform State?

Terraform 狀態是 Terraform 功能的關鍵要素。它可作為您使用 Terraform 管理的基礎架構的持久記錄,基本上是您的配置檔案(.tf)中定義的資源與其真實世界的對應圖。

Terraform State 如何運作

Terraform 會將狀態資訊儲存在檔案中,通常預設名稱為 terraform.tfstate。每當您執行 terraform apply 指令時,此檔案會自動更新。以下是流程的細項:

  1. 擷取目前狀態:在應用 terraform 期間,Terraform 會讀取基礎架構並擷取其目前狀態,包括資源屬性和配置。
  2. 比較州:Terraform 會將此擷取狀態與您的 Terraform 組態檔案中定義的所需狀態進行比較。
  3. 識別變更:Terraform 根據前一步驟的比較結果,找出想要與目前狀態之間的差異。
  4. 套用更新:若有差異,Terraform 會套用必要的更新,使基礎架構與您定義的配置一致。

使用 Terraform State 的優勢和重要性

維持一致且精確的 Terraform 狀態對於確保可靠的基礎架構管理至關重要。原因如下:

  • 減少配置漂移:隨著時間的推移,基礎架構配置可能會因為手動變更或外部因素而偏離預期狀態。最新的 Terraform 狀態可做為單一事實來源,反映您基礎架構的實際配置。
  • 可靠的規劃與執行:Terraform 仰賴州檔案來規劃並應用基礎架構的變更。準確狀態可確保 Terraform 清楚掌握您現有的基礎架構。如此一來,它就能產生更可靠的執行計畫,並避免在變更應用過程中發生錯誤。
  • 團隊協作:Terraform State 促進基礎架構專案的協作。藉由將狀態檔案儲存在中央位置,例如 HashiCorp Cloud Terraform Registry 等遠端後端,或是雲端儲存服務,多位團隊成員可以同時處理相同的基礎架構設定,並促進集中式基礎架構管理。
  • 適用於大型基礎架構的可擴充性:隨著基礎架構的複雜性不斷增加,在本地管理 Terraform 狀態可能會變得繁瑣。將狀態儲存在遠端後端可讓您更有效地擴展 Terraform。遠端後端提供版本控制和存取控制等功能,讓大型和地理分散式基礎架構更容易管理狀態。
  • 強化的資源追蹤:Terraform 狀態會保留所有配置資源及其配置的詳細記錄。此綜合日誌讓您更輕鬆地管理和更新基礎架構。想像一下,手動追蹤數百個資源及其配置有多困難。Terraform 狀態提供所有基礎架構細節的中央儲存庫,可免除此負擔。
  • 高效率的變更偵測:Terraform 狀態讓 Terraform 能夠智慧地偵測基礎架構的變化。當您執行 terraform apply 時,它會比較所需的狀態與記錄的狀態,並只將更新套用至實際變更的資源。這可為您節省時間,並避免不必要的基礎架構修改。
  • 簡化相依性管理:Terraform 狀態會追蹤資源之間的相依性。這一點至關重要,因為建立或更新資源的順序有時可能很重要。舉例來說,網路伺服器可能仰賴先建立的資料庫。Terraform 狀態會考量這些相依性,確保以正確的順序套用更新。

管理 Terraform 狀態

Terraform 提供儲存狀態檔案的彈性。您可以在開發人員的機器上選擇本機儲存設備,或利用遠端後端進行協作和擴充性。

  • 本地後端:本機後端是預設選項,不需要額外的設定。狀態檔案儲存在本機檔案系統中,通常在工作目錄中命名為 terraform.tfstate。這種方法非常容易使用,適合小型個人專案或個人發展。然而,它並不適合協作或大型基礎架構。
  • 遠端後端:遠端後端將狀態檔案儲存在集中位置,通常是 Amazon S3、Google Cloud Storage 或 Azure Blob Storage 等雲端儲存服務。遠端後端可讓多位團隊成員同時存取和修改基礎架構設定。這非常適合大型和地理分佈的基礎架構,提供版本控制和災害復原等功能。

設定 Terraform 狀態

具體的配置步驟因所選的遠端後端供應商而異。以下是將 Terraform 設定為使用 AWS S3 作為遠端後端的範例:

# Configure Terraform to use S3 as the remote backend
 terraform {
   backend "s3" {
   bucket = "my-terraform-state"  # Name of the S3 bucket to store the state file
   key    = "path/to/my/statefile"  # Path within the bucket to store the state file
   region = "us-west-2"            # AWS region where the S3 bucket is located
   }
 }

組織和版本化狀態檔案的最佳做法

請考慮以下最佳做法,以維護易於管理的狀態檔案:

  • 區隔:依環境(如開發、預備階段、生產)或專案區分狀態檔案,有助於維護組織,並在處理多個環境或專案時防止衝突。舉例來說,在開發與生產環境中,請考慮使用名為 terraform.tfstate.devterraform.tfstate.prod 的個別狀態檔案。
  • 版本控制系統(VCS):Git 等版本控制系統可讓您追蹤狀態檔案隨時間的變化。如此可在必要時復原至先前的配置,並透過提供變更稽核軌跡來促進協作。
  • 加密:加密狀態檔案,尤其是在使用遠端後端時,可在未經授權存取時保護存取金鑰或密碼等敏感資訊。大多數雲端儲存供應商為靜態資料提供伺服器端加密。您也可以探索用戶端加密工具,在將狀態檔案上傳至遠端後端之前,先將檔案加密。

操縱 Terraform 狀態

Terraform 提供與 Terraform 狀態互動的強大指令。這些指令可讓您管理現有的基礎架構、重新組織您的狀態檔案,以獲得更佳的可維護性,並從 Terraform 的控制中移除資源。

以下是一些常用的 Terraform 狀態指令:

  1. terraform 匯入:此命令對於在 Terraform 的管理下整合現有基礎架構元素(資源)至關重要。它讓 Terraform 能夠識別並追蹤已存在於雲端環境中的實體資源。這對於將現有基礎架構遷移至 Terraform 或管理最初在 Terraform 之外建立的資源非常有用。
  2. terraform 狀態:此核心指令提供各種子指令,可操作您的狀態檔案。其中一些包括:
    • terraform 狀態清單:列出在目前狀態檔案中追蹤的所有資源。這有助於概覽 Terraform 管理的資源。
    • terraform 狀態清單:列出在目前狀態檔案中追蹤的所有資源。這有助於概覽 Terraform 管理的資源。
    • terraform 狀態清單:列出在目前狀態檔案中追蹤的所有資源。這有助於概覽 Terraform 管理的資源。
    • 特拉福州展: <resource_name>顯示狀態檔案中儲存的特定資源詳細資訊,包括其屬性和組態。
    • terraform 狀態 rm: <resource_name>從狀態檔案移除資源。這不會破壞雲端中的實際基礎架構資源,只會將其從 Terraform 的管理中移除。

狀態操縱的常見情境

以下是您需要操作 Terraform 狀態的一些實際情境,以及一些指令範例,以協助達成:

  1. 新增現有資源使用 terraform 匯入功能,在 Terraform 的控制下提供現有的基礎架構資源。在將現有基礎架構遷移至 Terraform 或管理最初在 Terraform 之外配置的資源時,此功能特別有用。例如,以下命令會將 ID 為 i-1234567890abcdef0 的現有 AWS EC2 執行個體匯入 Terraform,並為其指派邏輯名稱範例:
  2. terraform import aws_instance.example i-1234567890abcdef0
  3. 移動資源:使用 terraform state mv 重新組織您的狀態檔案,以獲得更佳的可維護性。當您想要在模組內將相關資源分組,或單純地改善狀態檔案的整體結構時,這會很有幫助。例如,以下命令會將 aws_instance.example resources 移至名為 new_module 的新模組:
  4. terraform state mv aws_instance.example

    module.new_module.aws_instance.example
  5. 移除資源:使用 terraform state rm 將資源從 Terraform 的管理中移除,而不會破壞雲端中的實際資源。這對於您想要停止管理 Terraform 資源,但將資源本身保留在雲端環境中的情況非常有用。

結論

Terraform 狀態是 Terraform 基礎架構管理能力的基礎要素。透過了解並有效管理 Terraform 狀態,您可以確保基礎架構的一致性、可靠性和可擴充性。無論是使用本地或遠端後端,Pure Storage Portworx® 都能為您的容器工作負載提供使用 Kubernetes 的最佳持久性儲存解決方案。利用 Terraform 配置,無論 Terraform 狀態檔案的變更為何,都能確保資料始終儲存。

03/2025
Rancher Kubernetes Engine 2 on VMware with Portworx
Gain consistent experience across public cloud, on- premises, hybrid cloud, or edge architecture with Rancher Kubernetes Engine (RKE2) on VMware with Portworx.
參考架構
33 頁

瀏覽重要資訊與活動

Pure//Accelerate® 2025
報名體驗 Pure//Accelerate。

獲得啟發、向創新者學習,並升等技能,邁向資料成功。

查看最新動態
Pure//Accelerate 巡迴特展
我們將前往您的鄰近城市。查詢地點。

體驗世界上最先進的資料儲存平台與企業級資料雲端的強大功效——為您量身訂作。

立即報名
影片
觀看影片:企業級資料雲端的價值。

Charlie Giancarlo 討論管理為何管理資料才是未來趨勢,而非儲存設備。發掘整合式做法如何革新企業級 IT 作業。

立即觀看
資源
傳統儲存裝置無法驅動未來。

現代化工作負載需求必須達到 AI 級速度、安全性與規模。您的技術棧準備好了嗎?

進行評估
您的瀏覽器已不受支援!

較舊版的瀏覽器通常存在安全風險。為讓您使用我們網站時得到最佳體驗,請更新為這些最新瀏覽器其中一個。