

# 创建具有自行管理权限的 CloudFormation StackSet
<a name="stacksets-getting-started-create-self-managed"></a>

本主题介绍如何创建具有*自行管理*权限的 StackSet，以便跨 AWS 账户和区域部署堆栈。

**注意**  
在此之前，您必须首先创建 StackSet 所需的 IAM 角色，以便在 StackSet 的管理账户与需要部署堆栈的账户之间建立可信关系。有关更多信息，请参阅 [授予自行管理的权限](stacksets-prereqs-self-managed.md)。

**Topics**
+ [创建具有自行管理权限的 StackSet（控制台）](#stacksets-getting-started-create-self-managed-console)
+ [创建具有自行管理权限的 StackSet（AWS CLI）](#stacksets-getting-started-self-managed-cli)

## 创建具有自行管理权限的 StackSet（控制台）
<a name="stacksets-getting-started-create-self-managed-console"></a>

**创建 StackSet**

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

1. 在屏幕顶部的导航栏中，选择要从中管理 StackSet 的 AWS 区域。

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

1. 从 **StackSets** 页面顶部，选择**创建 StackSet**。

1. 在**权限**下，选择**自助服务权限**，然后选择您创建的 IAM 角色。

1. 在**先决条件 - 准备模板**下，选择**模板已就绪**。

1. 在 **Specify template (指定模板)** 下，选择指定包含堆栈模板的 S3 存储桶的 URL，或者上传堆栈模板文件。然后选择**下一步**。

1. 在**指定 StackSet 详细信息**页面上，提供 StackSet 名称，指定所有参数，然后选择**下一步**。

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

1. 在 **Configure StackSet options (配置堆栈集选项)** 页面上，在 **Tags (标签)** 下指定要应用于堆栈中资源的所有标签。有关如何在 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. 在**执行配置**中，请选择**活动**，启用 CloudFormation 的优化操作处理：
   + 为了缩短部署时间，无冲突的操作会同时运行。
   + 存在冲突的操作会自动排入队列，按照请求的顺序进行处理。

   如果有操作正在运行或排队，CloudFormation 会将所有传入操作排入队列，即使这些操作没有冲突。在此期间，您不能更改执行设置。

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

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

1. 在**设置部署选项**页面的**向 StackSet 添加堆栈**中，选择**部署新堆栈**。

1. 对于 **Accounts (账户)**，选择 **Deploy stacks in accounts (在账户中部署堆栈)**。在文本框中粘贴您的目标 AWS 账户编号，并使用逗号分隔多个编号。
**注意**  
如果您还想在该账户中部署堆栈，则可以将您的管理员账户 ID 也包含在其中。

1. 对于**指定区域**，选择要在其中部署堆栈的区域。

1. 对于**部署选项**，请执行以下操作：
   + 对于**最大并发账户数**，请指定并发处理的账户数量。
   + 在**容错**中，请指定每个区域允许的账户失败次数上限。达到此次数限制后，该操作将停止，不会继续到其他区域。
   + 对于**区域并发**，请选择处理区域的方式：**顺序**（一次处理一个区域）或**并行**（并发处理多个区域）。
   + 对于**并发模式**，请选择在操作执行期间的并发行为方式。
     + **严格容错**：操作失败时降低账户并发级别，保持在**容错** \$11 范围内。
     + **软容错** – 即使失败，仍保持您指定的并发级别（**最大并发账户数**的值）。

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

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

1. 准备好创建 StackSet 后，选择**提交**。

   CloudFormation 会开始创建 StackSet。选择**提交**后会打开 StackSet 详细信息页面，可以在其中查看 StackSet 中的堆栈创建进度和状态。

## 创建具有自行管理权限的 StackSet（AWS CLI）
<a name="stacksets-getting-started-self-managed-cli"></a>

请按照本部分中的步骤，使用 AWS CLI 来执行以下操作：
+ 创建 StackSet 容器。
+ 部署堆栈实例。

**创建 StackSet**

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-set.html) 命令创建一个新 StackSet（名为 `my-stackset`）。以下示例中，使用存储在 S3 存储桶中的模板，包含将 `KeyPairName` 设置为 `TestKey` 的参数。

   ```
   aws cloudformation create-stack-set \
     --stack-set-name my-stackset \
     --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \
     --parameters ParameterKey=KeyPairName,ParameterValue=TestKey
   ```

1. 在 **create-stack-set** 命令完成后，运行 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-stack-sets.html) 命令可查看您的 StackSet 是否已创建。您应在结果中看到新的 StackSet。

   ```
   aws cloudformation list-stack-sets
   ```

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack-instances.html) 命令将堆栈部署到 StackSet 中。以下示例中，在两个区域（`us-west-2` 和 `us-east-1`）的两个 AWS 账户（`account_ID_1` 和 `account_ID_2`）中部署堆栈。

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

   ```
   aws cloudformation create-stack-instances \
     --stack-set-name my-stackset \
     --accounts account_ID_1 account_ID_2 \
     --regions us-west-2 us-east-1 \
     --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0
   ```

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

1. 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stack-set-operation.html) 命令验证堆栈是否已成功创建。在 `--operation-id` 选项中，指定作为 **create-stack-instances** 输出部分内容返回的操作 ID。

   ```
   aws cloudformation describe-stack-set-operation \
     --stack-set-name my-stackset \
     --operation-id operation_ID
   ```