AWS CloudFormation

2025年3月17日 | 阅读11分钟

如果您只需要在 AWS 上部署少量服务或应用程序,您会很快发现手动设置每个服务都非常繁琐且耗时。

更不用说,手动配置每个 AWS 资源会让您犯错误或引入不一致的风险大大增加。

隆重推出 AWS CloudFormation

CloudFormation 是 AWS 的一种基础设施自动化平台,可以更快速、更高效、更安全地大规模部署 AWS 资源。

本文将概述 AWS CloudFormation,包括它的工作原理、优势,以及如何使用控制台、CloudFormation Designer 和 AWS 命令行来创建和部署 CloudFormation 模板。

什么是 AWS CloudFormation?

AWS CloudFormation 是一项 AWS 服务,它使用模板文件来自动化 AWS 资源的设置。

它也可以被描述为一个基础设施自动化或基础设施即代码(IAC)工具和云自动化解决方案,因为它自动化了 AWS CloudFormation 支持上的各种基础设施即服务(IaaS)产品的设置和部署。您可以使用 CloudFormation 自动化运行最受欢迎的 AWS 服务(如 EC2 计算服务、S3 存储服务和 IAM 服务以配置访问控制)的工作负载配置。

您还可以将 CloudFormation 模板应用于满足特定用例的 AWS 服务,例如地面站、AWS 卫星管理解决方案。

总而言之,如果一项服务在 AWS 上运行,那么几乎可以肯定您可以使用 CloudFormation 来自动化其配置和部署。

值得注意的是,CloudFormation 并不是配置和部署 AWS 服务唯一的方法。您*可以*通过 AWS 命令行界面、API 或 Web 控制台手动处理这些过程。

手动配置是团队在开始使用 AWS 并学习如何部署服务时通常采取的方法。然而,随着他们扩展其环境的规模,许多团队很快就会意识到他们需要像 CloudFormation 这样的解决方案来使部署过程更快、更一致。

AWS CloudFormation

CloudFormation 的优势

CloudFormation 和其他与 AWS 兼容的 IaC 工具提供了一系列优势,可以使云服务部署和管理更快、更高效。

部署速度

当您创建 CloudFormation 模板来管理 AWS 资源的配置和部署方式时,您几乎可以立即使用一个模板部署相同资源的多个实例。如果您通过在 CLI 上运行命令或在 AWS 控制台中按按钮来手动设置每个部署,这种方法比您实际能获得的速度要快得多。

当然,前提是您需要花时间设置 CloudFormation 模板。但是,假设您多次重复相同类型的部署。在这种情况下,创建可以重复用于每个部署的 CloudFormation 模板,总的来说会比手动配置每个模板要快得多。

向上扩展

即使您最初不期望部署相同 AWS 资源的多个实例,CloudFormation 模板也很有用,因为它们确保您可以在需要时快速扩展环境。有了 CloudFormation 模板,您会发现,如果您的应用程序流量增加,并且您需要升级环境,您可以随时添加更多虚拟机实例或存储空间。需要。

或者,当需求下降并且您想减少开支以节省成本时,您可以将一些部署下线,同时保持在需求增加时能够通过 CloudFormation 快速重新部署它们的能力。

服务集成

一个 CloudFormation 模板可以管理单个服务或资源,以及多个资源的部署。这种可管理性意味着您可以使用 CloudFormation 来集成各种 AWS 云服务。例如,您可以编写一个模板来设置 AWS Virtual Private Cloud (VPC) 内的 EC2 虚拟机,或部署一个 S3 存储桶并使用 IAM 服务配置访问控制。

通过单个模板管理多个服务 AWS 在您构建完整的云环境时集成服务。

一致性

当您使用 CloudFormation 模板定义和部署 AWS 资源时,您可以一遍又一遍地应用完全相同的配置。通过这种方式,CloudFormation 确保您的应用程序和服务将保持一致和统一,无论您创建多少个实例。

另一种方法是通过手动设置每个资源,会引入工作工程师可能对不同实例应用不同设置的风险,从而导致不兼容。反过来,管理您的环境将更具挑战性,因为一些资源将显示与其他资源不同,即使它们执行相同的基本功能。例如,您可能会有不同的 EC2 实例托管相同应用程序的副本,或者为同一服务使用不同的 IAM 访问控制。这种差异将使公平地管理资源变得困难。

安全性

同样,虽然 CloudFormation 本身不是一个安全工具,但它可以提高您 AWS 环境的整体安全性,降低可能导致泄露的疏忽或人为错误的风险。只要您将 CloudFormation 模板设计为安全的,您就不必担心部署资源的工程师会忘记启用关键访问控制,例如,或者将数据置于不受限制的状态。这将使您暴露于公共访问。

易于更新

除了部署新资源,您还可以使用 CloudFormation 模板对现有资源进行更改。

此功能简化了例如为一组 EC2 实例添加更多存储或更改访问控制规则的过程。

审计和变更管理

当您使用 CloudFormation 管理您的基础设施时,您可以跟踪您已应用的模板以及它们随时间的变化。CloudFormation 中的变更跟踪意味着您无需通过查看日志重新创建更新时间表,即可确定您的 AWS 服务和资源如何随时间发生变化。

CloudFormation 替代方案

CloudFormation 是 Amazon 自有的 IaC 解决方案,但它并不是您可以在 AWS 云中使用以获得上述优势的唯一云自动化或 IaC 工具。您的团队还可以使用与 AWS 兼容的第三方 IaC 平台,例如 HashiCorp Terraform 或 Ansible。

选择 CloudFormation 的主要优势是,大多数第三方 IaC 工具都可以配置资源在各种公共云上运行,而不仅仅是 AWS。

如果您同时使用多个云——换句话说,如果您在 AWS 上运行一些工作负载,在 Microsoft Azure 上运行另一些工作负载——第三方 IaC 工具平台会很方便,因为它为您提供了相同的配置管理工具。允许使用。

另一方面,作为 AWS 的原生 IaC 平台,CloudFormation 提供了与 AWS Cloud 最深入的集成,包括 Designer 等功能,允许您直接在 AWS 网站上创建和修改 CloudFormation 模板。

CloudFormation 还提供了高度的保证,即使 Amazon 对其服务进行更改,您的模板也将始终与 AWS 服务兼容。如果 Amazon 更新其一项服务,第三方 IaC 工具很可能会停止与其一起工作,至少要等到工具开发者有时间跟上这些更改。

这并不是一个常见问题,因为 Amazon 不经常对其云服务进行重大更改。新服务可能需要一些时间才能在 CloudFormation 中可用,但第三方更新仍然需要更长时间。如果您考虑使用 CloudFormation 或替代的基础设施自动化和云自动化解决方案,这都不是一个重要因素。

CloudFormation 模板术语和概念

了解 CloudFormation 模板如何构建资源、变量和函数的底层基本概念很有帮助。

模板

CloudFormation 模板只是一个以特定方式格式化的文本文件(有关格式详细信息,请参阅下文),它定义了 AWS 服务或资源的配置和部署方式。

Stack

Stack 是 AWS 用于指代一组 AWS 资源(例如 EC2 虚拟机、S3 存储和 IAM 访问控制)的术语,您可以使用单个模板将它们一起管理。

CloudFormation 支持使用 JSON 或 YAML 格式化的模板,这些是结构化文本文件最常用的文件格式。大多数其他 IaC 工具使用与 Kubernetes 等平台相同的格式化语言。

参数

如果您需要在每次部署中应用唯一的设置,您可以使用参数来实现。参数允许您为 CloudFormation 在运行时应用的每次部署定义自定义值。

条件

您还可以通过设置条件来精细调整部署,这些条件允许您定义条件规则来精确控制每次部署的进行方式。

变更集

如果您想使用 CloudFormation 更新部署,您可以更新用于创建部署的模板。然后,您可以创建一个变更集,该变更集在进行更改之前总结了来自更新模板的更改。

任务

有几种方法可以将数据输入 CloudFormation 模板,其中参数是主要的。但这些参数可能在部署时未知。CloudFormation 函数允许 CloudFormation 设计者从当前 CloudFormation 中部署的资源或 AWS 账户中的外部源检索数据。Refs 广泛用于在模板内部引用其他资源,如下例所示。例如,它创建了一个早先在模板中创建的 EIP。

如何创建 CloudFormation 模板

有两种方法可以创建 CloudFormation 模板:

  • 使用预先存在的模板作为基础,或
  • 从头开始编写一个全新的模板

在大多数情况下,前者将更快、更方便,尤其如果您是 CloudFormation 新手并且有一个简单的部署配置。如果您有一个极其复杂的部署,或者需要处理 AWS 现有模板库中未充分表示的特定 AWS 资源,则通常只有创建新模板才合理。

1:预先存在的模板

要使用预先存在的模板作为部署的基础,请浏览 AWS 模板集合以找到最适合您需求的模板。例如,如果您想部署一个 EC2 实例并为其配置存储,一个名为“具有临时驱动器的 Amazon EC2 实例”的模板将是一个很好的起点。

选择模板后,您可以将其下载到您的计算机,在本地文本编辑器中进行编辑,或在 AWS CloudFormation Designer 中打开它。AWS CloudFormation Designer 是一个在线工具,与 AWS CloudFormation 配合使用,用于创建和修改模板。Designer 提供可视化和拖放功能,使您无需编写大量代码即可轻松创建部署(尽管如果您需要实现比基本功能更多的功能,您应该会编写一些代码)。

此模板将部署一个弹性负载均衡器和一个仅从负载均衡器接收流量的自动扩展组。

这是 CloudFormation 模板设计器的视图

AWS CloudFormation

2:新模板

如果您选择创建新模板,您可以使用任何文本编辑器来完成。通过 CloudFormation Designer 的可视化功能,您可以快速创建新的部署规则,因为它支持新模板和先前创建的模板。

如何部署 CloudFormation 模板

准备好模板后,您可以开始部署过程,在您的实际 AWS 环境中创建模板中定义的资源。

有几种部署 CloudFormation 模板的方法。您采取的方法将取决于您创建模板的方式以及您偏好的 AWS 界面部分。

AWS 控制台:如果您的模板是存储在本地计算机上的文本文件,最简单的部署方法是登录 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation 并单击“创建新堆栈”。控制台将引导您命名模板并上传本地计算机上的模板文件。完成步骤并查看配置后,单击“创建”按钮即可部署您的模板。

从 CloudFormation Designer:如果您在 CloudFormation Designer 中创建模板,您可以直接单击“创建堆栈”按钮进行创建,按照屏幕上的说明进行操作,然后在准备好应用模板时按下“创建”。即可直接部署。

AWS CLI:您可以使用 AWS CloudFormation 部署命令通过 AWS CLI 工具部署模板。使用命令行参数确定模板的存储位置(通常,您会先将其上传到 S3,然后将 CLI 指向该文件)以及您想要配置的其他选项。AWS 文档提供了 CLI 部署的完整详细信息。

更新 CloudFormation 堆栈

有两种基本方法可以对您使用 CloudFormation 模板部署的堆栈进行更改。

第一种方法是更新相关模板,然后立即使用上述部署方法之一部署更新后的模板。AWS 将此方法称为直接更新。这是更新部署最快速、最直接的方法,它没有机会在更改实施前查看您想要进行的更改的效果。

第二种方法提供了更多的控制权,并能够预览更改生效前的影响,即创建变更集并使用它进行更新。您可以通过在 CloudFormation 控制台中选择“堆栈”,然后选择“堆栈操作”来创建变更集。然后,您可以选择要更新的模板,控制台将引导您完成修改模板、审查更改并应用它们的步骤。您还可以使用 create-change-set 命令在 AWS CLI 上创建变更集。

高级 CloudFormation

CloudFormation 中有许多高级功能。这些功能是 CloudFormation 中的辅助脚本,它们扩展了 CloudFormation,以便设计者可以执行 CloudFormation 之外的脚本。

  • cfn-init:cfn-init 辅助脚本读取 AWS::CloudFormation::Init 键的元数据,并根据接收到的元数据和 CloudFormation 解析的元数据进行操作。它还可以安装软件包、将文件写入磁盘,以及在 EC2 实例上启用或禁用服务。
  • cfn-signal:设计者将 cfn-signal 与 CreationPolicy 或 WaitCondition 一起使用,作为信号来同步堆栈中的资源,当先决条件就绪时。这允许对资源执行更新或任务,并允许 CloudFormation 继续创建堆栈中的资源。
  • Retrieve metadata:用于从 CloudFormation 堆栈检索元数据。
  • cfn-hup:用于检查元数据更新并在检测到更改时执行自定义挂钩,例如脚本和文件的更新。
  • AWS SAM 和 eksctl 等服务在后端使用 CloudFormation 来促进无服务器和 Kubernetes 集群的部署。

结论

手动设置和部署 AWS 资源是对您团队时间的低效利用。这种配置也增加了疏忽和不一致的风险,导致管理问题和安全风险。此外,它使得快速更新或扩展资源变得困难。

通过利用 CloudFormation 等 IaC 工具,您的团队可以简化 AWS 部署流程。您可以定义资源配置一次,然后根据需要部署任意次数。您还可以通过变更快速且可预测地更新资源,并且可以使用 CloudFormation 模板来跟踪您如何配置资源以及它们如何随时间工作。