Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Beispiel: Erstellen Sie eine CDK-App mit mehreren Stacks

Fokusmodus
Beispiel: Erstellen Sie eine CDK-App mit mehreren Stacks - AWS Cloud Development Kit (AWS CDK) v2

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.

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.

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.

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.

Sie können eine AWS Cloud Development Kit (AWS CDK) Anwendung erstellen, die mehrere Stacks enthält. Wenn Sie die AWS CDK App bereitstellen, wird jeder Stapel zu einer eigenen AWS CloudFormation Vorlage. Sie können jeden Stack auch einzeln synthetisieren und bereitstellen, indem Sie den AWS CDK CLI cdk deployBefehl.

In diesem Beispiel behandeln wir Folgendes:

  • Wie man die Stack Klasse erweitert, um neue Eigenschaften oder Argumente zu akzeptieren.

  • Wie man Eigenschaften verwendet, um festzustellen, welche Ressourcen der Stack enthält und wie sie konfiguriert sind.

  • Wie instanziiert man mehrere Stacks aus dieser Klasse.

Das Beispiel in diesem Thema verwendet eine boolesche Eigenschaft mit dem Namen encryptBucket (Python:encrypt_bucket). Es gibt an, ob ein Amazon S3 S3-Bucket verschlüsselt werden soll. Wenn ja, ermöglicht der Stack die Verschlüsselung mithilfe eines Schlüssels, der von AWS Key Management Service (AWS KMS) verwaltet wird. Die App erstellt zwei Instanzen dieses Stacks, eine mit Verschlüsselung und eine ohne.

Voraussetzungen

In diesem Beispiel wird davon ausgegangen, dass alle Schritte für die ersten Schritte abgeschlossen wurden.

Erstellen eines CDK-Projekts

Zunächst erstellen wir ein CDK-Projekt mit dem CDK CLI:

TypeScript
mkdir multistack cd multistack cdk init --language=typescript
JavaScript
mkdir multistack cd multistack cdk init --language=javascript
Python
mkdir multistack cd multistack cdk init --language=python source .venv/bin/activate # On Windows, run '.\venv\Scripts\activate' instead pip install -r requirements.txt
Java
mkdir multistack cd multistack cdk init --language=java

Sie können das resultierende Maven-Projekt in Ihre Java-IDE importieren.

C#
mkdir multistack cd multistack cdk init --language=csharp

Sie können die Datei src/Pipeline.sln in Visual Studio öffnen.

mkdir multistack cd multistack cdk init --language=typescript

Fügen Sie einen optionalen Parameter hinzu

Das props Argument des Stack Konstruktors erfüllt die Schnittstelle. StackProps In diesem Beispiel möchten wir, dass der Stack eine zusätzliche Eigenschaft akzeptiert, die uns mitteilt, ob der Amazon S3 S3-Bucket verschlüsselt werden soll. Dazu erstellen wir eine Schnittstelle oder Klasse, die die Eigenschaft enthält. Dadurch kann der Compiler sicherstellen, dass die Eigenschaft einen booleschen Wert hat, und aktiviert die automatische Vervollständigung für diese Eigenschaft in Ihrer IDE.

Wir öffnen unsere Stack-Datei in unserer IDE oder unserem Editor und fügen die neue Schnittstelle, Klasse oder das neue Argument hinzu. Neue Zeilen sind fett hervorgehoben:

TypeScript

Datei: lib/multistack-stack.ts

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; interface MultiStackProps extends cdk.StackProps { encryptBucket?: boolean; } export class MultistackStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: MultiStackProps) { super(scope, id, props); // The code that defines our stack goes here } }
JavaScript

Datei: lib/multistack-stack.js

JavaScript hat keine Schnittstellenfunktion; wir müssen keinen Code hinzufügen.

const cdk = require('aws-cdk-stack'); class MultistackStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); // The code that defines our stack goes here } } module.exports = { MultistackStack }
Python

Datei: multistack/multistack_stack.py

Python hat keine Schnittstellenfunktion, daher erweitern wir unseren Stack so, dass er die neue Eigenschaft akzeptiert, indem wir ein Schlüsselwortargument hinzufügen.

import aws_cdk as cdk from constructs import Construct class MultistackStack(cdk.Stack): # The Stack class doesn't know about our encrypt_bucket parameter, # so accept it separately and pass along any other keyword arguments. def __init__(self, scope: Construct, id: str, *, encrypt_bucket=False, **kwargs) -> None: super().__init__(scope, id, **kwargs) # The code that defines our stack goes here
Java

Datei: src/main/java/com/myorg/MultistackStack.java

Es ist komplizierter, als wir wirklich wollen, einen Requisitentyp in Java zu erweitern. Schreiben Sie stattdessen den Konstruktor des Stacks so, dass er einen optionalen booleschen Parameter akzeptiert. Da props es sich um ein optionales Argument handelt, schreiben wir einen zusätzlichen Konstruktor, mit dem Sie ihn überspringen können. Standardmäßig ist es. false

package com.myorg; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.constructs.Construct; import software.amazon.awscdk.services.s3.Bucket; public class MultistackStack extends Stack { // additional constructors to allow props and/or encryptBucket to be omitted public MultistackStack(final Construct scope, final String id, boolean encryptBucket) { this(scope, id, null, encryptBucket); } public MultistackStack(final Construct scope, final String id) { this(scope, id, null, false); } public MultistackStack(final Construct scope, final String id, final StackProps props, final boolean encryptBucket) { super(scope, id, props); // The code that defines our stack goes here } }
C#

Datei: src/Multistack/MultistackStack.cs

using Amazon.CDK; using constructs; namespace Multistack { public class MultiStackProps : StackProps { public bool? EncryptBucket { get; set; } } public class MultistackStack : Stack { public MultistackStack(Construct scope, string id, MultiStackProps props) : base(scope, id, props) { // The code that defines our stack goes here } } }

Datei: lib/multistack-stack.ts

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; interface MultiStackProps extends cdk.StackProps { encryptBucket?: boolean; } export class MultistackStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: MultiStackProps) { super(scope, id, props); // The code that defines our stack goes here } }

Die neue Eigenschaft ist optional. Wenn encryptBucket (Python:encrypt_bucket) nicht vorhanden istundefined, ist sein Wert oder das lokale Äquivalent. Der Bucket ist standardmäßig unverschlüsselt.

Definieren Sie die Stack-Klasse

Als Nächstes definieren wir unsere Stack-Klasse mithilfe unserer neuen Eigenschaft. Neuer Code ist fett hervorgehoben:

TypeScript

Datei: lib/multistack-stack.ts

import * as cdk from 'aws-cdk-lib'; import { Construct } from constructs; import * as s3 from 'aws-cdk-lib/aws-s3'; interface MultistackProps extends cdk.StackProps { encryptBucket?: boolean; } export class MultistackStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: MultistackProps) { super(scope, id, props); // Add a Boolean property "encryptBucket" to the stack constructor. // If true, creates an encrypted bucket. Otherwise, the bucket is unencrypted. // Encrypted bucket uses KMS-managed keys (SSE-KMS). if (props && props.encryptBucket) { new s3.Bucket(this, "MyGroovyBucket", { encryption: s3.BucketEncryption.KMS_MANAGED, removalPolicy: cdk.RemovalPolicy.DESTROY }); } else { new s3.Bucket(this, "MyGroovyBucket", { removalPolicy: cdk.RemovalPolicy.DESTROY}); } } }
JavaScript

Datei: lib/multistack-stack.js

const cdk = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class MultistackStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); // Add a Boolean property "encryptBucket" to the stack constructor. // If true, creates an encrypted bucket. Otherwise, the bucket is unencrypted. // Encrypted bucket uses KMS-managed keys (SSE-KMS). if ( props && props.encryptBucket) { new s3.Bucket(this, "MyGroovyBucket", { encryption: s3.BucketEncryption.KMS_MANAGED, removalPolicy: cdk.RemovalPolicy.DESTROY }); } else { new s3.Bucket(this, "MyGroovyBucket", { removalPolicy: cdk.RemovalPolicy.DESTROY}); } } } module.exports = { MultistackStack }
Python

Datei: multistack/multistack_stack.py

import aws_cdk as cdk from constructs import Construct from aws_cdk import aws_s3 as s3 class MultistackStack(cdk.Stack): # The Stack class doesn't know about our encrypt_bucket parameter, # so accept it separately and pass along any other keyword arguments. def __init__(self, scope: Construct, id: str, *, encrypt_bucket=False, **kwargs) -> None: super().__init__(scope, id, **kwargs) # Add a Boolean property "encryptBucket" to the stack constructor. # If true, creates an encrypted bucket. Otherwise, the bucket is unencrypted. # Encrypted bucket uses KMS-managed keys (SSE-KMS). if encrypt_bucket: s3.Bucket(self, "MyGroovyBucket", encryption=s3.BucketEncryption.KMS_MANAGED, removal_policy=cdk.RemovalPolicy.DESTROY) else: s3.Bucket(self, "MyGroovyBucket", removal_policy=cdk.RemovalPolicy.DESTROY)
Java

Datei: src/main/java/com/myorg/MultistackStack.java

package com.myorg; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.constructs.Construct; import software.amazon.awscdk.RemovalPolicy; import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.s3.BucketEncryption; public class MultistackStack extends Stack { // additional constructors to allow props and/or encryptBucket to be omitted public MultistackStack(final Construct scope, final String id, boolean encryptBucket) { this(scope, id, null, encryptBucket); } public MultistackStack(final Construct scope, final String id) { this(scope, id, null, false); } // main constructor public MultistackStack(final Construct scope, final String id, final StackProps props, final boolean encryptBucket) { super(scope, id, props); // Add a Boolean property "encryptBucket" to the stack constructor. // If true, creates an encrypted bucket. Otherwise, the bucket is // unencrypted. Encrypted bucket uses KMS-managed keys (SSE-KMS). if (encryptBucket) { Bucket.Builder.create(this, "MyGroovyBucket") .encryption(BucketEncryption.KMS_MANAGED) .removalPolicy(RemovalPolicy.DESTROY).build(); } else { Bucket.Builder.create(this, "MyGroovyBucket") .removalPolicy(RemovalPolicy.DESTROY).build(); } } }
C#

Datei: src/Multistack/MultistackStack.cs

using Amazon.CDK; using Amazon.CDK.AWS.S3; namespace Multistack { public class MultiStackProps : StackProps { public bool? EncryptBucket { get; set; } } public class MultistackStack : Stack { public MultistackStack(Construct scope, string id, IMultiStackProps props = null) : base(scope, id, props) { // Add a Boolean property "EncryptBucket" to the stack constructor. // If true, creates an encrypted bucket. Otherwise, the bucket is unencrypted. // Encrypted bucket uses KMS-managed keys (SSE-KMS). if (props?.EncryptBucket ?? false) { new Bucket(this, "MyGroovyBucket", new BucketProps { Encryption = BucketEncryption.KMS_MANAGED, RemovalPolicy = RemovalPolicy.DESTROY }); } else { new Bucket(this, "MyGroovyBucket", new BucketProps { RemovalPolicy = RemovalPolicy.DESTROY }); } } } }

Datei: lib/multistack-stack.ts

import * as cdk from 'aws-cdk-lib'; import { Construct } from constructs; import * as s3 from 'aws-cdk-lib/aws-s3'; interface MultistackProps extends cdk.StackProps { encryptBucket?: boolean; } export class MultistackStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: MultistackProps) { super(scope, id, props); // Add a Boolean property "encryptBucket" to the stack constructor. // If true, creates an encrypted bucket. Otherwise, the bucket is unencrypted. // Encrypted bucket uses KMS-managed keys (SSE-KMS). if (props && props.encryptBucket) { new s3.Bucket(this, "MyGroovyBucket", { encryption: s3.BucketEncryption.KMS_MANAGED, removalPolicy: cdk.RemovalPolicy.DESTROY }); } else { new s3.Bucket(this, "MyGroovyBucket", { removalPolicy: cdk.RemovalPolicy.DESTROY}); } } }

Erstellen Sie zwei Stack-Instanzen

In unserer Anwendungsdatei fügen wir den Code hinzu, um zwei separate Stapel zu instanziieren. Wir löschen die bestehende MultistackStack Definition und definieren unsere beiden Stapel. Der neue Code ist fett hervorgehoben:

TypeScript

Datei: bin/multistack.ts

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { MultistackStack } from '../lib/multistack-stack'; const app = new cdk.App(); new MultistackStack(app, "MyWestCdkStack", { env: {region: "us-west-1"}, encryptBucket: false }); new MultistackStack(app, "MyEastCdkStack", { env: {region: "us-east-1"}, encryptBucket: true }); app.synth();
JavaScript

Datei: bin/multistack.js

#!/usr/bin/env node const cdk = require('aws-cdk-lib'); const { MultistackStack } = require('../lib/multistack-stack'); const app = new cdk.App(); new MultistackStack(app, "MyWestCdkStack", { env: {region: "us-west-1"}, encryptBucket: false }); new MultistackStack(app, "MyEastCdkStack", { env: {region: "us-east-1"}, encryptBucket: true }); app.synth();
Python

Datei: ./app.py

#!/usr/bin/env python3 import aws_cdk as cdk from multistack.multistack_stack import MultistackStack app = cdk.App() MultistackStack(app, "MyWestCdkStack", env=cdk.Environment(region="us-west-1"), encrypt_bucket=False) MultistackStack(app, "MyEastCdkStack", env=cdk.Environment(region="us-east-1"), encrypt_bucket=True) app.synth()
Java

Datei: src/main/java/com/myorg/MultistackApp.java

package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Environment; import software.amazon.awscdk.StackProps; public class MultistackApp { public static void main(final String argv[]) { App app = new App(); new MultistackStack(app, "MyWestCdkStack", StackProps.builder() .env(Environment.builder() .region("us-west-1") .build()) .build(), false); new MultistackStack(app, "MyEastCdkStack", StackProps.builder() .env(Environment.builder() .region("us-east-1") .build()) .build(), true); app.synth(); } }
C#

Datei: src/Multistack/Program .cs

using Amazon.CDK; namespace Multistack { class Program { static void Main(string[] args) { var app = new App(); new MultistackStack(app, "MyWestCdkStack", new MultiStackProps { Env = new Environment { Region = "us-west-1" }, EncryptBucket = false }); new MultistackStack(app, "MyEastCdkStack", new MultiStackProps { Env = new Environment { Region = "us-east-1" }, EncryptBucket = true }); app.Synth(); } } }

Datei: bin/multistack.ts

#!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { MultistackStack } from '../lib/multistack-stack'; const app = new cdk.App(); new MultistackStack(app, "MyWestCdkStack", { env: {region: "us-west-1"}, encryptBucket: false }); new MultistackStack(app, "MyEastCdkStack", { env: {region: "us-east-1"}, encryptBucket: true }); app.synth();

Dieser Code verwendet die neue encryptBucket (Python:encrypt_bucket) -Eigenschaft der MultistackStack Klasse, um Folgendes zu instanziieren:

  • Ein Stapel mit einem verschlüsselten Amazon S3 S3-Bucket in der us-east-1 AWS Region.

  • Ein Stapel mit einem unverschlüsselten Amazon S3 S3-Bucket in der us-west-1 AWS Region.

Synthetisieren und implementieren Sie den Stack

Als Nächstes können wir Stacks aus der App bereitstellen. Zuerst synthetisieren wir eine AWS CloudFormation Vorlage für. MyEastCdkStack Dies ist der Stack us-east-1 mit dem verschlüsselten Amazon S3 S3-Bucket.

$ cdk synth MyEastCdkStack

Um diesen Stack in unserer AWS Umgebung bereitzustellen, können wir einen der folgenden Befehle ausführen. Der erste Befehl verwendet unser AWS Standardprofil, um die Anmeldeinformationen für die Bereitstellung des Stacks abzurufen. Der zweite verwendet ein Profil, das wir angeben. Denn PROFILE_NAME wir können den Namen eines AWS CLI Profils ersetzen, das entsprechende Anmeldeinformationen für die Bereitstellung auf dem enthält us-east-1 AWS-Region.

$ cdk deploy MyEastCdkStack
$ cdk deploy MyEastCdkStack --profile=PROFILE_NAME

Bereinigen

Um Gebühren für die von uns bereitgestellten Ressourcen zu vermeiden, löschen wir den Stack mit dem folgenden Befehl:

cdk destroy MyEastCdkStack

Der Löschvorgang schlägt fehl, wenn im Bucket des Stacks etwas gespeichert ist. Das sollte nicht der Fall sein, da wir nur den Bucket erstellt haben. Wenn wir etwas in den Bucket gelegt haben, müssen wir den Bucket-Inhalt löschen, bevor wir den Stapel zerstören. Wir können das AWS Management Console oder das verwenden AWS CLI , um den Inhalt des Buckets zu löschen.

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.