AWS CloudFormation 常见问题

一般性问题

AWS CloudFormation 是一种可让开发人员和企业轻松创建一系列相关的 AWS 和第三方资源,并以有序且可预测的方式进行预置和管理的服务。

开发人员可以采用简单的声明式风格来部署和更新计算、数据库以及许多其他资源,从而消除特定资源 API 的复杂性。AWS CloudFormation 旨在允许重复、可预测和安全地管理资源生命周期,同时支持自动回滚、自动状态管理以及跨账户和跨区域管理资源。最新的增强功能和选项允许使用多种方法来创建资源,包括使用 AWS CDK 进行高级语言编码、导入现有资源、检测配置偏差以及新的 Registry,该 Registry 可让您更轻松地创建继承 CloudFormation 许多核心优势的自定义类型。

这些服务的设计目的是使二者相辅相成。 AWS Elastic Beanstalk 提供了一个可在云中轻松部署和运行应用程序的环境。它与开发人员工具相集成,为您提供“一站式”的应用程序生命周期管理体验。如果应用程序工作负载可以作为 Elastic Beanstalk 工作负载进行管理,则您可以在创建和更新应用程序时享受更完善的一体化体验。Elastic Beanstalk 可以在后台使用 CloudFormation 创建和维护资源。如果您的应用程序要求获得更多的自定义权限,那么您可以根据 CloudFormation 提供的其他功能来控制您的工作负载。

AWS CloudFormation 是一种便捷的预置机制,支持种类广泛的 AWS 和第三方资源。它支持不同类型的应用程序的基础需求,如现有的企业级应用程序、旧式应用程序、使用各种 AWS 资源构建的应用程序,以及基于容器的解决方案(包括使用 AWS Elastic Beanstalk 构建而成的解决方案)。

AWS CloudFormation 支持 Elastic Beanstalk 应用程序环境,将其作为其中一种 AWS 资源类型。例如,这可使您创建和管理 AWS Elastic Beanstalk 托管的应用程序,以及用于存储应用程序数据的 RDS 数据库。还可向该组添加任何其他受支持的 AWS 资源。

CloudFormation 引入了四个新概念:模板是 JSON 或 YAML 声明性代码文件,其中介绍了部署应用程序需要的所有资源的预期状态。堆栈,运行管理模板中概述的资源组,并允许一起管理这些资源的状态和依赖关系。更改集,指由创建、更新或删除资源的堆栈操作执行的更改的预览。堆栈集,指的是由您一起管理的、可以对组进行复制的一组堆栈。

要查看受支持的 AWS 资源及其功能的完整列表,请访问文档发布历史记录中的“受支持的 AWS 服务”页面。

通过 AWS CloudFormation Registry 和 AWS CloudFormation 自定义资源能够管理其他 AWS 和第三方资源。

可以。CloudFormation 并不会阻碍您完全控制基础设施中的所有元素,您仍可以继续使用现有的任何 AWS 和第三方工具来管理您的 AWS 资源。但是,由于 CloudFormation 支持您使用其他规则、最佳实践和合规控制,我们建议您允许 CloudFormation 管理对资源的更改。这种可预测、可控的方法有助于您管理整个应用程序组合中成百上千的资源。

CloudFormation 模板是 JSON 或 YAML 格式的文本文件,由以下五种元素组成:

1.可选的模板参数列表(堆栈创建时提供的输入值)
2.可选的输出值列表(如指向 Web 应用程序的完整 URL)
3.可选的数据表列表,用于查询静态配置值(如 AMI 名称)
4.AWS 资源及其配置值的列表
5.模板文件格式版本号

创建堆栈时,模板参数可用于在运行时自定义模板的各个方面。例如,创建堆栈时,您可以将 Amazon RDS 数据库大小、Amazon EC2 实例类型、数据库和 Web 服务器端口号传输到 AWS CloudFormation。各个参数可以具有默认值和描述,也可标记为“NoEcho”,以便隐藏您在屏幕上以及 AWS CloudFormation 事件日志中输入的实际值。在创建 AWS CloudFormation 堆栈时,AWS 管理控制台将自动合成并显示一个弹出式对话表单,供您编辑参数值。

输出值可以非常方便地通过 AWS 管理控制台或命令行工具向用户显示堆栈的重要资源(如 Elastic Load Balancing 负载均衡器或 Amazon RDS 数据库的地址)。您可以通过简单函数来串接字符串参数以及与实际 AWS 资源关联的属性值。模板还可以利用 Registry 资源类型、您自己的自定义私有类型、您自己的宏以及从 AWS Secrets Manager 和 AWS System Manager 参数存储中检索配置参数。

您可以在模板中为 AWS 资源分配逻辑名称。创建堆栈时,AWS CloudFormation 会将逻辑名称与对应的实际 AWS 资源的名称绑定。实际资源名称是堆栈和逻辑资源名称的组合。这样就可以从一个模板创建多个堆栈,而不必担心 AWS 资源名称冲突。

虽然 AWS CloudFormation 允许您命名一些资源(如 Amazon S3 存储桶),但是它并不允许您命名全部资源。命名资源限制了模板的重复使用,并会引起资源因更新迭代产生的命名冲突。为了最大限度地减少这些问题的发生,CloudFormation 会根据每个案例的具体情况决定是否支持资源命名。

可以。AWS CloudFormation 提供了一组应用程序引导脚本,您只需在 CloudFormation 模板中进行描述,即可在 EC2 实例上安装资源包、文件和服务。有关详细信息和关于如何操作的说明,请参阅通过 AWS CloudFormation 引导应用程序

CloudFormation 也可以与 Systems Manager 相集成,以使用 Systems Manager 自动化文档来驱动和维护软件安装。

可以。AWS CloudFormation 可用于在 EC2 实例中引导 Chef Server 和 Chef Client 软件。有关详细信息和关于如何操作的说明,请参阅将 AWS CloudFormation 与 Chef 集成

可以。AWS CloudFormation 可用于在 EC2 实例中引导 Puppet Master 和 Puppet Client 软件。有关详细信息和关于如何操作的说明,请参阅“将 AWS CloudFormation 与 Puppet 集成”。

可以。CloudFormation 可以在 EC2 实例上引导 Terraform 引擎,您可以通过 Terraform 资源提供程序在堆栈中创建资源,从而利用堆栈状态管理、依赖关系、稳定和回滚。

可以。支持标记功能的 Amazon EC2 资源也可在 AWS 模板中进行标记。标记值可以引用模板参数、其他资源名称、资源属性值(如地址),或者由简单函数(如串接的字符串列表)计算而得到的值。CloudFormation 使用所属 CloudFormation 堆栈的名称自动标记 Amazon EBS 卷和 Amazon EC2 实例。

可以。您可以使用简单函数来串接字符串参数和 AWS 资源的属性值,并将它们传递到模板中的用户数据字段。请参阅我们的示例模板,进一步了解这些易用的函数。

默认情况下,启用“错误时自动回滚”功能。如果各项操作均成功,将指示 CloudFormation 创建或更新堆栈中的所有资源。如果任一操作有误,那么 CloudFormation 会将堆栈恢复到最后一个已知的稳定配置。例如,当您意外超过了 Elastic IP 地址的默认限值,或者无权访问要尝试运行的 EC2 AMI 时,就可以使用此功能。这一功能可以完全创建堆栈,或者使其恢复到完全未建状态,从而简化系统管理以及基于 CloudFormation 构建的分层式解决方案。

可以。CloudFormation 提供了 WaitCondition 资源,它可以起到屏障作用,在从您的应用程序或管理系统等外部资源收到完成信号前,阻止其他资源的创建。其他选项包括使用 AWS Lambda 函数创建自定义逻辑。

可以。CloudFormation 允许您在模板中定义资源的删除策略。您可以指定在删除 Amazon EBS 卷或 Amazon RDS 数据库实例前为它们创建快照。也可以指定在删除堆栈时应当保留某个资源,而不将其删除。如果要在删除堆栈时保留 Amazon S3 存储段,可以使用此功能。

可以。CloudFormation 支持创建 VPC、子网、网关、路由表和网络 ACL,还支持在 VPC 中创建弹性 IP、Amazon EC2 实例、EC2 安全组、Auto Scaling 组、Elastic Load Balancer、Amazon RDS 数据库实例和 Amazon RDS 安全组等资源。

可以。您可以使用 CloudFormation,以可控且可预测的方式修改和更新现有堆栈中的资源。通过使用模板来管理堆栈更改,您就可以对 AWS 基础设施应用版本控制,方法与对其中运行的软件应用版本控制一样。

是! 借助资源导入功能,您可以使用资源导入功能将现有资源引入 AWS CloudFormation 管理中。

入门

若要注册 CloudFormation,请单击 CloudFormation 产品页面上的创建免费账户。注册后,请参阅 CloudFormation 文档,其中包含了入门指南。

注册 CloudFormation 要求您在 AWS 上登记您的有效电话号码和电子邮件地址,以便我们在需要时联系您。验证您的电话号码只需要几分钟时间。注册过程中您会接到一个自动电话,然后您需要使用电话键盘输入 PIN 码。

了解如何启动 CloudFormation 最好的方法是仔细阅读技术文档中提供的入门指南。只需短短几分钟,您就能部署和使用我们提供的某个示例模板,这些模板演示如何创建运行 WordPress 等应用程序时所需的基础设施。还有其他各种来源的 CloudFormation 培训,包括第三方课程提供程序、网络教程和文章等。有关更多信息,请参阅 CloudFormation 资源

有。CloudFormation 提供了示例模板,您可以使用这些示例模板来试运行相关服务,并了解其功能。我们的示例模板演示了在遵循可用区冗余、扩展和警报最佳实践的基础上,互连和协同使用多种 AWS 资源的方法。您只需打开 AWS 管理控制台,单击“创建堆栈”,然后按照步骤选择和启动其中的一个示例即可使用我们的示例模板。模板创建后,您可以在控制台中选择堆栈并检查“模板”和“参数”选项卡,以查看用于创建各个堆栈的模板文件的详细信息。GitHub 上也提供了一些示例模板。

AWS CloudFormation Registry

AWS CloudFormation Registry 是一种托管服务,帮助您注册、使用和发现 AWS 和第三方资源类型。第三方资源类型在使用前必须注册,然后才能利用它们通过 AWS CloudFormation 模板预置资源。有关详细信息,请参阅我们文档中的使用 AWS CloudFormation 注册表

资源提供程序是一组资源类型,具有通过创建、读取、更新、删除和列出操作控制底层资源的规格和处理程序。您可以使用资源提供商通过 CloudFormation 对资源进行建模和预置。例如,AWS::EC2::Instance 就是一种来自 Amazon EC2 提供商的资源类型。您可以使用此类型,通过 CloudFormation 对 Amazon EC2 实例进行建模和预置。您可以使用 CloudFormation Registry 构建和使用资源提供程序,对第三方资源进行建模和预置,例如 SaaS 监控、团队生产力或资源代码管理资源。

AWS 与第三方资源提供商之间的差别是其来源。AWS 资源提供商由 Amazon 和 AWS 构建和维护,用于管理 AWS 资源和服务。例如,有三种 AWS 资源提供商可帮助您管理 Amazon DynamoDB、AWS Lambda 和 Amazon EC2 资源。这些提供商包含多种资源类型,例如 AWS::DynamoDB::Table、AWS::Lambda::Function 和 AWS::EC2::Instance。如需完整参考,请转到我们的文档。

第三方资源提供商由其他公司、组织或开发人员社区构建。它们可帮助您管理 AWS 和非 AWS 资源,例如 AWS 应用程序资源,以及非 AWS SaaS 软件服务,例如监控、团队生产力、事故管理或版本控制管理工具。

资源架构以结构化且一致的格式定义资源类型。此架构还用于使资源类型的定义生效。此架构包括给定资源类型的所有受支持的参数和属性,以及使用尽可能低的权限创建资源所需的权限。

使用 AWS CloudFormation CLI 构建资源提供商。首先,您可以为资源定义简单的声明性架构,其中包括所需的权限以及与其他资源的关系。然后,使用 CloudFormation CLI 为资源生命周期处理程序(创建、读取、更新、删除和列出)生成支架以及用于单元和集成测试的测试桩。

您可以使用开源的 AWS CloudFormation CLI 或者直接调用 RegisterType 及相关的 Registry API,它们可通过 AWS SDK 和 AWS CLI 获得。有关详细信息,请参阅我们文档中的使用 AWS CloudFormation 注册表。AWS 资源提供商可以直接使用,无需任何注册步骤。

AWS CloudFormation Public Registry

CloudFormation Registry 于 2019 年 11 月发布,包含一个私有列表,可供客户针对自己的私有用途扩展 CloudFormation。Public Registry 可扩展 CloudFormation Registry 并增加一个公有的可搜索中央位置,用于共享、查找、使用和管理资源类型和模块 <>,这样对于 AWS 和第三方产品,以一致的方式配置和管理基础设施和应用程序都要容易得多。

可以。请参阅 CloudFormation 定价页面

可以。在 CloudFormation Public Registry 中,您可以访问来自已验证发布者的经过精心策划的内容。首先,我们使用 AWS Marketplace 或通过第三方(例如,GitHub 和 Bitbucket)验证每个发布者的身份。

CloudFormation Public Registry 是扩展工具的新型可搜索托管目录,这些扩展工具包含 AWS 合作伙伴网络(APN)合作伙伴和开发人员社区发布的资源类型(预置逻辑)和模块。通过 CloudFormation Public Registry,现在任何人都可以在 Registry 上发布资源类型和模块。客户可以轻松地发现和使用这些已发布的资源类型和模块,无需自行构建和维护。

资源类型是包含预置逻辑的代码包,可供您管理资源(例如,Amazon EC2 实例或 Amazon DynamoDB 表)从创建到删除的生命周期,简化了复杂的 API 交互。资源类型包含架构,它定义资源的形状和属性,以及预置、更新、删除和描述资源所需的逻辑。CloudFormation Public Registry 中的第三方资源类型示例包括 Datadog 监视器、MongoDB 地图集项目或 Atlassian Opsgenie 用户以及其他。

模块是可在多个 CloudFormation 模板之间重复使用的构建块,就像原生 CloudFormation 资源那样使用。这些构建块可用于单个资源,例如定义 Amazon Elastic Compute Cloud (Amazon EC2) 实例的最佳实践,也可以用于多个资源,以定义应用程序架构的常见模式。

您可以参阅此链接开发自己的资源或模块并添加到 AWS CloudFormation Registry。您可以选择以私有方式发布,也可将其发布到 Public Registry。

计费

在将 AWS CloudFormation 用于下列命名空间的资源提供商时不会额外收费:AWS::*、Alexa::* 和 Custom::*。在这种情况下,您为使用 AWS CloudFormation 创建的 AWS 资源(如 Amazon EC2 实例、Elastic Load Balancing 负载均衡器等)付费时,其方式与您手动创建这些资源时相同。您只需在使用时为您的使用量付费;既没有最低费用,也不要求前期承诺。

当您将上述命名空间之外的资源提供商用于 AWS CloudFormation 时,每个处理程序操作都会向您收费。处理程序操作是指资源上的创建、更新、删除、读取或列表操作。有关更多信息,请参阅定价页面

可以。无论整个堆栈能否创建成功,模板实例化期间创建的 AWS 资源均需收费。

限额和限制

有关您可以创建的 AWS CloudFormation 堆栈最大数的更多信息,请参阅 AWS CloudFormation 配额中的堆栈。请在此处填写增加限制的申请表,我们将在两个工作日内答复您的请求。

有关更多信息,请参阅 AWS 文档中的 AWS CloudFormation 配额参数资源输出中的模板说明。

有关您可以在模板中指定的参数和输出数量的更多信息,请参阅 AWS CloudFormation 配额中的参数和输出部分。

有关您可以在模板中声明的资源数量的更多信息,请参阅 AWS CloudFormation 配额中的资源。最佳做法是创建较小的模板和堆栈,并跨多个堆栈对应用程序进行模块化,这是为了最大程度地减小资源更改的影响半径,并更快地解决存在多个资源依赖关系的问题,因为与大型资源组相比,较小的资源组具有更少的依赖关系。

区域和终端节点

有关各个区域的端点,请参阅技术文档中的 AWS CloudFormation 端点

请参阅区域性产品和服务,了解 CloudFormation 在不同区域的具体提供情况。

了解更多有关 AWS CloudFormation 定价的信息

访问“AWS CloudFormation 定价”页面
准备好开始构建了吗?
开始使用 AWS CloudFormation
还有更多问题?
联系我们