

# 使用示例模板开始使用 StackSet。
<a name="stacksets-getting-started"></a>

本教程将介绍如何通过 AWS 管理控制台开始使用 StackSet。它会指导您如何使用示例模板创建 StackSet。您将学会如何跨多个区域部署堆栈、监控 StackSet 操作以及查看结果。

在本教程中，您将在美国西部（俄勒冈州）(`us-west-2`) 区域和美国东部（弗吉尼亚州北部）区域 (`us-east-1`) 中的 AWS 账户中创建一个启用 AWS Config 的 StackSet。借助 StackSet，您可以在一次操作中跨多个账户和区域创建、更新或删除堆栈，因此它是大规模管理基础设施的理想解决方案。虽然为了方便起见，本教程使用单一账户，但它有效地演示了 StackSet 的多区域功能。

位于以下 S3 存储桶中的示例模板可供使用：[https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml](https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml)。

**注意**  
StackSet 使用免费，但您需要为创建 StackSet 使用的 AWS 资源付费，例如本教程中的 AWS Config。有关更多信息，请参阅 [AWS Config 定价](https://aws.amazon.com/config/pricing/)。

**Topics**
+ [先决条件](#stacksets-tutorial-prerequisites)
+ [使用控制台中的示例模板创建 StackSet](#stacksets-tutorial-create-stackset)
+ [监控 StackSet 创建](#stacksets-tutorial-monitor-creation)
+ [查看 StackSet 结果](#stacksets-tutorial-view-results)
+ [更新 StackSet](#stacksets-tutorial-update-stackset)
+ [将堆栈添加到 StackSet](#stacksets-tutorial-add-stacks)
+ [清理](#stacksets-tutorial-clean-up)
+ [后续步骤](#stacksets-tutorial-next-steps)

## 先决条件
<a name="stacksets-tutorial-prerequisites"></a>

开始本教程之前，请确保您已完成以下先决条件：
+ 您必须已设置自行管理权限所需的 IAM 角色。要创建 StackSet 并在单个账户中部署堆栈，您的账户中需要有以下角色：
  + `AWSCloudFormationStackSetAdministrationRole`
  + `AWSCloudFormationStackSetExecutionRole`

  有关这些角色设置的详细说明，请参阅[授予自行管理的权限](stacksets-prereqs-self-managed.md)。

## 使用控制台中的示例模板创建 StackSet
<a name="stacksets-tutorial-create-stackset"></a>

**创建启用 AWS Config 的 StackSet**

1. 打开 [ CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)。

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

   您可以选择支持 StackSet 的任何区域。您选择的区域不会影响您可以使用 StackSet 部署的区域范围。

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

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

1. 在**权限**下，选择**自助服务权限**，然后选择您在完成先决条件期间创建的 IAM 角色。
   + 在 IAM 管理员角色中，选择 **AWSCloudFormationStackSetAdministrationRole**。
   + 在 IAM 执行角色名称中，选择 **AWSCloudFormationStackSetExecutionRole**。

1. 在 **Prerequisite - Prepare template (先决条件 – 准备模板)** 下，选择 **Use a sample template (使用示例模板)**。

1. 在**选择示例模板**下，选择**启用 AWS Config** 模板。然后选择**下一步**。

   此模板会在账户中创建启用 AWS Config 所必需的资源，包括配置记录器和交付渠道。

1. 在**指定 StackSet 详细信息**页面的 **StackSet 名称**中，输入 **my-awsconfig-stackset**。

1. 在 **StackSet 描述**中，输入 **A StackSet that enables Config across multiple Regions**。

1. 在**参数**下，按以下方式配置 AWS Config 设置：

   1. 对于**支持所有资源类型**，请保留默认值 **true**，从而记录所有受支持的资源类型。

   1. 对于**包含全局资源类型**，保留默认值 **false**，从而排除 IAM 角色等全局资源。

   1. 请将**如非全部支持时的资源类型列表**设置为 **<All>**。

   1. 对于**包含 Config 服务相关角色资源的区域**，请将 **<DeployToAnyRegion>** 替换为 **us-west-2**。

      这表示仅在将堆栈部署到美国西部（俄勒冈州）区域时，才会创建名为 `AWSServiceRoleForConfig` 的服务相关角色。您将在此过程的后期阶段选择部署区域。

   1. 对于**配置记录器记录频率**，请选择**每日**记录。

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

1. 在**配置 StackSet 选项**页面上，选择**添加新标签**，然后指定键/值对来添加标签。

   1. 对于**键**，输入 **Stage**。

   1. 对于**值**，输入 **Test**。

   您应用到 StackSet 的标签也将应用到堆栈创建的所有资源。

1. 在**执行配置**中，请选择**活动**，启用 CloudFormation 的优化操作处理：
   + 为了缩短部署时间，无冲突的操作会同时运行。
   + 存在冲突的操作会自动排入队列，按照请求的顺序进行处理。

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

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

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

1. 对于 **Accounts (账户)**，选择 **Deploy stacks in accounts (在账户中部署堆栈)**。

1. 在文本框中输入 AWS 账户 ID。

1. 在**指定区域**中，按此顺序选择以下区域：

   1. 美国西部（俄勒冈州）区域 (`us-west-2`)

   1. 美国东部（弗吉尼亚州北部）区域 (`us-east-1`)

   如需要，选择美国西部（俄勒冈州）区域旁边的向上箭头，将其移至列表中的第一个条目。区域顺序决定了其部署顺序。

1. 在**部署选项**中，配置以下设置：

   1. 对于 **Maximum concurrent accounts**（最大并发账户数），请保留 **Number**（数量）和 **1** 的默认值。

      如果是多账户部署，此设置表示，CloudFormation 一次仅在一个账户中部署您的堆栈。

   1. 对于 **Failure tolerance (容错)**，请保留 **Number (数量)** 和 **0** 的默认值。

      这意味着，只要您指定区域之一中只要有一个堆栈部署失败，CloudFormation 就会停止当前区域中的部署并取消剩余区域中的部署。

   1. 在**区域并发**中，请选择**顺序**（默认设置）。

      此设置可确保 CloudFormation 完成一个区域的部署后，然后再移至下一个区域。

   1. 在**并发模式**中，保留默认值**严格容错**。

      对于多账户部署，这会在操作失败时降低账户并发级别，保持在**容错能力** \$11 的范围内。

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

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

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

## 监控 StackSet 创建
<a name="stacksets-tutorial-monitor-creation"></a>

选择**提交**后，CloudFormation 会开始创建您的 StackSet 并将堆栈部署到您账户中的指定区域。StackSet 详细信息页面会自动打开，您可以在其中监控操作进度。

**监控 StackSet 创建**

1. 在 StackSet 详细信息页面上会默认显示**操作**选项卡，显示当前正在进行的操作。

1. 操作状态最开始应为 `RUNNING`。CloudFormation 根据您配置的部署选项在指定的区域中创建堆栈。

1. 要查看有关操作的更多详细信息，请在列表中选择操作 ID。

1. 在操作详细信息页面，可以查看每个区域中创建的堆栈实例的状态。

1. 操作状态变为 `SUCCEEDED` 后表示 StackSet 及其所有堆栈实例已成功创建。

## 查看 StackSet 结果
<a name="stacksets-tutorial-view-results"></a>

StackSet 创建完成后，您可以查看已部署的堆栈实例，验证您的账户是否已在各个指定区域中启用 AWS Config。

**查看 StackSet 结果**

1. 在 StackSet 详细信息页面上，选择**堆栈实例**选项卡。

1. 您应该会看到您的账户在各个指定区域中创建的堆栈实例列表。每个堆栈实例的状态都应为 `SUCCEEDED`，此状态表示已成功部署。

1. 要验证您的账户是否已启用 AWS Config，可以查看每个部署区域的 AWS Config 控制台。

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

创建 StackSet 后，您可能会需要对其进行更新以修改参数值或添加更多区域。本节介绍如何更新 AWS Config 记录频率参数。

**更新 StackSet**

1. 在 **StackSet** 页面上，选择 **my-awsconfig-stackset**。

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

1. 在**选择模板**页面的**先决条件 – 准备模板**中，选择**使用当前模板**。

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

1. 在**指定 StackSet 详细信息**页面的**参数**下，找到**配置记录器的记录频率**，将其从**每日**更改为**连续**。

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

1. 在**配置 StackSet 选项**页面上，保持所有设置不变，然后选择**下一步**。

1. 在**设置部署选项**页面上，指定您的账户 ID 以及您在创建 StackSet 时使用的区域。

1. 在**部署选项**中，保持与之前相同的设置。

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

1. 在**审核**页面上，检查您的更改内容，然后选择**提交**。

1. CloudFormation 会开始更新 StackSet。您可以在 StackSet 详细信息页面的**操作**选项卡上监控进度。

## 将堆栈添加到 StackSet
<a name="stacksets-tutorial-add-stacks"></a>

您可以通过部署到其他区域来向 StackSet 添加更多堆栈。本节介绍如何向新区域添加堆栈。

**将堆栈添加到 StackSet**

1. 在 **StackSet** 页面上，选择 **my-awsconfig-stackset**。

1. 选择 StackSet 后，从**操作**菜单中选择**将堆栈添加到 StackSet**。

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

1. 在**账户**中，选择**在账户中部署堆栈**，然后输入您的账户 ID。

1. 在**指定区域**中，选择一个新的区域，例如**欧洲地区（爱尔兰）**(`eu-west-1`)。

1. 在**部署选项**中，保持与之前相同的设置。

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

1. 在**指定覆盖**页面上，将属性值保留为指定值，然后选择**下一步**。

1. 在**审核**页面上，检查您的选择，然后选择**提交**。

1. CloudFormation 会开始在指定区域中创建新堆栈。您可以在 StackSet 详细信息页面的**操作**选项卡上监控进度。

## 清理
<a name="stacksets-tutorial-clean-up"></a>

为避免因不需要的 AWS Config 资源产生费用，您应该从 StackSet 中删除堆栈、删除 StackSet 本身以及删除在本教程学习期间创建的 IAM 角色，以便进行清理。所有资源都部署在您的账户中，因此清理非常简单。

**从 StackSet 中删除堆栈**

1. 在 **StackSet** 页面上，选择 **my-awsconfig-stackset**。

1. 选定 StackSet 后，从**操作**菜单中选择**从 StackSet 中删除堆栈**。

1. 在**设置部署选项**页面的**账户**中，选择**在账户中部署堆栈**，然后输入您的账户 ID。

1. 在**指定区域**中，选择部署了堆栈的所有区域。

1. 在**部署选项**中，保留默认设置。

1. 确保*未*打开**保留堆栈**，以便删除堆栈及其资源。

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

1. 在**审核**页面上，检查您的选择，然后选择**提交**。

1. CloudFormation 会开始从 StackSet 中删除堆栈。您可以在 StackSet 详细信息页面的**操作**选项卡上监控进度。

**删除 StackSet**

1. 删除所有堆栈后，在 **StackSet** 页面上，选择 **my-awsconfig-stackset**。

1. 选定 StackSet 后，从**操作**菜单中选择**删除 StackSet**。

1. 当系统提示进行确认时，选择**删除**。

**删除 IAM 服务角色**

由于您只部署到自己的账户，因此您只需要从该单一账户中删除 IAM 角色即可，清理工作比多账户部署简单得多。

1. 打开 [IAM 控制台](https://console.aws.amazon.com/iam/)。

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

1. 在搜索框中，输入 **AWSCloudFormationStackSet** 查找您在本教程学习期间创建的角色。

1. 勾选 **AWSCloudFormationStackSetAdministrationRole** 旁边的复选框。

1. 在该页面的顶部，选择**删除**。

1. 在确认对话框中，输入 **delete**，然后选择**删除**。

1. 重复同样的过程删除 **AWSCloudFormationStackSetExecutionRole**。

删除 StackSet 后，由于 `AWS::S3::Bucket` 资源的 `DeletionPolicy` 属性，每个 AWS 区域都将保留一个 Amazon S3 存储桶。这样可以保留您的 AWS Config 历史数据。如果您不再需要这些数据，可以安全地手动删除该存储桶。您必须先清空存储桶，然后才能删除存储桶。清空存储桶将删除存储桶中的所有对象。

**清空和删除 Amazon S3 存储桶**

1. 打开 [Amazon S3 控制台](https://console.aws.amazon.com/s3/)。

1. 在控制台左侧的导航窗格中，选择 **Buckets（存储桶）**。

1. 在**存储桶**列表中，您将看到在部署的每个区域中为此 StackSet 创建的存储桶。选择为此 StackSet 创建的存储桶名称旁边的选项，然后选择**清空**。

1. 在**清空存储桶**页面上，通过在文本字段中键入 **permanently delete** 来确认要清空存储桶，然后选择**清空**。

1. 在**清空存储桶：状态**页面上监控存储桶清空过程的进度。

1. 要返回到存储桶列表，请选择**退出**。

1. 选择存储桶名称旁的选项，然后选择**删除**。

1. 在系统提示进行确认时，键入存储桶的名称，然后选择**删除存储桶**。

1. 在**存储桶**清单上监控存储桶删除过程的进度。Amazon S3 完成存储桶删除后，会将存储桶从列表中移除。

1. 重复此过程，删除不同区域中为此 StackSet 创建的存储桶。

## 后续步骤
<a name="stacksets-tutorial-next-steps"></a>

恭喜您！您已经成功使用示例模板创建了 StackSet，将堆栈部署到账户内的多个区域，更新了 StackSet，添加了更多堆栈，还清理了资源。通过学习单一账户部署，可以简化您的清理过程，同时还能让您学到 StackSet 的核心多区域功能。

要了解有关 StackSet 的更多信息，请参阅以下主题：
+ [覆盖 CloudFormation StackSet 中的堆栈参数值](stackinstances-override.md)：了解如何覆盖特定账户和区域的参数值。
+ [创建具有服务托管权限的 CloudFormation StackSet](stacksets-orgs-associate-stackset-with-org.md)：探索如何使用 AWS Organizations 为多账户部署创建 StackSet。