全部產品
Search
文件中心

:Terraform 概覽

更新時間:Aug 22, 2025

介紹 Terraform 的優勢、工作步驟以及阿里雲 Provider 的使用方式

概覽

Terraform 是 Hashicorp 開源的一款基礎設施即代碼 (IaC) 的工具,可讓您以代碼化的方式定義和管理雲基礎設施。Terraform 提供了“Provider”的外掛程式機制,每個 Provider 面向一個獨立的服務提供者的外掛程式,可讓您與不同的雲端服務供應商通過 API 與其進行互動,進而實現對不同雲基礎設施資源的自動化管理。您可以使用面向阿里雲的 Terraform Provider 來定義和管理阿里雲的基礎設施。

如需瞭解更多,詳見Provider 介紹

使用 Terraform 的優勢

使用 Terraform 定義和管理阿里雲基礎設施具有以下優勢:

  • 通用性高

    Terraform 是配置和自動化管理阿里雲基礎設施最常用工具。您可以使用 Terraform Alibaba Cloud Provider 以聲明式的文法和工具來配置和管理阿里雲的資源。目前阿里雲 Provider 已支援對上百款雲產品和若干種資源類型的定義。

  • 複用性高

    Terraform 可讓您按照不同情境的需求定義基礎設施的最終狀態,並通過對同一份設定檔的多次部署實現可重現的開發、測試和生產環境。

  • 誤操作頻率低

    Terraform 在執行操作前會產生執行計畫,以此來預覽和 Review 即將要變更的基礎設施配置,避免在通過 Terraform 修改基礎設施時出現意外情況。

  • 架構標準化

    Terraform 可以讓您以標準化模組的形式實現對可重複使用的通用代碼的封裝和打包,以此提供用於建立雲資源架構的標準介面。模組的引用,在通過提高架構可讀性簡化專案的同時,協助團隊以更易讀的模組形式組織基礎設施。

  • 狀態一致性

    Terraform 會將設定檔中定義的基礎設施的實際狀態記錄到狀態檔案中,並持續地跟蹤部署中的所有資源。

使用 Terraform

Terraform 是使用面向配置的聲明性文法來編寫要定義的基礎設施。使用此文法,您可以在 Terraform 設定檔中為基礎設施定義自己期望的最終狀態,然後基於此設定檔,通過 Terraform CLI 來實現對所定義的基礎設施的建立和持續管理。

以下是 Terraform 的工作步驟:

  1. 在 Terraform 設定檔中描述您要定義的阿里雲基礎設施。

  2. 運行 terraform init命令,自動下載 Terraform Alibaba Cloud Provider 以支援對基礎設施定義的解析和後續阿里雲 API 的調用。

  3. 運行 terraform plan命令,以檢查基礎設施定義的正確性並產生執行計畫。您可以通過查看計劃預覽定義好的基礎設施狀態並根據需要進行修改。

  4. 運行 terraform apply命令,以執行以下操作:

    • 基於執行計畫,Terraform Alibaba Cloud Provider 調用相應的阿里雲 OpenAPI,以完成對基礎設施的建立和管理。

    • 建立一個 Terraform 狀態檔案,該狀態檔案是設定檔中的所定義的基礎設施資源與實際基礎設施資源的 JSON 格式映射。Terraform 儲存此檔案來瞭解基礎設施的最新狀態,並確定何時建立、更新和銷毀基礎設施資源。

  5. 之後,當您繼續運行terraform apply時,Terraform 會使用狀態檔案中的映射將基礎設施的實際狀態與設定檔內容進行比較,並根據需要進行建立、更新或者銷毀:

    • 如果狀態檔案中不存在設定檔中所定義的資來源物件,則 Terraform 會建立該資來源物件。

    • 如果狀態檔案中存在設定檔中所定義的資來源物件,但其屬性值與設定檔中的不一致,則 Terraform 會以設定檔中的為主更新該資源,以使其與設定檔中的定義相匹配。

    • 如果狀態檔案中存在設定檔中所定義的資來源物件,並且該資來源物件與設定檔中的定義相一致,則 Terraform 將保持不變,不對資源做任何操作。

    • 如果狀態檔案中的某個資來源物件在設定檔中沒有找到相應的定義,則 Terraform 將銷毀該資來源物件,並在成功銷毀後從狀態檔案中移除。

更多 Terraform 使用細節,詳見Provider 使用

阿里雲 Provider

阿里雲提供的 Terraform Alibaba Cloud Provider(alicloud)可讓您定義和管理阿里雲的基礎設施資源,在使用該 Provider 之前,需要瞭解以下基本資料:

  1. Source 來源

    因歷史發展原因,目前阿里雲 Provider 存在兩個 source 來源,但這兩個 source 來源對應同一個 Provider 代碼倉庫,因此功能上沒有任何差異:

    1. aliyun/alicloud:阿里雲官方維護的 Terraform Alibaba Cloud Provider,推薦大家使用。

    2. hashicorp/alicloud:歷史上是由 Terraform 社區維護的 Terraform Alibaba Cloud Provider,後來轉移為aliyun/alicloud,但依然保留hashicorp/alicloud的聲明和定義方式,因此在使用 hashicorp/alicloud時將會遇到如下的提示資訊:

      ╷
      │ Warning: Additional provider information from registry
      │ 
      │ The remote registry returned warnings for registry.terraform.io/hashicorp/alicloud:
      │ - For users on Terraform 0.13 or greater, this provider has moved to aliyun/alicloud. Please update your source in required_providers.
      ╵

      也正是因為歷史遺留問題,當使用 Terraform Module 的時候,terraform init 命令依然會預設下載hashicorp/alicloud,並且在執行 terraform plan 和 terraform apply 會預設載入hashicorp/alicloud的配置。因此,當使用 Terraform Module 的時候,先保持使用hashicorp/alicloud

  2. 版本

    阿里雲上的 Terraform Provider 版本使用語義化版本(Semantic Versioning)的命名方式,其格式是:<major>.<minor>.<patch>,即以點號.串連的三位非負整數,如 1.220.0。每一位版本號碼的含義如下:

    1. <major>:主要版本號,即大版本升級號。當迭代到主要版本號時,意味著 Provider 中所包含的資源和功能特性發生了巨大變化,包括但不限於依賴包的升級、棄用資源及資源屬性的移除、資源屬性類型和預設值的變更等,通常不相容上一個主要版本號。當前阿里雲的 Terraform Provider 主要版本號還處於 V1(1.xx.xx),因此每一個新的版本都具備向前相容,同時所有的版本支援 Terraform 自身的所有版本,您可以放心使用。

    2. <minor>:次版本號碼,即小版本升級號。當我們在 Provider 中新增資源(Resource)或者資料來源( DataSource)時將改動次版本號碼,但每次改動都是向前相容的,這也意味著我們不會直接刪除某個資源、資源屬性或者修改資源屬性類型等。必要的時候,我們會將其標記為棄用(Deprecated),然後在下一個大版本號碼中將其徹底刪除。

    3. <patch>:修訂編號,即功能修複號。當因為某個現有資源(Resource)或者資料來源( DataSource)新增功能或者修複某個功能問題或者完善文檔內容時,我們將只改動修訂編號。

  3. 文檔

    Terraform Registry:由 Terraform 社區維護,Terraform Provider 新版本發布後會自動更新,預設顯示最新 Provider 版本的內容,可通過切換版本號碼查看歷史版本的內容。

  4. 下載來源

    當運行terraform init自動下載阿里雲上的 Terraform Provider 時,總共有兩個下載來源:

    1. Hashicorp Releases:Hashicorp 官方統一提供的下載源,包含了所有 Hashicorp 產品及生態外掛程式包,阿里雲的 Terraform Provider 也在其中,這也是預設的下載源。

    2. 阿里雲鏡像站:阿里雲官方提供的下載源,只包含阿里雲上 Terraform Provider 的各個版本包。