

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用 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*栈*是模板中定义的资源的实现。您可以通过、通过 CloudFormation SDK 以编程方式管理 CloudFormation 堆栈 AWS 管理控制台，也可以通过 AWS Command Line Interface ()AWS CLI来管理堆栈。有关工作 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 Relational Database Service (Amazon RDS) 数据库实例的名称，则 CloudFormation 会创建一个新数据库并删除旧数据库。除非您已经备份了旧数据库中的数据，否则您将丢失这些数据。如果您生成更改集，则会看到您的更改将导致数据库被替换，并且您将能够在更新堆栈之前进行相应的计划。
+ 如果在部署更改集的过程中出现错误，则会自动回 CloudFormation 滚到上次已知的工作状态。
+ 您可以使用 CloudFormation [堆栈集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)跨多个 AWS 账户 和部署资源 AWS 区域。
+ 使用以下命名空间中的资源 CloudFormation 提供者无需支付额外费用：AWS:: \$1、Alexa:: \$1 和自定义:: \$1。在这些情况下，您只需为预置的 AWS 资源付费，就像手动配置资源一样。
+ CloudFormation 为你管理状态。这意味着 CloudFormation 可以调用底层服务 AWS 来配置和配置 CloudFormation 模板中定义的资源。
+ CloudFormation 提供用于检测和修复配置偏差的工具。有关更多信息，请参阅文档中的[检测堆栈和资源的非托管配置更改](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)。 CloudFormation 
+ 您可以使用 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)