本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
StackSets 概念
当您使用 StackSets 时,使用堆栈集、堆栈实例和堆栈。
管理员账户和目标账户
管理员账户是您用来创建堆栈集的 Amazon 账户。对于具有服务托管权限的堆栈集,管理员账户是组织的 管理账户 或委托管理员账户。您可以通过登录到创建堆栈集的 Amazon 管理员账户来管理堆栈集。
目标账户 是您用来创建、更新或删除堆栈集中的一个或多个堆栈的账户。先在管理员账户与目标账户之间设置信任关系,然后才能使用堆栈集在目标账户中创建堆栈。
Amazon CloudFormation StackSets
堆栈集允许您使用单个CloudFormation模板Amazon Web Services 账户跨区域创建堆栈。堆栈集的CloudFormation模板定义了每个堆栈中的所有资源。在创建堆栈集时,指定要使用的模板以及模板所需的任何参数和功能。
在定义堆栈集后,您可以在指定的目标账户和 Amazon Web Services 区域 中创建、更新或删除堆栈。创建、更新或删除堆栈时,您还可以指定操作首选项。例如,包括要执行操作的区域顺序、堆栈操作停止前的容错阈值以及并发执行堆栈操作的账户数。
堆栈集是一种区域性资源。如果在一个 Amazon Web Services 区域 中创建堆栈集,则只能在查看该区域时查看或更改它。
堆栈集的权限模型
您可以使用自行管理 权限或服务托管 权限创建堆栈集。
使用自我管理权限,您可以创建跨账户和区域部署所需StackSets的 IAM 角色。对于在您管理堆栈集所用的账户与您将堆栈部署到的账户之间建立信任关系,这些角色是必需的。使用此权限模型,StackSets可以部署到您有权创建 IAM 角色的任何Amazon账户。
使用服务托管 权限时,您可以将堆栈实例部署到 Amazon Organizations 管理的账户。使用此权限模型,您不必创建必要的 IAM 角色;StackSets可以代您创建 IAM 角色。使用此模型,您还可以为将来添加到组织的账户开启自动部署。
Amazon Organizations集成CloudFormation并帮助您在扩展和增长Amazon资源时集中管理和治理您的环境。
-
管理账户 - 您用于创建组织的账户。有关更多信息,请参阅 Amazon Organizations 术语和概念。
-
委托管理员 - 兼容的 Amazon 服务可以将组织中的 Amazon 成员账户注册为该服务中组织账户的管理员。有关更多信息,请参阅可与 Amazon Organizations 一起使用的 Amazon 服务。
有关创建和管理具有服务托管权限的堆栈集的更多信息,请参阅以下主题:
堆栈实例
堆栈实例 是对区域内的目标账户中的堆栈的引用。堆栈实例可在没有堆栈的情况下存在。例如,如果出于某个原因无法创建堆栈,则堆栈实例将显示堆栈创建失败的原因。一个堆栈实例仅与一个堆栈集关联。
下图显示堆栈集、堆栈操作和堆栈之间的逻辑关系。当您更新堆栈集时,将在所有账户和区域中更新所有 关联的堆栈实例。

堆栈集操作
您可以在堆栈集上执行以下操作。
- 创建堆栈集
-
创建新的堆栈集包括指定要用于创建堆栈的CloudFormation模板,指定要在其中创建堆栈的目标帐户,以及确定要Amazon Web Services 区域在目标账户中部署堆栈的帐户。堆栈集可确保将具有相同设置的相同堆栈资源,一致地部署到所选区域内的所有指定目标账户。
- 更新堆栈集
-
在更新堆栈集时,将更改推送到堆栈集中的堆栈。您可以通过下列方法之一更新堆栈集。您的模板更新始终会影响所有堆栈;您不能选择更新堆栈集中某些堆栈的模板,但可以选择更新其他堆栈的模板。
-
更改模板中的现有设置或添加新资源,例如,更新特定服务的参数设置或添加新的 Amazon EC2 实例。
-
将该模板替换为其他模板。
-
跨现有或其他区域在现有或其他目标账户中添加堆栈。
-
- 删除堆栈
-
在删除堆栈时,您将从指定的区域的指定目标账户中,删除堆栈及其所有关联资源。您可以通过以下方法删除堆栈。
-
从某些目标账户中删除堆栈,同时使其他目标账户中的其他堆栈保持运行。
-
从某些区域中删除堆栈,同时使其他区域中的堆栈保持运行。
-
从堆栈集中删除堆栈,但保存它们,以便通过选择 Retain Stacks 选项来使其独立于堆栈集继续运行。然后,您可以管理 Amazon CloudFormation 中堆栈集之外的保留堆栈。
-
在准备删除您的整个堆栈集时删除堆栈集中的所有堆栈。
-
- 删除堆栈集
-
您只能在您的堆栈集中没有堆栈实例时删除它。
堆栈集操作选项
此部分中描述的选项有助于控制时间和允许的失败次数,以便成功执行堆栈集操作并防止您丢失堆栈资源。
- 最大并发账户数
-
利用此设置(适用于创建、更新和删除工作流),您可以指定在其中一次执行一项操作的目标账户的最大数量或百分比。较小的数量或百分比意味着一次在较少的目标账户中执行一项操作。按照 Deployment order(部署顺序)框中指定的顺序一次在一个区域中执行操作。例如,如果您将堆栈部署到两个区域内的 10 个目标账户,将 Maximum concurrent accounts(最大并发账户数)设置为 50 和 By percentage(按百分比),则会在移到下一个区域并开始部署到前 5 个目标账户之前,将堆栈部署到第一个区域中的 5 个账户,然后部署到第一个区域内的另外 5 个账户。
当选择按百分比时,如果指定的百分比不表示您指定的账户的整数数量,则 CloudFormation 会向下舍入。例如,如果您将堆栈部署到 10 个目标账户,并将最大并发账户数设置为 25 和按百分比,则 CloudFormation 会从同时部署 2.5 个堆栈(这是不可能的)向下舍入到同时部署 2 个堆栈。
请注意,此设置可让您指定操作数的最大值。对于大型部署,在某些情况下,并行运行的实际账户的数量可能由于服务限制而减少。最大部署速度为每个堆栈集 100 个并发堆栈实例。
- 容错
-
利用此设置(适用于创建、更新和删除工作流时),您可以指定每个区域中可发生的堆栈操作失败的最大数量或百分比,一旦超出此值,CloudFormation 就会自动停止操作。较小的数量或百分比意味着在较少的堆栈上执行该操作,但您能够更快地开始对失败的操作进行故障排除。例如,如果您将在 3 个区域内的 10 个目标账户中更新 10 个堆栈,则将 Failure tolerance (容错) 设置为 20 和 By percentage (按百分比) 意味着一个区域中最多 2 个堆栈更新可以失败,此操作继续。如果同一区域中的第三个堆栈失败,则 CloudFormation 将停止此操作。如果堆栈在第一个区域中无法进行更新,则更新操作将在该区域中继续进行,然后移到下一个区域。如果第二个区域中的两个堆栈无法更新,则故障容忍度达到 20%;如果该区域中的第三个堆栈出现故障,则CloudFormation停止更新操作,并且不会继续到后续区域。
当选择按百分比时,如果指定的百分比不表示每个区域内的堆栈的整数数量,则 CloudFormation 会向下舍入。例如,如果您将堆栈部署到 3 个区域中的 10 个目标账户,并且将容错设置为 25 和按百分比,则 CloudFormation 会从每个区域的 2.5 个堆栈的容错能力(这是不可能的)向下舍入到每个区域的 2 个堆栈的容错能力。
- 保留堆栈
-
利用此设置(适用于删除堆栈工作流),您可以使堆栈及其资源继续运行,甚至在从堆栈集中删除堆栈后也是如此。保留堆栈时,Amazon CloudFormation 会将堆栈按原样保留在各自的账户和区域中。将取消堆栈与堆栈集的关联,但将保存堆栈及其资源。删除堆栈操作完成后,您可以在创建堆栈的目标帐户(不是管理员帐户)中管理保留的堆栈。CloudFormation
- 区域并发
-
此设置在创建、更新和删除工作流程中可用,允许您选择如何StackSets部署到区域。
顺序 — 根据区域部署顺序框的指定,一次将StackSets操作部署到一个区域,前提是某个区域的部署失败不超过指定的容错值。顺序部署是默认选项。
并行 — 只要区域的部署失败不超过指定的容错值,就将StackSets操作并行部署到所有指定区域。
标签
您可以通过指定键/值对在堆栈集创建和更新操作期间添加标签。标签对于针对账单和成本分配来分类和筛选堆栈集资源非常有用。有关如何在 Amazon 中使用标签的更多信息,请参阅《Amazon Billing and Cost Management 用户指南》中的使用成本分配标签。在指定键值对后,选择 + 以保存标签。您可以通过选择标签右侧的红色 X 来删除不再使用的标签。
您应用于堆栈集的标签将应用于所有堆栈以及由您的堆栈创建的资源。您也可以在的仅限堆栈级别添加标签CloudFormation,但这些标签可能不会显示在中。StackSets
尽管StackSets不添加任何系统定义的标签,但不应以字符串aws:
开头任何标签的键名。
StackSet状态码
AmazonCloudFormationStackSets为堆栈集操作生成状态码。
下表描述了堆栈集操作的状态代码。
堆栈集操作状态 | 描述 |
---|---|
|
操作目前正在进行中。 |
|
操作已完成,未超出操作的容错能力。 |
|
无法完成操作的堆栈的数量超出了用户定义的容错能力。您为操作设置的容错能力值将在堆栈创建和更新操作期间应用于每个区域。如果区域内的失败堆栈数超出了容错能力,则该区域中的操作的状态将更改为 |
|
[
|
|
根据用户请求,正在停止该操作。 |
|
根据用户请求,已停止该操作。 |
堆栈实例状态代码
AmazonCloudFormationStackSets为堆栈实例生成状态码。
下表描述了内部堆栈实例的状态代码StackSets。
堆栈实例状态 | 描述 |
---|---|
|
堆栈与堆栈集保持最新。 |
|
出于下列原因之一,堆栈未与堆栈集的最新状态保持一致。
|
|
|
|
指定账户和区域中的操作已被取消。发生此情况可能是因为用户已停止堆栈集操作,或者因为已超出堆栈集操作的容差能力。 |
|
指定账户和区域中的操作失败。如果堆栈集操作在一个区域内足够的账户中失败,则可能会超出整个堆栈集操作的故障容差。 |
|
指定账户和区域中的操作尚未开始。 |
|
指定账户和区域中的操作当前正在进行中。 |
|
由于该账户在操作时已被暂停,因此已跳过指定账户和区域中的操作。 |
|
指定账户和区域中的操作已成功完成。 |