Amazon CloudFormation 是如何运行的? - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon CloudFormation 是如何运行的?

当您创建堆栈时,Amazon CloudFormation 对 Amazon 进行基础服务调用以预置和配置您的资源。CloudFormation 只能执行您有权执行的操作。例如,要使用 CloudFormation 创建 EC2 实例,您需要具有创建实例的权限。您在删除带实例的堆栈时,将需要用于终止实例的类似权限。您可以使用 Amazon Identity and Access Management(IAM)管理权限。

CloudFormation 进行的调用全部由您的模板声明。例如,假设您有一个描述带 t2.micro 实例类型的 EC2 实例的模板。当您使用该模板创建堆栈时,CloudFormation 将调用 Amazon EC2 创建实例 API 并将该实例类型指定为 t2.micro。以下示意图归纳了用于创建堆栈的 CloudFormation 工作流程。

  1. 使用 Amazon CloudFormation Designer 或您自己的文本编辑器创建或修改 JSON 或 YAML 格式的 CloudFormation 模板。您还可以选择使用提供的模板。CloudFormation 模板描述了您所需的资源及其设置。例如,假设您需要创建一个 EC2 实例。您的模板可声明 Amazon EC2 实例并描述其属性,如以下示例所示:

    例 JSON
    { "AWSTemplateFormatVersion": "2010-09-09", "Description": "A simple EC2 instance", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro" } } } }
    例 YAML
    AWSTemplateFormatVersion: 2010-09-09 Description: A simple EC2 instance Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro
  2. 您可在本地或在 Amazon S3 桶中保存模板。如果创建了一个模板,可使用文件扩展名(如 .json.yaml.txt)保存该模板。

  3. 通过指定模板文件的位置(例如,本地计算机上的路径或 Amazon S3 URL)来创建 CloudFormation 堆栈。如果模板包含参数,则可在创建堆栈时指定输入值。利用参数,您可以将值传入模板,以便能在创建堆栈时自定义资源。

    您可通过使用 CloudFormation 控制台CreateStack API 操作或 create-stack Amazon CLI 命令创建堆栈。

    注意

    如果您指定本地存储的模板文件,CloudFormation 会将其上传到您 Amazon 账户中的 S3 桶。CloudFormation 为您上传模板文件的每个区域创建一个桶。具有您 Amazon 账户中 Amazon Simple Storage Service(Amazon S3)权限的任何人均可访问桶。如果 CloudFormation 创建的存储桶已存在,则将模板添加到该存储桶。

    您可通过手动将模板上传到 Amazon S3 来使用您自己的存储桶并管理其权限。之后,当您创建或更新堆栈时,请指定模板文件的 Amazon S3 URL。

CloudFormation 通过调用您的模板中描述的 Amazon 服务来预置和配置资源。

所有资源创建完毕后,CloudFormation 会报告已创建您的堆栈。然后,您可以开始使用堆栈中的资源。如果堆栈创建失败,则 CloudFormation 会通过删除已创建的资源来回滚您的更改。

使用更改集更新堆栈

在需要更新堆栈的资源时,您可以修改堆栈的模板。您不需要创建新堆栈和删除旧堆栈。要更新堆栈,请提交修改的原始堆栈模板版本和/或不同的输入参数值以创建一个更改集。CloudFormation 将修改的模板与原始模板进行比较并生成一个更改集。更改集列出了建议的更改。在审核更改后,您可以启动更改集以更新堆栈,也可以创建新的更改集。以下示意图概述了用于更新堆栈的工作流程。

重要

更新可能会导致中断。根据您所更新的资源和属性,更新可能会中断或者甚至替换现有资源。有关更多信息,请参阅Amazon CloudFormation 堆栈更新

  1. 您可以使用 Amazon CloudFormation Designer 或文本编辑器来修改 CloudFormation 堆栈模板。例如,如果您需要更改 EC2 实例的实例类型,可更改原始堆栈模板中的 InstanceType 属性的值。

    有关更多信息,请参阅修改堆栈模板

  2. 您可在本地或在 S3 存储桶中保存 CloudFormation 模板。

  3. 通过指定要更新的堆栈和修改后模板的位置 (例如本地计算机上的路径或 Amazon S3 URL) 来创建更改集。如果模板包含参数,则可在创建更改集时指定值。

    有关创建更改集的更多信息,请参阅使用更改集更新堆栈

    注意

    如果您指定存储在本地计算机上的模板,则 CloudFormation 自动将模板上传到 Amazon Web Services 账户 中的 S3 桶。

  4. 查看更改集以检查 CloudFormation 是否将执行预期更改。例如,检查 CloudFormation 是否将替换任何关键堆栈资源。您可以创建所需数量的更改集,直到您包含所需的更改。

    重要

    更改集并不指示您的堆栈更新是否将成功。例如,更改集不检查是否将超出账户配额、是否将更新不支持更新的资源或者是否权限不足而无法修改资源,这些都将导致堆栈更新失败。

  5. 启动要应用于堆栈的更改集。CloudFormation 仅更新您修改的资源以更新堆栈,并发出已成功更新堆栈的信号。如果堆栈更新失败,则 CloudFormation 将回滚更改以将堆栈还原到上一个已知工作状态。

删除堆栈

在删除堆栈时,您可指定要删除的堆栈,并且 CloudFormation 将删除该堆栈及其包含的所有资源。您可通过使用 CloudFormation 控制台DeleteStack API 操作或 delete-stack Amazon CLI 命令删除堆栈。

若要删除一个堆栈但保留该堆栈中的一些资源,您可使用删除策略来保留那些资源。

在删除所有资源后,CloudFormation 会发出有关您的堆栈已被成功删除的信号。如果 CloudFormation 无法删除资源,则将不会删除堆栈。尚未删除的任何资源将保留,直到您能成功删除堆栈。

其他 资源

  • 有关创建 CloudFormation 模板的更多信息,请参阅模板剖析

  • 有关创建、更新或删除堆栈的更多信息,请参阅使用 堆栈