使用嵌套堆栈将堆栈嵌入其他堆栈
嵌套堆栈是作为其他堆栈的一部分来创建的堆栈。您可以在另一个堆栈中使用 AWS::CloudFormation::Stack 资源创建嵌套堆栈。
随着基础设施的发展,常见模式可合并,以便在多个模板中声明相同的组件。您可以分离这些常见组件并为其创建专用模板。然后使用模板中的资源来引用其他模板,也就是创建嵌套堆栈。
例如,假如您拥有用于大多数堆栈的负载均衡器配置。您可以为负载均衡器创建专用模板,而不是将相同的配置复制并粘贴到您的模板中。然后,您只需使用资源从其他模板中引用该模板。
嵌套堆栈本身可以包含其他嵌套堆栈,构成一个堆栈层次结构,如下图所示。根堆栈是所有嵌套堆栈最终归属的顶级堆栈。此外,每个嵌套堆栈都有一个直属父堆栈。对于第一级的嵌套堆栈而言,根堆栈也是父堆栈。以下图为例:
-
堆栈 A 是该层次结构中所有其他嵌套堆栈的根堆栈。
-
对于堆栈 B 来说,堆栈 A 既是父堆栈,也是根堆栈。
-
对于堆栈 D,堆栈 C 是父堆栈;而对于堆栈 C 来说,堆栈 B 是父堆栈。
拆分 CloudFormation 模板
此示例演示如何提取单个大型 CloudFormation 模板,然后使用嵌套模板将其重组为结构化程度更高、可重复使用的设计。最初,“嵌套堆栈前”模板显示在一个文件中定义了所有资源。随着资源数量不断增长,该文件可能会变得混乱且难以管理。“嵌套堆栈后”模板将资源拆分为若干较小的独立模板,称为嵌套堆栈。每个嵌套堆栈都处理一组特定的相关资源,从而使整体结构更有条理,更易于维护。
嵌套堆栈前 |
嵌套堆栈后 |
---|---|
|
|
在嵌套堆栈上执行堆栈操作
堆栈包含嵌套堆栈时,在执行某些操作时需要小心并正确处理嵌套堆栈。某些堆栈操作(如堆栈更新等)应从根堆栈启动,而不是直接在嵌套堆栈上执行。此外,有时嵌套堆栈的存在会影响根堆栈上操作的执行方式。
按照以下过程查找根堆栈和嵌套堆栈。
查看嵌套堆栈的根堆栈
-
登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
在堆栈页面上,选择您要查看其根堆栈的嵌套堆栈的名称。
嵌套堆栈的堆栈名称上方会显示 NESTED。
-
在堆栈信息选项卡的概述部分中,选择列为根堆栈的堆栈名称。
查看属于根堆栈的嵌套堆栈
-
从要查看其嵌套堆栈的根堆栈中,选择资源选项卡。
-
在类型列中,查找类型为 AWS::CloudFormation::Stack 的资源。