

# 使用 CloudFormation StackSet 的最佳实践
<a name="stacksets-bestpractices"></a>

本节介绍了定义 StackSet 模板、创建堆栈或将堆栈添加到 StackSet 或更新 StackSet 的最佳实践。

如果不熟悉 CloudFormation，请查看 [CloudFormation 最佳实践](best-practices.md) 主题获取更多有助于您更高效、安全地使用 CloudFormation 的建议。

**Topics**
+ [定义模板](#w2aac15c41b9)
+ [创建堆栈或将堆栈添加到 StackSet](#w2aac15c41c11)
+ [更新 StackSet 中的堆栈](#w2aac15c41c13)

## 定义模板
<a name="w2aac15c41b9"></a>
+ 定义要在多个区域内的多个账户中标准化的模板。
+ 在创建模板时，如果在同一账户的多个区域中创建全局资源（如 IAM 角色和 Amazon S3 桶），请确保全局资源没有发生命名冲突。
+ 每个 StackSet 都有一个模板和参数集。与 StackSet 关联的所有账户中创建的堆栈都相同。在创作模板时，使其足够精细以便您能够实现控制与标准化的良好平衡。
+ 建议您将模板存储在 Amazon S3 桶中。

## 创建堆栈或将堆栈添加到 StackSet
<a name="w2aac15c41c11"></a>
+ 在将大量堆栈实例添加到 StackSet 之前，验证是否能将堆栈实例添加到初始 StackSet。
+ 选择适用于您的使用案例的部署 (推出) 选项。
  + 对于更传统的部署，请将 **Maximum Concurrent Accounts** 设置为 1，并将 **Failure Tolerance** 设置为 0。在 **Region Order** 列表中将影响最小的区域设置为第一位。从一个区域开始。
  + 要更快地进行部署，请根据需要增大 **Maximum Concurrent Accounts** 和 **Failure Tolerance** 的值。
+ 针对 StackSet 的操作可能需要花费大量时间，具体取决于包含的堆栈实例数量。

## 更新 StackSet 中的堆栈
<a name="w2aac15c41c13"></a>
+ 默认情况下，更新 StackSet 时会更新所有堆栈实例。如果您在两个区域中各有 20 个账户，则您将有 40 个堆栈实例，并且所有实例都将在您更新 StackSet 时进行更新。

  对于具有大量堆栈实例的 StackSet，建议您先选择更新几个测试账户中的堆栈实例以测试更新的模板版本，然后再更新所有堆栈实例。
+ 要对 StackSet 中的各个堆栈更新进行更精细的控制，请计划创建多个 StackSet。
+ 更新包含大量堆栈的 StackSet 可能需要花费大量时间。在此版本中，一次仅允许对 StackSet 执行一项操作。提前计划更新，以免妨碍您在 StackSet 上执行其他操作。