

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

# 使用地形作為 IaC 工具 AWS 雲端
<a name="terraform"></a>

[HashiCorp Terraform](https://developer.hashicorp.com/terraform) 是一種基礎架構即程式碼 (IaC) 工具，可協助您管理雲端基礎架構。使用 Terraform，您可以在組態檔案中定義雲端和內部部署資源，以進行版本化、重複使用和共用。然後，您可以使用一致的工作流程，在其整個生命週期中佈建和管理所有基礎結構。

開發人員使用稱為 [Terraform](https://developer.hashicorp.com/terraform/language) 語言的高級配置語言。地形語言的本機低級語法是[HashiCorp配置語言（](https://developer.hashicorp.com/terraform/language/syntax/configuration)HCL）。Terraform 語言旨在讓人類易於閱讀和寫入。您可以使用 Terraform 語言來描述所需的雲端或內部部署基礎結構的結束狀態。Terraform 接著會產生達到該結束狀態的計畫，然後您執行規劃來佈建基礎結構。

**使用地形的優點：**
+ 地形是平台不可知論者。您可以將其與任何雲服務提供商一起使用。您可以在其他許多雲端提供者之間設定、測試 AWS 和部署基礎結構。如果您的組織使用多個雲端供應商，Terraform 可以是單一、統一且一致的解決方案來管理雲端基礎架構。如需有關多雲端支援的詳細資訊，請參閱 Terraform 網站上的[多雲端佈建](https://www.terraform.io/use-cases/multi-cloud-deployment)。
+ 地形是無代理的。它不需要在受管理的基礎架構上安裝任何軟件。
+ Terraform 模塊是重用代碼並堅持*不要重複自己（DRY）*原則的強大方法。例如，您可能有一個應用程式的特定組態，其中包含 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體、Amazon Elastic Block Store (Amazon EBS) 磁碟區，以及其他邏輯分組的資源。如果您需要建立此組態或應用程式的多個副本，您可以將資源封裝到 Terraform 模組中，並建立模組的多個執行個體，而不必多次複製整個程式碼。這些模組可協助您組織、封裝及重複使用組態。它們還提供了一致性並確保最佳實踐。
+ Terraform 能夠[檢測和管理基礎架構中的漂移](https://www.hashicorp.com/blog/detecting-and-managing-drift-with-terraform)（Terraform 博客文章）。例如，如果 Terraform 管理的資源在 Terraform 之外進行修改，您可以使用 Terraform CLI 偵測漂移並將其還原到所需的狀態。

**使用地形的缺點：**
+ 可能無法使用與任何雲端供應商相關的新功能或新資源的 Support 援。
+ 地形不會自動管理您的狀態。 AWS CloudFormation依預設，它存放在本機檔案中，但您也可以將其遠端存放在 [Amazon S3 儲存貯](https://developer.hashicorp.com/terraform/language/settings/backends/s3)體或透過 [Terraform](https://developer.hashicorp.com/terraform/enterprise) 企業版。
+ Terraform 狀態可以包含敏感資料，例如資料庫密碼，這些資料庫密碼可能會造成安全性考量。最佳做法是加密狀態檔案、從遠端儲存、在其上啟用檔案版本控制，以及使用最少權限進行讀取和寫入作業。如需詳細資訊，請參閱[使用 AWS Secrets Manager 和 HashiCorp Terraform 保護敏感資料](https://docs.aws.amazon.com/prescriptive-guidance/latest/secure-sensitive-data-secrets-manager-terraform/introduction.html)。
+ [2023 年 8 月，哈希科普宣布將不再根據 Mozilla 公共許可證將其作為開源許可。](https://www.mozilla.org/en-US/MPL/)相反，它現在根據[業務來源許可證獲得許可](https://github.com/hashicorp/terraform/blob/b145fbcaadf0fa7d0e7040eac641d9aef2a26433/LICENSE)。