AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

AWS CloudFormation 是如何运行的?

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

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

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

    例 JSON 语法

    { "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "A simple EC2 instance", "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-2f726546", "InstanceType" : "t1.micro" } } } }

    例 YAML 语法

    AWSTemplateFormatVersion: '2010-09-09' Description: A simple EC2 instance Resources: MyEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-2f726546 InstanceType: t1.micro
  2. 您可在本地或在 S3 存储桶中保存模板。如果创建了一个模板,可使用任何文件扩展名 (如 .json.yaml.txt) 保存该模板。

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

    您可通过使用 AWS CloudFormation 控制台APIAWS CLI 创建堆栈。

    注意

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

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

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

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

使用更改集更新堆栈

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

重要

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

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

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

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

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

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

    注意

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

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

    重要

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

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

删除堆栈

在删除堆栈时,您可指定要删除的堆栈,并且 AWS CloudFormation 将删除该堆栈及其包含的所有资源。您可通过使用 AWS CloudFormation 控制台APIAWS CLI 删除堆栈。

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

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

其他资源

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

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