使用巢狀堆疊在其他堆疊中嵌入堆疊 - 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/雲形成。

  2. 在「堆疊」頁面上,選擇您要檢視根堆疊的巢狀堆疊名稱。

    巢狀堆疊會顯示在其堆疊名稱NESTED上方。

  3. 在 [堆疊資訊] 索引標籤的 [概觀] 區段中,選擇列為根堆疊的堆疊名稱。

檢視屬於根堆疊的巢狀堆疊
  1. 從您要檢視其巢狀堆疊的根堆疊中,選擇 [資源] 索引標籤。

  2. 在「類型」欄中,尋找類型為:: AWSCloudFormation: Stack 的資源。