Dies ist der AWS CDK v2-Entwicklerhandbuch. Die ältere CDK Version 1 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.
Ein AWS CDK Stack ist die kleinste einzelne Bereitstellungseinheit. Er stellt eine Sammlung von AWS Ressourcen dar, die Sie mithilfe von CDK Konstrukten definieren. Wenn Sie CDK Apps bereitstellen, werden die Ressourcen innerhalb eines CDK Stacks zusammen als AWS CloudFormation Stapel bereitgestellt. Weitere Informationen zu AWS CloudFormation Stacks finden Sie im AWS CloudFormation Benutzerhandbuch unter AWSRessourcen als eine Einheit mit AWS CloudFormation Stacks verwalten.
Sie definieren einen Stapel, indem Sie das Konstrukt erweitern oder von ihm erben. Stack
Das folgende Beispiel ist ein gängiges Muster für die Definition eines CDK Stacks in einer separaten Datei, einer sogenannten Stack-Datei. Hier erweitern oder erben wir die Stack
Klasse und definieren einen Konstruktor, der scope
id
, und akzeptiert. props
Dann rufen wir den Stack
Basisklassenkonstruktor auf, indem wir super
mit den empfangenenscope
,, und: id
props
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class MyCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define your constructs here
}
}
Das vorherige Beispiel hat nur einen Stack definiert. Um den Stack zu erstellen, muss er im Kontext Ihrer CDK App instanziiert werden. Ein gängiges Muster besteht darin, Ihre CDK App zu definieren und Ihren Stack in einer separaten Datei zu initialisieren, die als Anwendungsdatei bezeichnet wird.
Im Folgenden finden Sie ein Beispiel, das einen CDK Stack mit dem Namen MyCdkStack
erstellt. Hier wird die CDK App erstellt und MyCdkStack
im Kontext der App instanziiert:
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyCdkStack } from '../lib/my-cdk-stack';
const app = new cdk.App();
new MyCdkStack(app, 'MyCdkStack', {
});
Im folgenden Beispiel wird eine CDK App erstellt, die zwei Stapel enthält:
const app = new App();
new MyFirstStack(app, 'stack1');
new MySecondStack(app, 'stack2');
app.synth();
Über den Stapel API
Das Stack
Objekt bietet umfangreiche API Funktionen, darunter Folgendes:
-
Stack.of(construct)
— Eine statische Methode, die den Stack zurückgibt, in dem ein Konstrukt definiert ist. Dies ist nützlich, wenn Sie innerhalb eines wiederverwendbaren Konstrukts mit einem Stapel interagieren müssen. Der Aufruf schlägt fehl, wenn ein Stack im Gültigkeitsbereich nicht gefunden werden kann. -
stack.stackName
(Python:stack_name
) — Gibt den physischen Namen des Stacks zurück. Wie bereits erwähnt, haben alle AWS CDK Stacks einen physikalischen Namen, den sie während der Synthese auflösen AWS CDK können. -
stack.region
undstack.account
— Gibt die AWS Region bzw. das Konto zurück, in dem dieser Stack bereitgestellt werden soll. Diese Eigenschaften geben einen der folgenden Werte zurück:-
Das Konto oder die Region, das bei der Definition des Stacks explizit angegeben wurde
-
Ein string-codiertes Token, das in die AWS CloudFormation Pseudo-Parameter für Account und Region aufgelöst wird, um anzuzeigen, dass dieser Stack umgebungsunabhängig ist
Hinweise dazu, wie Umgebungen für Stacks bestimmt werden, finden Sie unter. Umgebungen für die AWS CDK
-
-
stack.addDependency(stack)
(Python:stack.add_dependency(stack)
— Kann verwendet werden, um die Reihenfolge der Abhängigkeiten zwischen zwei Stacks explizit zu definieren. Diese Reihenfolge wird vom cdk deploy Befehl respektiert, wenn mehrere Stacks gleichzeitig bereitgestellt werden. -
stack.tags
— Gibt einen zurück TagManager, den Sie zum Hinzufügen oder Entfernen von Tags auf Stackebene verwenden können. Dieser Tag-Manager markiert alle Ressourcen innerhalb des Stacks und markiert auch den Stack selbst, wenn er durch diesen erstellt wird. AWS CloudFormation -
stack.partition
,stack.urlSuffix
(Python:url_suffix
),stack.stackId
(Python:stack_id
) undstack.notificationArn
(Python:notification_arn
) — Gibt Tokens zurück, die in die jeweiligen AWS CloudFormation Pseudo-Parameter aufgelöst werden, wie{ "Ref": "AWS::Partition" }
z. Diese Token sind dem spezifischen Stack-Objekt zugeordnet, sodass das AWS CDK Framework stapelübergreifende Referenzen identifizieren kann. -
stack.availabilityZones
(Python:availability_zones
) — Gibt den Satz von Availability Zones zurück, die in der Umgebung verfügbar sind, in der dieser Stack bereitgestellt wird. Bei umgebungsunabhängigen Stacks wird dadurch immer ein Array mit zwei Availability Zones zurückgegeben. Bei umgebungsspezifischen Stacks AWS CDK fragt das System die Umgebung ab und gibt genau den Satz von Availability Zones zurück, die in der von Ihnen angegebenen Region verfügbar sind. -
stack.parseArn(arn)
undstack.formatArn(comps)
(Python:parse_arn
,format_arn
) — Kann verwendet werden, um mit Amazon Resource Names (ARNs) zu arbeiten. -
stack.toJsonString(obj)
(Python:to_json_string
) — Kann verwendet werden, um ein beliebiges Objekt als JSON Zeichenfolge zu formatieren, die in eine AWS CloudFormation Vorlage eingebettet werden kann. Das Objekt kann Token, Attribute und Verweise enthalten, die nur während der Bereitstellung aufgelöst werden. -
stack.templateOptions
(Python:template_options
) — Wird verwendet, um AWS CloudFormation Vorlagenoptionen wie Transformation, Beschreibung und Metadaten für Ihren Stack anzugeben.
Arbeiten mit -Stacks
Stacks werden als AWS CloudFormation Stapel in einer AWS Umgebung bereitgestellt. Die Umgebung deckt ein bestimmtes AWS-Konto und AWS-Region ab.
Wenn Sie den cdk synth
Befehl für eine App mit mehreren Stacks ausführen, enthält die Cloud-Assembly eine separate Vorlage für jede Stack-Instanz. Selbst wenn es sich bei den beiden Stacks um Instanzen derselben Klasse handelt, werden sie als zwei einzelne AWS CDK Vorlagen ausgegeben.
Sie können jede Vorlage synthetisieren, indem Sie den Stacknamen im Befehl angeben. cdk synth
Das folgende Beispiel synthetisiert die Vorlage für: stack1
$
cdk synthstack1
Dieser Ansatz unterscheidet sich konzeptionell von der üblichen Verwendung von AWS CloudFormation Vorlagen, bei der eine Vorlage mehrfach bereitgestellt und über Parameter parametrisiert werden kann.AWS CloudFormation AWS CloudFormation Parameter können zwar in der definiert werden AWS CDK, es wird jedoch generell davon abgeraten, da AWS CloudFormation Parameter erst während der Bereitstellung aufgelöst werden. Das bedeutet, dass Sie ihren Wert nicht in Ihrem Code bestimmen können.
Um beispielsweise eine Ressource auf der Grundlage eines Parameterwerts bedingt in Ihre App aufzunehmen, müssen Sie eine AWS CloudFormation Bedingung einrichten und die Ressource damit kennzeichnen. Dabei wird AWS CDK ein Ansatz verfolgt, bei dem konkrete Vorlagen zum Zeitpunkt der Synthese aufgelöst werden. Daher können Sie mithilfe einer if
Anweisung den Wert überprüfen, um festzustellen, ob eine Ressource definiert oder ein bestimmtes Verhalten angewendet werden sollte.
Anmerkung
Das AWS CDK bietet während der Synthesedauer so viel Auflösung wie möglich, um eine idiomatische und natürliche Verwendung Ihrer Programmiersprache zu ermöglichen.
Wie jedes andere Konstrukt können Stapel zu Gruppen zusammengesetzt werden. Der folgende Code zeigt ein Beispiel für einen Service, der aus drei Stacks besteht: einer Steuerungsebene, einer Datenebene und Monitoring-Stacks. Das Dienstkonstrukt ist zweimal definiert: einmal für die Betaumgebung und einmal für die Produktionsumgebung.
import { App, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
interface EnvProps {
prod: boolean;
}
// imagine these stacks declare a bunch of related resources
class ControlPlane extends Stack {}
class DataPlane extends Stack {}
class Monitoring extends Stack {}
class MyService extends Construct {
constructor(scope: Construct, id: string, props?: EnvProps) {
super(scope, id);
// we might use the prod argument to change how the service is configured
new ControlPlane(this, "cp");
new DataPlane(this, "data");
new Monitoring(this, "mon"); }
}
const app = new App();
new MyService(app, "beta");
new MyService(app, "prod", { prod: true });
app.synth();
Diese AWS CDK App besteht letztendlich aus sechs Stacks, drei für jede Umgebung:
$
cdk ls
betacpDA8372D3 betadataE23DB2BA betamon632BD457 prodcp187264CE proddataF7378CE5 prodmon631A1083
Die physikalischen Namen der AWS CloudFormation Stapel werden automatisch AWS CDK anhand des Konstruktpfads des Stacks im Baum bestimmt. Standardmäßig wird der Name eines Stacks von der Konstrukt-ID des Stack
Objekts abgeleitet. Sie können jedoch einen expliziten Namen angeben, indem Sie die stackName
Requisite (in Python,stack_name
) wie folgt verwenden.
new MyStack(this, 'not:a:stack:name', { stackName: 'this-is-stack-name' });
Arbeiten mit verschachtelten Stacks
Ein verschachtelter Stapel ist ein CDK Stapel, den Sie in einem anderen Stapel erstellen, der als übergeordneter Stapel bezeichnet wird. Sie erstellen verschachtelte Stapel mithilfe des Konstrukts. NestedStack
Durch die Verwendung verschachtelter Stacks können Sie Ressourcen auf mehrere Stapel verteilen. Verschachtelte Stapel bieten auch eine Möglichkeit, das Limit von 500 Ressourcen für Stapel zu umgehen. AWS CloudFormation Ein verschachtelter Stapel zählt nur als eine Ressource in dem Stapel, der ihn enthält. Er kann jedoch bis zu 500 Ressourcen enthalten, einschließlich zusätzlicher verschachtelter Stacks.
Der Gültigkeitsbereich eines verschachtelten Stacks muss ein Stack
Oder-Konstrukt sein. NestedStack
Der verschachtelte Stapel muss innerhalb seines übergeordneten Stacks nicht lexikalisch deklariert werden. Bei der Instanziierung des verschachtelten Stacks muss nur der übergeordnete Stapel als ersten Parameter (scope
) übergeben werden. Abgesehen von dieser Einschränkung funktioniert die Definition von Konstrukten in einem verschachtelten Stack genauso wie in einem normalen Stack.
Zum Zeitpunkt der Synthese wird der verschachtelte Stack zu einer eigenen AWS CloudFormation Vorlage synthetisiert, die bei der Bereitstellung in den AWS CDK
Staging-Bucket hochgeladen wird. Verschachtelte Stacks sind an ihren übergeordneten Stapel gebunden und werden nicht als unabhängige Bereitstellungsartefakte behandelt. Sie sind nicht in der Liste aufgeführt und können auch nicht von cdk list
bereitgestellt werden. cdk
deploy
Warnung
Änderungen der Sicherheitslage werden vor der Bereitstellung für verschachtelte Stacks nicht angezeigt. Diese Informationen werden nur für Stacks der obersten Ebene angezeigt.