

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

# 使用 AWS CloudFormation 作為 IaC 工具
<a name="cloudformation"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)是使 AWS 服務 用範本檔案來自動佈建 AWS 資源的。您可以建立描述您要部署的所有 AWS 資源的範本，並為您 CloudFormation 佈建和設定這些資源。

CloudFormation 模板是通過使用 JSON 或 YAML 編寫的。堆 CloudFormation*棧*是模板中定義的資源的實現。您可以透過 AWS 管理主控台、以程式設計方式透過 CloudFormation SDK 或 AWS Command Line Interface (AWS CLI) 管理 CloudFormation 堆疊。如需[有關如何 CloudFormation 運作的詳細資訊，請參閱 CloudFormation 文件中的[AWS CloudFormation 概念](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html)和如何運 AWS CloudFormation 作](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html)。

**使用的優點 CloudFormation：**
+ CloudFormation [變更集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-concepts.html#cfn-concepts-change-sets)可讓您在部署這些變更之前預覽執行中堆疊的變更。變*更集*會概述對現有堆疊中執行中資源的提議變更。這可協助您在部署前識別衝突或意外後果。例如，如果您變更 Amazon 關聯式資料庫服務 (Amazon RDS) 資料庫執行個體的名稱， CloudFormation 將會建立新資料庫並刪除舊資料庫。除非您已經備份，否則您將丟失舊數據庫中的數據。如果您產生變更集，您會看到您的變更會導致資料庫被取代，而且您可以在更新堆疊之前進行相應的規劃。
+ 如果在部署變更集期間發生錯誤，會自動 CloudFormation 復原至上次已知的工作狀態。
+ 您可以使用 CloudFormation [堆疊集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)在多個 AWS 帳戶 和 AWS 區域.
+ 使用下列命名空間中 CloudFormation 的資源提供者無須額外付費：AWS:: \$1、Alexa:: \$1 和 Custom:: \$1。在這些情況下，您只需為佈建的 AWS 資源付費，就像您已手動佈建這些資源一樣。
+ CloudFormation 為您管理狀態。這表示 CloudFormation 會依 CloudFormation 範本中的定義， AWS 進行基礎服務呼叫，以佈建和設定您的資源。
+ CloudFormation 提供用於偵測和修復組態偏移的工具。如需詳細資訊，請參閱 CloudFormation 文件中的[偵測堆疊和資源的未受管理組態變](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)更。
+ 您可以使用 CloudFormation 建立[自訂資源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)。您可以在建立、更新或刪除堆疊時 CloudFormation 執行的範本中撰寫自訂佈建邏輯。
+ CloudFormation 支援使用[CloudFormation 登錄](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry.html)建立第三方應用程式資源的模型、佈建和管理。
+ CloudFormation 支持將[現有資源導入](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resource-import.html) CloudFormation 管理。

**使用的缺點 CloudFormation：**
+ 如果您不熟悉 JSON 或 YAML 語法，則可能需要一些習慣。JSON 不被設計為人類可讀，它不允許您進行內聯註釋。YAML 允許您發表評論，並且更容易閱讀。但是，它的語法基於製表符和空格，因此可以很容易地使縮進錯誤。
+ CloudFormation 不支援多雲端部署。
+ 您必須使用較高層級的實作，例如 AWS Cloud Development Kit (AWS CDK)，來建立可重複使用的建構和其他模組化程式碼。