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 deploy
Befehl.
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:
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:
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:
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:
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.