使用嵌套堆栈将堆栈嵌入其他堆栈 - AWS CloudFormation

使用嵌套堆栈将堆栈嵌入其他堆栈

嵌套堆栈是作为其他堆栈的一部分来创建的堆栈。您可以在另一个堆栈中使用 AWS::CloudFormation::Stack 资源创建嵌套堆栈。

随着基础设施的发展,常见模式可合并,以便在多个模板中声明相同的组件。您可以分离这些常见组件并为其创建专用模板。然后使用模板中的资源来引用其他模板,也就是创建嵌套堆栈。

例如,假如您拥有用于大多数堆栈的负载均衡器配置。您可以为负载均衡器创建专用模板,而不是将相同的配置复制并粘贴到您的模板中。然后,您只需使用资源从其他模板中引用该模板。

嵌套堆栈本身可以包含其他嵌套堆栈,构成一个堆栈层次结构,如下图所示。根堆栈是所有嵌套堆栈最终归属的顶级堆栈。此外,每个嵌套堆栈都有一个直属父堆栈。对于第一级的嵌套堆栈而言,根堆栈也是父堆栈。以下图为例:

  • 堆栈 A 是该层次结构中所有其他嵌套堆栈的根堆栈。

  • 对于堆栈 B 来说,堆栈 A 既是父堆栈,也是根堆栈。

  • 对于堆栈 D,堆栈 C 是父堆栈;而对于堆栈 C 来说,堆栈 B 是父堆栈。

作为另一个堆栈的一部分而创建的嵌套堆栈具有一个直属父堆栈,同时也具有顶级根堆栈。

拆分 CloudFormation 模板

此示例演示如何提取单个大型 CloudFormation 模板,然后使用嵌套模板将其重组为结构化程度更高、可重复使用的设计。最初,“嵌套堆栈前”模板显示在一个文件中定义了所有资源。随着资源数量不断增长,该文件可能会变得混乱且难以管理。“嵌套堆栈后”模板将资源拆分为若干较小的独立模板,称为嵌套堆栈。每个嵌套堆栈都处理一组特定的相关资源,从而使整体结构更有条理,更易于维护。

嵌套堆栈前

嵌套堆栈后

AWSTemplateFormatVersion: '2010-09-09' Parameters: InstanceType: Type: String Default: 't2.micro' Description: 'The EC2 instance type' Environment: Type: String Default: 'Production' Description: 'The deployment environment' Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-1234567890abcdef0 InstanceType: !Ref InstanceType MyS3Bucket: Type: 'AWS::S3::Bucket'
AWSTemplateFormatVersion: '2010-09-09' Resources: MyFirstNestedStack: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/amzn-s3-demo-bucket/first-nested-stack.yaml' Parameters: # Pass parameters to the nested stack if needed InstanceType: 't3.micro' MySecondNestedStack: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/amzn-s3-demo-bucket/second-nested-stack.yaml' Parameters: # Pass parameters to the nested stack if needed Environment: 'Testing' DependsOn: MyFirstNestedStack

在嵌套堆栈上执行堆栈操作

堆栈包含嵌套堆栈时,在执行某些操作时需要小心并正确处理嵌套堆栈。某些堆栈操作(如堆栈更新等)应从根堆栈启动,而不是直接在嵌套堆栈上执行。此外,有时嵌套堆栈的存在会影响根堆栈上操作的执行方式。

按照以下过程查找根堆栈和嵌套堆栈。

查看嵌套堆栈的根堆栈
  1. 登录到 AWS Management Console 并打开 AWS CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  2. 堆栈页面上,选择您要查看其根堆栈的嵌套堆栈的名称。

    嵌套堆栈的堆栈名称上方会显示 NESTED

  3. 堆栈信息选项卡的概述部分中,选择列为根堆栈的堆栈名称。

查看属于根堆栈的嵌套堆栈
  1. 从要查看其嵌套堆栈的根堆栈中,选择资源选项卡。

  2. 类型列中,查找类型为 AWS::CloudFormation::Stack 的资源。