AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

StackSets 概念

当您使用 StackSets 时,使用堆栈集堆栈实例堆栈

管理员账户和目标账户

管理员账户 是您用来创建堆栈集的 AWS 账户。通过登录到用于创建堆栈集的 AWS 管理员账户来管理堆栈集。目标账户 是您用来创建、更新或删除堆栈集中的一个或多个堆栈的账户。您必须先在管理员账户与目标账户之间设置信任关系,然后才能使用堆栈集在目标账户中创建堆栈。

堆栈集

利用堆栈集,您可使用一个 AWS CloudFormation 模板在 AWS 账户中跨区域创建堆栈。每个堆栈中包含的所有资源由堆栈集的 AWS CloudFormation 模板定义。在创建堆栈集时,您可指定要使用的模板以及模板所需的任何参数和功能。

在定义堆栈集后,您可以在指定的目标账户和区域中创建、更新或删除堆栈。在创建、更新或删除堆栈时,您还可以指定操作首选项,如您要在其中执行操作的区域的顺序、容错能力 (一旦超出它,堆栈操作就会停止) 以及在其中对堆栈并行执行操作的账户的数量。

堆栈集是一种区域性资源。如果您在一个区域中创建堆栈集,则无法在其他区域中查看或更改它。

堆栈实例

堆栈实例 是对区域内的目标账户中的堆栈的引用。堆栈实例可在没有堆栈的情况下存在;例如,如果出于某个原因无法创建堆栈,则堆栈实例将显示堆栈创建失败的原因。一个堆栈实例仅与一个堆栈集关联。

下图显示堆栈集、堆栈操作和堆栈之间的逻辑关系。当您更新堆栈集时,将在所有账户和区域中更新所有 关联的堆栈实例。

 一个堆栈集可用作跨多个账户和区域创建、更新或删除堆栈实例和堆栈的基础。

堆栈集操作

您可以在堆栈集上执行以下操作。

创建堆栈集

创建新堆栈集包含指定要用于创建堆栈的 AWS CloudFormation 模板、指定要在其中创建堆栈的目标账户以及标识要在其中将堆栈部署到您的目标账户的 AWS 区域。堆栈集可确保将具有相同设置的相同堆栈资源的一致部署到所选区域内的所有指定目标账户。

更新堆栈集

在更新堆栈集时,将更改推送到堆栈集中的堆栈。您可以通过下列方法之一更新堆栈集。请注意,您的模板更新始终会影响所有堆栈;您不能选择性地更新堆栈集中的某些堆栈而不是其他堆栈的模板。

  • 更改模板中的现有设置或添加新资源,例如,更新特定服务的参数设置或添加新的 Amazon EC2 实例。

  • 将该模板替换为其他模板。

  • 跨现有或其他区域在现有或其他目标账户中添加堆栈。

删除堆栈

在删除堆栈时,您将从指定的区域内的指定目标账户中删除堆栈及其所有关联资源。您可以通过以下方法删除堆栈。

  • 从某些目标账户中删除堆栈,同时使其他目标账户中的其他堆栈保持运行。

  • 从某些区域中删除堆栈,同时使其他区域中的堆栈保持运行。

  • 从堆栈集中删除堆栈,但保存它们,以便通过选择 Retain Stacks 选项来使其独立于堆栈集继续运行。保留的堆栈在堆栈集外部的 AWS CloudFormation, 中进行管理。

  • 在准备删除您的整个堆栈集时删除堆栈集中的所有堆栈。

删除堆栈集

您只能在您的堆栈集中没有堆栈实例时删除它。

堆栈集操作选项

此部分中描述的选项有助于控制时间和允许的失败次数,以便成功执行堆栈集操作并防止您丢失堆栈资源。

最大并发账户数

利用此设置 (适用于创建、更新和删除工作流),您可以指定在其中一次执行一项操作的目标账户的最大数量或百分比。较小的数量或百分比意味着一次在较少的目标账户中执行一项操作。按照 Deployment order 框中指定的顺序一次在一个区域中执行操作。例如,如果您将堆栈部署到两个区域内的 10 个目标账户,则将 Maximum concurrent accounts 设置为 50By percentage 会在移到下一个区域并开始部署到前 5 个目标账户之前,将堆栈部署到第一个区域中的 5 个账户,然后部署到第一个区域内的另外 5 个账户。

当选择 By percentage 时,如果指定的百分比不表示您指定的账户的整数数量,则 AWS CloudFormation 会向下舍入。例如,如果您将堆栈部署到 10 个目标账户,并将 Maximum concurrent accounts 设置为 25By percentage,则 AWS CloudFormation 会从同时部署 2.5 个堆栈 (这是不可能的) 向下舍入到同时部署 2 个堆栈。

请注意,此设置可让您指定操作数的最大值。对于大型部署,在某些情况下,并行运行的实际账户的数量可能由于服务限制而减少。

容错

利用此设置 (适用于创建、更新和删除工作流时),您可以指定每个区域中可发生的堆栈操作失败的最大数量或百分比,一旦超出此值,AWS CloudFormation 就会自动停止操作。较小的数量或百分比意味着在较少的堆栈上执行该操作,但您能够更快地开始对失败的操作进行故障排除。例如,如果您将在 3 个区域内的 10 个目标账户中更新 10 个堆栈,则将 Failure tolerance 设置为 20By percentage 意味着一个区域中最多 2 个堆栈更新可失败,以便此操作继续。如果同一区域中的第三个堆栈失败,则 AWS CloudFormation 将停止此操作。如果堆栈在第一个区域中无法进行更新,则更新操作将在该区域中继续进行,然后移到下一个区域。如果 2 个堆栈无法在第二个区域中进行更新,则会达到 20% 的容错能力;如果该区域中的第三个堆栈失败,则 AWS CloudFormation 会停止更新操作,并且不会转入后续区域。

当选择 By percentage 时,如果指定的百分比不表示每个区域内的堆栈的整数数量,则 AWS CloudFormation 会向下舍入。例如,如果您将堆栈部署到 3 个区域中的 10 个目标账户,并且将 Failure tolerance 设置为 25By percentage,则 AWS CloudFormation 会从每个区域的 2.5 个堆栈的容错能力 (这是不可能的) 向下舍入到每个区域的 2 个堆栈的容错能力。

保留堆栈

利用此设置 (适用于删除堆栈工作流),您可以使堆栈及其资源继续运行,甚至在从堆栈集中删除堆栈及其资源后也是如此。保留堆栈时,AWS CloudFormation 会将堆栈原样保留在各自的账户和区域中。将取消堆栈与堆栈集的关联,但将保存堆栈及其资源。删除堆栈操作完成后,您在 AWS CloudFormation 中的创建保留堆栈的目标账户 (而不是管理员账户) 中管理这些堆栈。将永久性地取消保留堆栈与堆栈集的关联;无法再次将堆栈添加到堆栈集,并且无法将其添加到新堆栈集。

Tags

您可以通过指定键值对在堆栈集创建和更新操作期间添加标签。标签对于针对账单和成本分配来分类和筛选堆栈集资源非常有用。有关如何在 AWS 中使用标签的更多信息,请参阅 AWS Billing and Cost Management 用户指南 中的使用成本分配标签。在指定键值对后,选择 + 以保存该标签。您可以通过选择标签右侧的红色 X 来删除不再使用的标签。

您应用于堆栈集的标签将应用于所有堆栈以及由您的堆栈创建的资源。可在 AWS CloudFormation 中的仅堆栈级别添加标签;但这些标签可能不会显示在 StackSets 中。

尽管 StackSets 目前未添加任何系统定义的标签,但您不应使用字符串 aws: 作为任何标签的键名称的开头。

堆栈集和堆栈实例状态代码

AWS CloudFormation StackSets 为堆栈集操作和堆栈实例生成状态代码。

下表描述了堆栈集操作的状态代码。

堆栈集操作状态 描述

RUNNING

操作目前正在进行中。

SUCCEEDED

操作已完成,未超出操作的容错能力。

FAILED

无法在其上完成操作的堆栈的数量超出了用户定义的容错能力。您为操作设置的容错能力值将在堆栈创建和更新操作期间应用于每个区域。如果区域内的失败堆栈数超出了容错能力,则该区域中的操作的状态将设置为 FAILED。整个操作的状态也将设置为 FAILED,而且 AWS CloudFormation 会在任何剩余区域中取消该操作。

STOPPING

根据用户请求,正在停止该操作。

STOPPED

根据用户请求,已停止该操作。

下表描述了堆栈集内堆栈实例的状态代码。

堆栈实例状态 描述

CURRENT

堆栈目前与堆栈集保持最新。

OUTDATED

出于下列原因之一,堆栈目前未与堆栈集保持最新。

  • 关联堆栈上的 CreateStackSetUpdateStackSet 操作失败。

  • 堆栈是失败的 CreateStackSetUpdateStackSet 操作的一部分,或在创建或更新堆栈前已停止。

INOPERABLE

DeleteStackInstances 操作已失败,并且堆栈处于不稳定状态。将从进一步的 UpdateStackSet 操作中排除处于此状态的堆栈。您可能需要执行 DeleteStackInstances 操作,同时将 RetainStacks 设置为 true,以删除堆栈实例,然后手动删除堆栈。