本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Terraform 入門:AWS CDK 和 AWS CloudFormation 專家指南
Steven Guggenheimer,Amazon Web Services (AWS)
2024 年 3 月 (文件歷史記錄)
如果您只佈建雲端資源的經驗位於 領域,則除了 AWS Cloud Development Kit (AWS CDK)和 之外 AWS,使用基礎設施即程式碼 (IaC) 工具的經驗可能有限AWS CloudFormation。事實上,類似的工具,例如 Hashicorp Terraform,對您來說可能完全不熟悉。不過,您越深入雲端之旅,就越容易遇到 Terraform。這將取決於您的優勢,以便熟悉其核心概念。
雖然 Terraform、 AWS CDK和 CloudFormation 達成類似的目標並共享許多核心概念,但有一些差異。如果您是第一次接近 Terraform,您可能尚未準備好處理這些差異。畢竟, AWS CDK 和 CloudFormation 堆疊都是以 為基礎 AWS 帳戶,因此,它們與他們維護的大部分資源有直接關係。Terraform 並非以任何單一雲端提供者的環境為基礎。這賦予它支援各種不同供應商的靈活性,但必須維護來自遠端位置的資源。
本指南有助於解密 Terraform 背後的核心概念,以協助您處理任何 IaC 挑戰。它著重於 Terraform 如何使用提供者、模組和狀態檔案等概念來佈建資源。它也會將 Terraform 概念與 AWS CDK 和 CloudFormation 執行類似操作的方式進行比較。
注意
使用程式設計編碼語言, AWS CDK 協助開發人員部署 CloudFormation 堆疊。執行 之後cdk synth,您的程式碼會轉換為 CloudFormation 範本。從那時開始, AWS CDK 和 CloudFormation 之間的程序完全相同。為了簡潔起見,本指南通常參考 CloudFormation 術語中的 AWS IaC 程序,但比較與 相同 AWS CDK。
CloudFormation 和 Terraform 術語
比較 Terraform 與 AWS CDK 和 CloudFormation 時,由於用於描述它們的術語不一致,因此協調 IaC 核心概念可能很困難。以下是這些術語以及本指南將如何參考它們:
-
堆疊 – 堆疊是部署到 CI/CD 管道的 IaC,可作為單一單位追蹤。 雖然此術語在 CloudFormation 中很常見,但 Terraform 實際上不會使用此術語。Terraform 堆疊是已部署的根模組及其所有子模組。不過,為了避免混淆術語模組,本指南使用術語堆疊來描述這兩個工具的單一部署。
-
狀態 - 狀態是 IaC 部署堆疊內所有目前追蹤的資源及其目前組態。如 了解 Terraform 狀態和後端節所述,Terraform 使用的術語狀態超過 CloudFormation。這是因為維護狀態在 Terraform 中更可見,但追蹤和更新狀態對 CloudFormation 同樣重要。
-
IaC 檔案 – IaC 檔案是包含基礎設施作為程式碼 (IaC) 語言的單一檔案。CloudFormation 將單一 CloudFormation 檔案稱為範本。不過,Terraform 中的範本
和範本檔案 完全不同。相當於 Terraform 中的 CloudFormation 範本稱為組態檔案。為了將本指南中的混淆降至最低, 術語檔案或 IaC 檔案用於參考 CloudFormation 範本和 Terraform 組態檔案。
下表比較用於 CloudFormation 和 Terraform 的術語。此資料表的目的是顯示相似性。這些不是one-to-one比較。CloudFormation 和 Terraform 之間的每個概念至少略有不同。本指南相關章節將詳細說明概念。
| CloudFormation 術語 | Terraform 詞彙 | 本指南的章節 |
|---|---|---|
| CDK 介面 (例如 IBucket) | 資料來源 | 了解地形資料來源 |
| 變更集 | 計畫 | 了解地形模塊 |
| 條件函數 | 條件式運算式 | 了解 Terraform 函數、表達式和中繼引數 |
DependsOn 屬性 |
depends_on 中繼引數 |
了解 Terraform 函數、表達式和中繼引數 |
| 內建函數 | 函數 | 了解 Terraform 函數、表達式和中繼引數 |
| 模組 | 模組 | 了解地形模塊 |
| 輸出 | 輸出值 | 了解 Terraform 變數、本機值和輸出 |
| Parameters | Variables | 了解 Terraform 變數、本機值和輸出 |
| 登錄檔 | 供應商 | 了解地形提供者 |
| 範本 | 組態檔案 | 全部 |