

# 更新 CloudFormation StackSet
<a name="stacksets-update"></a>

您可以使用 CloudFormation 控制台或 AWS CLI 更新您的 StackSet。

要在 StackSet 中添加和移除账户和区域，请参阅[将堆栈添加到 StackSets](stackinstances-create.md)和[从堆栈集中删除堆栈](stackinstances-delete.md)。要覆盖堆栈的参数值，请参阅[覆盖堆栈参数](stackinstances-override.md)。

**Topics**
+ [更新 StackSet（控制台）](#stacksets-update-console)
+ [更新 StackSet（AWS CLI）](#stacksets-update-cli)

## 更新 StackSet（控制台）
<a name="stacksets-update-console"></a>

**更新 StackSet**

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

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

1. 从导航窗格中，选择 **StackSets**。

1. 在 **StackSet** 页面上，选择您要更新的 StackSet。

1. 选定 StackSet 之后，从**操作**菜单中选择**编辑 StackSet 详细信息**。

1. 在**选择模板**页面上，根据需要更新**权限**部分，或跳到下一步。

1. 在**先决条件 - 准备模板**中，选择**使用当前模板**以使用当前模板，或选择**替换当前模板**以指定另一个模板的 S3 URL，或上传新模板。

1. 选择**下一步**。

1. 在**指定 StackSet 详细信息**页面的 **StackSet 描述**中，根据需要更新 StackSet 的描述。

1. 对于**参数**，请根据需要更新参数值。

1. 选择**下一步**。

1. 在**配置 StackSet 选项**页面上，对于**标签**，根据需要修改标签。您可以添加、更新或删除标签。有关如何在 AWS 中使用标签的更多信息，请参阅《AWS 账单与成本管理 User Guide》**中的 [Organizing and tracking costs using AWS cost allocation tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

1. 对于**执行配置**，您可以根据需要更新执行配置。
**注意**  
请记住，当操作正在运行或已排队时，您无法更改执行设置。

1. 如果模板包含 IAM 资源，则对于**功能**，请选择**我确认该模板可能会创建 IAM 资源**以指定您要在模板中使用 IAM 资源。有关更多信息，请参阅 [确认 CloudFormation 模板中的 IAM 资源](control-access-with-iam.md#using-iam-capabilities)。

1. 选择**下一步**。

1. 在**设置部署选项**页面上，提供用于更新的账户和区域。

   CloudFormation 将在第一个区域内的指定账户中部署堆栈更新，然后移到下一个区域，依此类推，前提是区域的部署失败不超过指定的容错能力。

   1. [自行管理权限] 对于**账户**、**部署位置**，选择**在账户中部署堆栈**。在文本框中粘贴用于创建 StackSet 的目标账户 ID，用逗号分隔多个数字。

      [服务管理权限] 请执行下列操作之一：
      + 选择 **Deploy to organizational units (OUs) (部署到组织单位 (OU))**。输入用于创建 StackSet 的目标 OU。
      + 选择 **Deploy to accounts (部署到账户)**。粘贴用于创建 StackSet 的目标 OU ID 或账户 ID。

   1. 对于**在指定区域**，指定您希望 CloudFormation 部署更新的顺序。

   1. 对于**部署选项**，请执行以下操作：
      + 对于**最大并发账户数**，请指定并发处理的账户数量。
      + 在**容错**中，请指定每个区域允许的账户失败次数上限。达到此次数限制后，该操作将停止，不会继续到其他区域。
      + 对于**区域并发**，请选择处理区域的方式：**顺序**（一次处理一个区域）或**并行**（并发处理多个区域）。
      + 对于**并发模式**，请选择在操作执行期间的并发行为方式。
        + **严格容错**：操作失败时降低账户并发级别，保持在**容错** \$11 范围内。
        + **软容错** – 即使失败，仍保持您指定的并发级别（**最大并发账户数**的值）。
      + [服务管理权限] 对于 StackSet **依赖项**，添加依赖的 StackSet ARN，最多保持在 10 个依赖项内。有关更多信息，请参阅 [为 AWS Organizations 中的堆栈集启用或禁用自动部署](stacksets-orgs-manage-auto-deployment.md)。

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

1. 在**审核**页面上，审核您的选择。要进行更改，请在相关部分选择**编辑**。

1. 如果准备继续，则请选择**提交**。

   CloudFormation 会开始对您的 StackSet 应用更新，然后显示 StackSet 详细信息的**操作**选项卡。您可在**操作**选项卡上查看更新操作的进度和状态。

## 更新 StackSet（AWS CLI）
<a name="stacksets-update-cli"></a>

**注意**  
担任委派管理员时，您必须在命令中包含 `--call-as DELEGATED_ADMIN`。

1. 

**更新 StackSet**

   使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack-set.html) 命令对 StackSet 进行更改。

   在以下示例命令中，我们使用 `--parameters` 选项来更新 StackSet。具体来说，我们将传递通道配置的默认快照传输频率从 `TwentyFour_Hours` 更改为 `Twelve_Hours`。由于我们仍在使用当前模板，因此添加了 `--use-previous-template` 选项。

   使用 `--operation-preferences` 选项设置并发账户处理和其他部署首选项。这些示例使用基于计数的设置。请注意，`MaxConcurrentCount` 不得大于 `FailureToleranceCount` \$1 1。对于基于百分比的设置，请改用 `FailureTolerancePercentage` 或 `MaxConcurrentPercentage`。

   [自行管理权限] 对于 `--accounts` 选项，提供您希望更新到目标的账户 ID。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template \
     --parameters ParameterKey=MaximumExecutionFrequency,ParameterValue=Twelve_Hours \
     --accounts account_ID_1 account_ID_2 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   [服务托管权限] 对于 `--deployment-targets` 选项，提供您希望更新到目标的组织（根）ID 或组织单元（OU）ID。

   ```
   aws cloudformation update-stack-set --stack-set-name my-stackset \
     --use-previous-template \
     --parameters ParameterKey=MaximumExecutionFrequency,ParameterValue=Twelve_Hours \
     --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo,ou-rcuk-slr5lh0a \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

   有关更多信息，请参阅 *AWS CloudFormation API 参考*中的 [UpdateStackSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html)。

1. 通过运行 **describe-stack-set-operation** 命令显示更新操作的状态和结果，来验证是否已成功更新 StackSet。对于 `--operation-id`，使用由您的 **update-stack-set** 命令返回的操作 ID。

   ```
   aws cloudformation describe-stack-set-operation \
     --operation-id operation_ID
   ```