

# 创建 CloudFormation 堆栈的更改集
<a name="using-cfn-updating-stacks-changesets-create"></a>

要为正在运行的堆栈创建更改集，请通过提供修改后的模板、新的输入参数值或两者来提交您想要进行的更改。CloudFormation 通过将堆栈与您提交的更改进行比较来生成更改集。

您可以在创建更改集之前或在创建更改集期间修改模板。

------
#### [ Create a change set (console) ]

**创建更改集**

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在屏幕顶部的导航栏中，选择您的 AWS 区域。

1. 在**堆栈**页面上，选择您要为其创建更改集的正在运行的堆栈。

1. 在堆栈详细信息窗格中，选择**堆栈操作**，然后选择**创建更改集**。

1. 在**为 {{stack-name}} 创建更改集**页面上，执行下列操作之一以修改输入参数值，指定更新模板的位置或修改模板：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets-create.html)

1. 在**指定堆栈详细信息**页面上，指定更改集的名称，您还可以选择在**概述**部分指定更改集的描述以标识其用途。如果您的模板包含参数，则在 **Specify stack details (指定堆栈详细信息)** 页面上，输入或修改适用的输入参数值，然后选择 **Next (下一步)**。

   如果您重用堆栈的模板，CloudFormation 会使用堆栈中的当前值填充各个参数，但在 `NoEcho` 属性中声明的参数除外。要为这些参数使用现有值，请选择**使用现有值**。

   有关使用 `NoEcho` 来遮蔽敏感信息以及使用动态参数管理密钥的更多信息，请参阅 [请勿将凭证嵌入您的模板](security-best-practices.md#creds) 最佳实践。

1. 在**配置堆栈选项**页面上，更新堆栈的标签、IAM 服务角色、堆栈策略、回滚配置、Amazon SNS 通知主题（如果适用）或更改集。
**注意**  
默认情况下，嵌套堆栈的更改集处于**已启用**状态，这将为模板中指定的所有嵌套堆栈创建更改集。要仅为当前堆栈创建更改集，请选择**已禁用**。有关嵌套堆栈更改集的详细信息，请参阅 [嵌套堆栈的更改集](change-sets-for-nested-stacks.md)。

1. 如果模板包含 IAM 资源，则对于**功能**，请选择**我确认 CloudFormation 可能会创建 IAM 资源**。IAM 资源可以修改您 AWS 账户中的权限；查看这些资源以确保只允许您打算执行的操作。有关更多信息，请参阅 [确认 CloudFormation 模板中的 IAM 资源](control-access-with-iam.md#using-iam-capabilities)。

1. 选择**下一步**以继续。

1. 在**审核 {{stack-name}}** 页面上，检查此更改集的更改。

1. 选择**提交**。

   您将重定向到更改集的详细信息页面的**更改**选项卡。在 CloudFormation 生成更改集时，更改集的状态为 `CREATE_PENDING`。在创建了更改集之后，CloudFormation 将状态设置为 `CREATE_COMPLETE`。在 **Changes (更改)** 部分中，CloudFormation 列出将对您的堆栈进行的所有更改。有关更多信息，请参阅 [查看 CloudFormation 堆栈的更改集](using-cfn-updating-stacks-changesets-view.md)。

   选择**属性级别更改**列中的**查看详细信息**，以查看在属性级别所做的更改。

   如果 CloudFormation 无法创建更改集（报告 `FAILED` 状态），请修复 **Status (状态)** 字段中显示的错误，然后重新创建更改集。

1. 确认更改无误后，选择**执行更改集**

------
#### [ Create a change set for nested stacks (console) ]

**创建嵌套堆栈的更改集**

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在屏幕顶部的导航栏中，选择您的 AWS 区域。

1. 在**堆栈**页面上，选择您要为其创建更改集的正在运行的堆栈。

1. 在堆栈详细信息窗格中，选择**堆栈操作**，然后选择**创建更改集**。

1. 在**为 {{stack-name}} 创建更改集**页面上，执行下列操作之一以修改输入参数值，指定更新模板的位置或修改模板：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets-create.html)

1. 在**指定堆栈详细信息**页面上，指定更改集的名称，您还可以选择在**概述**部分指定更改集的描述以标识其用途。如果您的模板包含参数，则在 **Specify stack details (指定堆栈详细信息)** 页面上，输入或修改适用的输入参数值，然后选择 **Next (下一步)**。

   如果您重用堆栈的模板，CloudFormation 会使用堆栈中的当前值填充各个参数，但在 `NoEcho` 属性中声明的参数除外。要为这些参数使用现有值，请选择**使用现有值**。

   有关使用 `NoEcho` 来遮蔽敏感信息以及使用动态参数管理密钥的更多信息，请参阅 [请勿将凭证嵌入您的模板](security-best-practices.md#creds) 最佳实践。

1. 在**配置堆栈选项**页面上，更新堆栈的标签、IAM 服务角色、堆栈策略、回滚配置、Amazon SNS 通知主题（如果适用）或更改集。有关更多信息，请参阅 [配置堆栈选项](cfn-console-create-stack.md#configure-stack-options)。
**注意**  
默认情况下，嵌套堆栈的更改集处于**已启用**状态，这将为模板中指定的所有嵌套堆栈创建更改集。有关嵌套堆栈更改集的详细信息，请参阅 [嵌套堆栈的更改集](change-sets-for-nested-stacks.md)。

1. 如果模板包含 IAM 资源，则对于**功能**，请选择**我确认 CloudFormation 可能会创建 IAM 资源**。IAM 资源可以修改您 AWS 账户中的权限；查看这些资源以确保只允许您打算执行的操作。有关更多信息，请参阅 [确认 CloudFormation 模板中的 IAM 资源](control-access-with-iam.md#using-iam-capabilities)。

1. 选择**下一步**以继续。

1. 在**审核 {{stack-name}}** 页面上，检查此更改集的更改。

1. 选择**提交**。
**注意**  
为嵌套堆栈创建更改集时，CloudFormation 属性级的更改集无法解析跨堆栈引用。如果子堆栈中的资源引用了父堆栈的输出，而父堆栈已被修改，则更改集可以标记这些资源以便进行有条件替换

   您将重定向到更改集的详细信息页面的**更改**选项卡。在 CloudFormation 生成更改集时，更改集的状态为 `CREATE_PENDING`。在创建了更改集之后，CloudFormation 将状态设置为 `CREATE_COMPLETE`。在 **Changes (更改)** 部分中，CloudFormation 列出将对您的堆栈进行的所有更改。有关更多信息，请参阅 [查看 CloudFormation 堆栈的更改集](using-cfn-updating-stacks-changesets-view.md)。

   如果 CloudFormation 无法创建更改集（报告 `FAILED` 状态），请修复 **Status (状态)** 字段中显示的错误，然后重新创建更改集。

1. 确认更改无误后，选择**执行更改集**

------

**创建更改集 (AWS CLI)**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-change-set.html) 命令。

  您以命令选项的形式提交更改。您可以指定新参数值和/或修改后的模板。例如，以下命令为 `SampleChangeSet` 堆栈创建名为 `MyStack` 的更改集。更改集使用当前堆栈的模板，但 `Purpose` 参数具有不同值：

  ```
  aws cloudformation create-change-set --stack-name {{MyStack}} \
      --change-set-name {{SampleChangeSet}} --use-previous-template \
      --parameters \
        {{ParameterKey="InstanceType",UsePreviousValue=true ParameterKey="KeyPairName",UsePreviousValue=true ParameterKey="Purpose",ParameterValue="production"}}
  ```