

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Terraform 入門：AWS CDK 和 AWS CloudFormation 專家指南
<a name="introduction"></a>

*Steven Guggenheimer，Amazon Web Services (AWS)*

*2024 年 3 月* ([文件歷史記錄](doc-history.md))

如果您只佈建雲端資源的經驗位於 領域，則除了 [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)和 之外 AWS，使用基礎設施即程式碼 (IaC) 工具的經驗可能有限[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。事實上，類似的工具，例如 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 術語
<a name="cf-nshort-and-terraform-terminology"></a>

比較 Terraform 與 AWS CDK 和 CloudFormation 時，由於用於描述它們的術語不一致，因此協調 IaC 核心概念可能很困難。以下是這些術語以及本指南將如何參考它們：
+ **堆疊*** – **堆疊*是部署到 CI/CD 管道的 IaC，可作為單一單位追蹤*。 *雖然此術語在 CloudFormation 中很常見，但 Terraform 實際上不會使用此術語。Terraform 堆疊是已部署的根模組及其所有子模組。不過，為了避免混淆術語*模組*，本指南使用術語*堆疊*來描述這兩個工具的單一部署。
+ **狀態** - *狀態*是 IaC 部署堆疊內所有目前追蹤的資源及其目前組態*。*如 [了解 Terraform 狀態和後端](states-and-backends.md)節所述，Terraform 使用的術語*狀態*超過 CloudFormation。這是因為維護狀態在 Terraform 中更可見，但追蹤和更新狀態對 CloudFormation 同樣重要。
+ **IaC 檔案 – ** *IaC 檔案*是包含基礎設施作為程式碼 (IaC) 語言的單一檔案*。*CloudFormation 將單一 CloudFormation 檔案稱為*範本*。不過，Terraform 中的[範本](https://developer.hashicorp.com/terraform/language/expressions/strings#string-templates)和[範本檔案](https://developer.hashicorp.com/terraform/language/functions/templatefile)完全不同。相當於 Terraform 中的 CloudFormation 範本稱為*組態檔案*。為了將本指南中的混淆降至最低， 術語*檔案*或 *IaC 檔案*用於參考 CloudFormation 範本和 Terraform 組態檔案。

下表比較用於 CloudFormation 和 Terraform 的術語。此資料表的目的是顯示相似性。這些不是one-to-one比較。CloudFormation 和 Terraform 之間的每個概念至少略有不同。本指南相關章節將詳細說明概念。


****  

| CloudFormation 術語 | Terraform 詞彙 | 本指南的章節 | 
| --- | --- | --- | 
| CDK 介面 （例如 IBucket) | 資料來源 | [了解地形資料來源](data-sources.md) | 
| 變更集 | 計畫 | [了解地形模塊](modules.md) | 
| 條件函數 | 條件式運算式 | [了解 Terraform 函數、表達式和中繼引數](functions-expressions.md) | 
| DependsOn 屬性 | depends\_on 中繼引數 | [了解 Terraform 函數、表達式和中繼引數](functions-expressions.md) | 
| 內建函數 | 函數 | [了解 Terraform 函數、表達式和中繼引數](functions-expressions.md) | 
| 模組 | 模組 | [了解地形模塊](modules.md) | 
| 輸出 | 輸出值 | [了解 Terraform 變數、本機值和輸出](variables-locals-outputs.md) | 
| Parameters | Variables | [了解 Terraform 變數、本機值和輸出](variables-locals-outputs.md) | 
| 登錄檔 | 供應商 | [了解地形提供者提供者](providers.md) | 
| 範本 | 組態檔案 | 全部 | 