Teilen Sie eine Vorlage mithilfe verschachtelter Stapel in wiederverwendbare Teile auf - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Teilen Sie eine Vorlage mithilfe verschachtelter Stapel in wiederverwendbare Teile auf

Wenn Ihre Infrastruktur wächst, müssen Sie möglicherweise wiederholt identische Ressourcenkonfigurationen für mehrere Vorlagen erstellen. Um diese Redundanz zu vermeiden, können Sie diese allgemeinen Konfigurationen in spezielle Vorlagen unterteilen. Anschließend können Sie die AWS::CloudFormation::StackRessource in anderen Vorlagen verwenden, um auf diese speziellen Vorlagen zu verweisen und verschachtelte Stapel zu erstellen.

Nehmen wir beispielsweise an, Sie haben eine Load Balancer-Konfiguration, die Sie für die meisten Ihrer Stacks verwenden. Anstatt dieselbe Konfigurationen zu kopieren und in Ihre Vorlagen einzufügen, können Sie eine dedizierte Vorlage für den Load Balancer erstellen. Dann können Sie in anderen Vorlagen, die dieselbe Load Balancer-Konfiguration erfordern, auf diese Vorlage verweisen.

Verschachtelte Stapel können selbst andere verschachtelte Stapel enthalten, was zu einer Hierarchie von Stapeln führt, wie in der folgenden Abbildung dargestellt. Der Root-Stack ist der Stack der obersten Ebene, zu dem letztendlich alle verschachtelten Stacks gehören. Jeder verschachtelte Stapel hat einen unmittelbaren übergeordneten Stapel. Bei der ersten Ebene verschachtelter Stacks ist der Root-Stack auch der übergeordnete Stack.

  • Stack A ist der Root-Stack für alle anderen – verschachtelten – Stacks in der Hierarchie.

  • Für Stack B ist Stack A sowohl der übergeordnete Stack als auch der Root-Stack.

  • Für Stack D ist Stack C der übergeordnete Stack, während Stack B der übergeordnete Stack für Stack C ist.

Verschachtelte Stacks, die als Teil eines anderen Stacks erstellt werden, besitzen einen unmittelbar übergeordneten Stack sowie den Root-Stack in der Hauptebene.

Beispiel für das Teilen einer Vorlage vor und nach dem Aufteilen

Dieses Beispiel zeigt, wie Sie eine einzelne, große CloudFormation Vorlage mithilfe verschachtelter Vorlagen in ein strukturierteres und wiederverwendbares Design umorganisieren können. Anfänglich zeigt die Vorlage „Before Nesting Stacks“ alle in einer Datei definierten Ressourcen. Dies kann unübersichtlich und schwer zu verwalten werden, wenn die Anzahl der Ressourcen zunimmt. Die Vorlage „After Nesting Stacks“ teilt die Ressourcen in kleinere, separate Vorlagen auf. Jeder verschachtelte Stapel verwaltet einen bestimmten Satz verwandter Ressourcen, wodurch die Gesamtstruktur übersichtlicher und einfacher zu verwalten ist.

Vor dem Verschachteln von Stapeln

Nach dem Verschachteln von Stapeln

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

Beispiel für eine verschachtelte Stack-Architektur

In diesem Abschnitt wird eine verschachtelte Stack-Architektur demonstriert, die aus einem Stack der obersten Ebene besteht, der auf einen verschachtelten Stack verweist. Der verschachtelte Stack stellt eine Lambda-Funktion von Node.js bereit, empfängt einen Parameterwert vom Stack der obersten Ebene und gibt eine Ausgabe zurück, die über den Stack der obersten Ebene verfügbar gemacht wird.

Schritt 1: Erstellen Sie eine Vorlage für den verschachtelten Stack auf Ihrem lokalen System

Das folgende Beispiel zeigt das Format der Vorlage für verschachtelte Stacks.

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: Nested stack template for Lambda function deployment Parameters: MemorySize: Type: Number Default: 128 MinValue: 128 MaxValue: 10240 Description: Lambda function memory allocation (128-10240 MB) Resources: LambdaFunction: Type: AWS::Lambda::Function Properties: FunctionName: !Sub "${AWS::StackName}-Function" Runtime: nodejs18.x Handler: index.handler Role: !GetAtt LambdaExecutionRole.Arn Code: ZipFile: | exports.handler = async (event) => { return { statusCode: 200, body: JSON.stringify('Hello from Lambda!') }; }; MemorySize: !Ref MemorySize LambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' Outputs: LambdaArn: Description: ARN of the created Lambda function Value: !GetAtt LambdaFunction.Arn

Schritt 2: Erstellen Sie eine Vorlage für den Top-Level-Stack auf Ihrem lokalen System

Das folgende Beispiel zeigt das Format der Vorlage für den obersten Stack und die AWS::CloudFormation::StackRessource, die auf den Stack verweist, den Sie im vorherigen Schritt erstellt haben.

YAML

AWSTemplateFormatVersion: 2010-09-09 Description: Top-level stack template that deploys a nested stack Resources: NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: /path_to_template/nested-template.yaml Parameters: MemorySize: 256 Outputs: NestedStackLambdaArn: Description: ARN of the Lambda function from nested stack Value: !GetAtt NestedStack.Outputs.LambdaArn

Schritt 3: Verpacken und Bereitstellen der Vorlagen

Anmerkung

Wenn Sie lokal mit Vorlagen arbeiten, kann Ihnen der AWS CLI package Befehl dabei helfen, Vorlagen für die Bereitstellung vorzubereiten. Es verarbeitet automatisch den Upload lokaler Artefakte auf Amazon S3 (einschließlichTemplateURL) und generiert eine neue Vorlagendatei mit aktualisierten Verweisen auf diese S3-Speicherorte. Weitere Informationen finden Sie unter Laden Sie lokale Artefakte in einen S3-Bucket hoch mit dem AWS CLI.

Als Nächstes können Sie den packageBefehl verwenden, um die verschachtelte Vorlage in einen Amazon S3 S3-Bucket hochzuladen.

aws cloudformation package \ --s3-bucket amzn-s3-demo-bucket \ --template /path_to_template/top-level-template.yaml \ --output-template-file packaged-template.yaml \ --output json

Der Befehl generiert eine neue Vorlage in dem von --output-template-file angegebenen Pfad. Es ersetzt die TemplateURL Referenz durch den Amazon S3 S3-Standort, wie unten gezeigt.

Resultierende Vorlage

AWSTemplateFormatVersion: 2010-09-09 Description: Top-level stack template that deploys a nested stack Resources: NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: https://s3.us-west-2.amazonaws.com/amzn-s3-demo-bucket/8b3bb7aa7abfc6e37e2d06b869484bed.template Parameters: MemorySize: 256 Outputs: NestedStackLambdaArn: Description: ARN of the Lambda function from nested stack Value: Fn::GetAtt: - NestedStack - Outputs.LambdaArn

Nachdem Sie den package Befehl ausgeführt haben, können Sie die verarbeitete Vorlage mithilfe des deployBefehls bereitstellen. Bei verschachtelten Stacks, die IAM-Ressourcen enthalten, müssen Sie die IAM-Funktionen bestätigen, indem Sie die Option angeben. --capabilities

aws cloudformation deploy \ --template-file packaged-template.yaml \ --stack-name stack-name \ --capabilities CAPABILITY_NAMED_IAM

Ausführen von Stack-Operationen auf verschachtelten Stacks

Wenn Sie mit verschachtelten Stacks arbeiten, müssen Sie diese während des Betriebs sorgfältig behandeln. Bestimmte Stack-Operationen, wie z. B. Stack-Updates, sollten vom Root-Stack aus initiiert und nicht direkt auf den verschachtelten Stacks ausgeführt werden. Wenn Sie einen Root-Stack aktualisieren, werden nur verschachtelte Stacks mit Vorlagenänderungen aktualisiert.

Darüber hinaus kann das Vorhandensein der verschachtelten Stacks die Operationen auf dem Root-Stack beeinflussen. Wenn beispielsweise ein verschachtelter Stack im UPDATE_ROLLBACK_IN_PROGRESS Status stecken bleibt, wartet der Root-Stack, bis dieser verschachtelte Stack sein Rollback abgeschlossen hat, bevor er fortfährt. Bevor Sie mit den Aktualisierungsvorgängen fortfahren, stellen Sie sicher, dass Sie über IAM-Berechtigungen verfügen, um ein Stack-Update abzubrechen, falls es zurückgesetzt wird. Weitere Informationen finden Sie unter Steuern CloudFormation Sie den Zugriff mit AWS Identity and Access Management.

Gehen Sie wie folgt vor, um den Root-Stack und die verschachtelten Stacks zu finden.

So zeigen Sie den Root-Stack eines verschachtelten Stacks an
  1. Melden Sie sich bei /cloudformation an AWS Management Console und öffnen Sie die AWS CloudFormation Konsole. https://console.aws.amazon.com

  2. Wählen Sie auf der Seite Stacks den Namen des verschachtelten Stacks aus, dessen Root-Stack Sie anzeigen möchten.

    Bei verschachtelten Stacks wird NESTED über ihrem Stacknamen angezeigt.

  3. Wählen Sie auf der Registerkarte Stack-Info im Abschnitt Übersicht den Stack-Namen aus, der als Root-Stack aufgeführt ist.

So zeigen Sie die verschachtelten Stacks eines Root-Stacks an
  1. Wählen Sie aus dem Root-Stack, dessen verschachtelte Stapel Sie anzeigen möchten, den Tab Ressourcen aus.

  2. Suchen Sie in der Spalte Typ nach Ressourcen des Typs. AWS::CloudFormation::Stack