全部產品
Search
文件中心

Terraform:基本概念

更新時間:Aug 09, 2025

Terraform 工作流程包括模板編寫、初始化、預覽、執行四部分。本文主要介紹模板編寫,即 Terraform 配置和 Hashicorp 配置語言(Hashicorp Configuration Language,HCL)。

Terraform 目錄

我們從編寫階段開始,在這裡您會在 .tf 檔案中編寫 Terraform 代碼。 在編寫代碼之前,首先建立一個 Terraform 配置的目錄。Terraform 配置是一個完整的 Terraform 語言文檔,它告訴Terraform 如何管理給定的基礎設施集合。Terraform 配置儲存在 .tf 副檔名的檔案中。 一個 Terraform 配置目錄可以由多個檔案和目錄組成。一個Terraform配置包括:一個根模組和可選的多個子模組樹。

  • 根模組

    根模組也被稱為根設定檔,是運行 Terraform 命令的工作目錄。在該目錄中,Terraform 將尋找所有 .tf 檔案,並使用它們來建立執行計畫。您可以在單個根設定檔中編寫所有的資源和其他代碼結構(如入參變數,出參定義,供應商等),但最佳實務是按照邏輯將資源拆分到不同的設定檔中。

  • 子模組

    子模組是可選的,每個子模組可以是出於對某類複用功能的抽象,也可以是出於對根模組複雜邏輯的簡化。根模組通過對子模組的引用來降低根模組的編寫複雜度,提升複用性和可讀性。

//根模組
-- main.tf
--providers.tf 
-- variables.tf 
-- outputs.tf
//子模組
-- -- -- servers/
-- -- -- --main.tf
-- -- -- --variables.tf
-- -- -- --outputs.tf

每個模組通常會包含如下幾種設定檔:

  • 資源設定檔(main.tf)

    聲明所要管理的基礎設施資源及其期望的狀態,通常命名為 main.tf,也可以按照資源類型或者產品名稱或者情境進行自訂,如 ecs.tf,network.tf,database.tf等

  • 供應商設定檔(provider.tf)

    聲明當前模組使用到的供應商的名稱、版本以及認證方式,如 aliyun/alicloud,hashicorp/random 等

  • 入參設定檔(variables.tf)

    聲明當前模組使用到的變數,以便在執行 Terraform 命令的時候,可以通過傳入不同的變數值來提升模組的靈活性

  • 出參設定檔(outputs.tf)

    聲明期望當前模組中的資源在完成建立後輸出的變數值,比如執行個體 ID,IP 位址等

HCL 語言

在知道如何建立目錄結構後,接下來將介紹用於編寫 Terraform 配置的語言 HCL。

HCL 用於建立和管理基於 API 的資源,主要是雲上的資源。資源是基礎設施對象的統稱,可以是基礎設施實體,如虛擬機器、磁碟、容器和網路等,也可以是服務於基礎設施的邏輯單元,如存取控制規則,安全性群組規則等。Terraform 使用 HCL 在你的阿里雲環境中定義資源,建立和管理這些資源以及其所依賴的其他資源。

HCL是一種配置語言,儘管和程式設計語言有一些共性,但它不是程式設計語言。它是基於 JSON 的變種,對人和機器更友好。HCL 的簡單性使得 Terraform 對開發人員來說很容易理解和掌握。

HCL 包括了有限的基本元素,如變數、資源、輸出和模組。它不包括任何傳統的編程語句或控制迴圈,而是通過賦值、count 和內建函數來表達相關的資源定義邏輯。

HCL 文法

下面顯示了通用的 HCL 文法,主要包括塊(Block),參數(Argument),標識符(Identifier),運算式(Expression),注釋等幾部分。

<Block Type> "<Block Label>" "‹Block Label>" (
# Block Body
<Identifier> = <Value/Expression> # Argument
}
resource "alicloud_vpc" "myvpc" {
  vpc_name       = "the-first-vpc"
  cidr_block = "172.16.0.0/12"
}
  • 塊(Block)

    塊是一系列屬於某種類型的程式碼,比如資源(resource)、變數(variable)、輸出(output)、模組(module)等。塊可以是簡單的類型,也可以是嵌套另一種塊類型的複雜類型。

  • 參數(Argument)

    參數是塊的一部分,用於給名稱分配值。塊包含必填的參數和可選的參數。

  • 標識符(Identifier) 標識符是參數、塊類型或任何 Terraform 特定結構的名稱。標識符可以包括字母、底線、連字號和數字,但不能以數字開頭。

  • 運算式(Expression)

    可以用來在代碼塊中給標識符分配一個值。這些運算式可以是簡單類型的值,如字串,數字等,也可以是複雜類型的值,如對象,數組,Map 等。

  • 注釋

    注釋以#開始和結束,用於單行注釋。除此之外,//也用於單行注釋,/**/用於多行注釋。

值得注意的是,HCL 本質上是聲明式的,意味著模板中定義的塊代表了基礎設施的最終狀態。因此,塊或檔案的順序並不重要。

HCL的設計目的是使基礎設施編碼既易於人類閱讀,也便於機器處理。通過使用 HCL,Terraform 允許您以高度抽象的方式聲明性地定義雲資源,而無需關心資源建立和管理的具體步驟。這種方法既簡化了雲基礎設施的管理,又使開發人員更專註於應用邏輯和服務的構建。

在實際應用中,良好的 Terraform 配置應該遵循一定的最佳實務,如適當地組織檔案、使用模組化方法來複用代碼、以及通過參數化使配置更加靈活。此外,瞭解Terraform的狀態管理和如何管理多環境配置也是十分重要的。