AWS CDK Apps - AWS Cloud Development Kit (AWS CDK) v2

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet 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.

AWS CDK Apps

Die AWS Cloud Development Kit (AWS CDK) Anwendung oder App ist eine Sammlung von einem oder mehreren CDK-Stacks. Stacks sind eine Sammlung von einem oder mehreren Konstrukten, die AWS Ressourcen und Eigenschaften definieren. Daher wird die Gesamtgruppierung Ihrer Stacks und Konstrukte als CDK-App bezeichnet.

Definieren von Apps

Sie erstellen eine App, indem Sie eine App-Instance in der Anwendungsdatei Ihres Projekts definieren. Dazu importieren und verwenden Sie das AppKonstrukt aus der AWS Construct Library. Für das AppKonstrukt sind keine Initialisierungsargumente erforderlich. Es ist das einzige Konstrukt, das als Stamm verwendet werden kann.

Die Stack Klassen App und aus der AWS Construct Library sind eindeutige Konstrukte. Im Vergleich zu anderen Konstrukten konfigurieren sie keine AWS Ressourcen selbst. Stattdessen werden sie verwendet, um Kontext für Ihre anderen Konstrukte bereitzustellen. Alle Konstrukte, die AWS Ressourcen darstellen, müssen direkt oder indirekt im Rahmen eines Stack Konstrukts definiert werden. Stack Konstrukte werden im Rahmen eines AppKonstrukts definiert.

Apps werden dann synthetisiert, um AWS CloudFormation Vorlagen für Ihre Stacks zu erstellen. Im Folgenden wird ein Beispiel gezeigt:

TypeScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
JavaScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
Python
app = App() MyFirstStack(app, "hello-cdk") app.synth()
Java
App app = new App(); new MyFirstStack(app, "hello-cdk"); app.synth();
C#
var app = new App(); new MyFirstStack(app, "hello-cdk"); app.Synth();
Go
app := awscdk.NewApp(nil) MyFirstStack(app, "MyFirstStack", &MyFirstStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil)

Stacks innerhalb einer einzigen App können sich problemlos auf die Ressourcen und Eigenschaften des jeweils anderen beziehen. Die AWS CDK leitet Abhängigkeiten zwischen Stacks ab, sodass sie in der richtigen Reihenfolge bereitgestellt werden können. Sie können einen oder alle Stacks innerhalb einer App mit einem einzigen cdk deploy Befehl bereitstellen.

Der Konstruktbaum

Konstrukte werden innerhalb anderer scope Konstrukte mit dem Argument definiert, das an jedes Konstrukt übergeben wird, wobei die App Klasse das Stammverzeichnis ist. Auf diese Weise definiert eine AWS CDK App eine Hierarchie von Konstrukten, die als Konstruktbaum bezeichnet wird.

Das Stammverzeichnis dieses Baums ist Ihre App, eine Instance der -AppKlasse. Innerhalb der App instanziieren Sie einen oder mehrere Stacks. Innerhalb von Stacks instanziieren Sie Konstrukte, die selbst Ressourcen oder andere Konstrukte instanziieren können usw.

Konstrukte werden immer explizit im Rahmen eines anderen Konstrukts definiert, wodurch Beziehungen zwischen Konstrukten entstehen. Fast immer sollten Sie this (in Python, self) als Bereich übergeben, was darauf hinweist, dass das neue Konstrukt ein untergeordnetes Element des aktuellen Konstrukts ist. Das beabsichtigte Muster besteht darin, dass Sie Ihr Konstrukt von ableiten Constructund dann die Konstrukte instanziieren, die es in seinem Konstruktor verwendet.

Durch die explizite Übergabe des Bereichs kann jedes Konstrukt sich selbst zum Baum hinzufügen, wobei dieses Verhalten vollständig in der Construct Basisklasse enthalten ist. Es funktioniert in jeder Sprache, die von unterstützt wird, auf die gleiche Weise AWS CDK und erfordert keine zusätzliche Anpassung.

Wichtig

Technisch gesehen ist es möglich, einen anderen Bereich als this beim Instanziieren eines Konstrukts zu übergeben. Sie können Konstrukte überall im Baum oder sogar in einem anderen Stack in derselben App hinzufügen. Sie könnten beispielsweise eine Funktion im Mixin-Stil schreiben, die Konstrukte zu einem Bereich hinzufügt, der als Argument übergeben wird. Die praktische Schwierigkeiten besteht darin, dass Sie nicht einfach sicherstellen können, dass die IDs, die Sie für Ihre Konstrukte auswählen, innerhalb des Geltungsbereichs einer anderen Person eindeutig sind. Die Praxis macht es Ihrem Code auch schwieriger, ihn zu verstehen, zu warten und wiederzuverwenden. Es ist fast immer besser, eine Möglichkeit zu finden, Ihre Absicht auszudrücken, ohne das scope Argument zu missbrauchen.

Der AWS CDK verwendet die IDs aller Konstrukte im Pfad vom Stamm des Baums zu jedem untergeordneten Konstrukt, um die eindeutigen IDs zu generieren, die von benötigt werden AWS CloudFormation. Dieser Ansatz bedeutet, dass Konstrukt-IDs nur innerhalb ihres Bereichs und nicht innerhalb des gesamten Stacks wie in nativen eindeutig sein müssen AWS CloudFormation. Wenn Sie ein Konstrukt jedoch in einen anderen Bereich verschieben, ändert sich seine generierte Stack- AWS CloudFormation eindeutige ID und betrachtet sie nicht als dieselbe Ressource.

Der Konstruktbaum ist getrennt von den Konstrukten, die Sie in Ihrem AWS CDK Code definieren. Es ist jedoch über das node Konstruktattribut zugänglich, das ein Verweis auf den Knoten ist, der dieses Konstrukt im Baum darstellt. Jeder Knoten ist eine Node Instance, deren Attribute Zugriff auf den Stamm des Baums sowie auf die übergeordneten Bereiche und untergeordneten Elemente des Knotens gewähren.

  1. node.children – Die direkten untergeordneten Elemente des Konstrukts.

  2. node.id – Die Kennung des Konstrukts innerhalb seines Bereichs.

  3. node.path – Der vollständige Pfad des Konstrukts, einschließlich der IDs aller übergeordneten Elemente.

  4. node.root – Der Stamm des Konstruktbaums (die App).

  5. node.scope – Der Bereich (übergeordnet) des Konstrukts oder nicht definiert, wenn der Knoten der Stamm ist.

  6. node.scopes – Alle übergeordneten Elemente des Konstrukts bis zum Stamm.

  7. node.uniqueId – Die eindeutige alphanumerische Kennung für dieses Konstrukt innerhalb des Baums (standardmäßig generiert von node.path und einem Hash).

Der Konstruktbaum definiert eine implizite Reihenfolge, in der Konstrukte mit Ressourcen in der endgültigen AWS CloudFormation Vorlage synthetisiert werden. Wo eine Ressource vor einer anderen erstellt werden muss AWS CloudFormation oder die AWS Construct Library die Abhängigkeit im Allgemeinen ableitet. Anschließend stellen sie sicher, dass die Ressourcen in der richtigen Reihenfolge erstellt werden.

Sie können auch eine explizite Abhängigkeit zwischen zwei Knoten hinzufügen, indem Sie verwendennode.addDependency(). Weitere Informationen finden Sie unter Abhängigkeiten in der APIAWS CDK -Referenz zu .

Die AWS CDK bietet eine einfache Möglichkeit, jeden Knoten in der Konstruktstruktur zu besuchen und einen Vorgang für jeden Knoten durchzuführen. Weitere Informationen finden Sie unter Aspekte.

Der Anwendungslebenszyklus

Wenn Sie Ihre CDK-App bereitstellen, finden die folgenden Phasen statt. Dies wird als Anwendungslebenszyklus bezeichnet:

Eine AWS CDK App durchläuft die folgenden Phasen ihres Lebenszyklus.

  • Konstruktion (oder Initialisierung) – Ihr Code instanziiert alle definierten Konstrukte und verknüpft sie dann miteinander. In dieser Phase werden alle Konstrukte (App, Stacks und ihre untergeordneten Konstrukte) instanziiert und die Konstruktorkette wird ausgeführt. Der Großteil Ihres App-Codes wird in dieser Phase ausgeführt.

  • Vorbereitung – Alle Konstrukte, die die prepare Methode implementiert haben, nehmen an einer abschließenden Runde von Änderungen teil, um ihren endgültigen Status einzurichten. Die Vorbereitungsphase erfolgt automatisch. Als Benutzer sehen Sie kein Feedback aus dieser Phase. Es ist selten, dass Sie den Hook „Vorbereiten“ verwenden müssen, was im Allgemeinen nicht empfohlen wird. Seien Sie während dieser Phase sehr vorsichtig, wenn Sie den Konstruktbaum mutieren, da sich die Reihenfolge der Operationen auf das Verhalten auswirken könnte.

  • Validierung – Alle Konstrukte, die die validate Methode implementiert haben, können sich selbst validieren, um sicherzustellen, dass sie sich in einem Zustand befinden, der korrekt bereitgestellt wird. Sie werden über alle Validierungsfehler informiert, die während dieser Phase auftreten. Im Allgemeinen empfehlen wir, die Validierung so schnell wie möglich durchzuführen (in der Regel sobald Sie einige Eingaben erhalten) und Ausnahmen so früh wie möglich auszulösen. Die frühzeitige Durchführung einer Validierung verbessert die Zuverlässigkeit, da Stack-Traces genauer sein werden, und stellt sicher, dass Ihr Code weiterhin sicher ausgeführt werden kann.

  • Synthesis – Dies ist die letzte Phase der Ausführung Ihrer AWS CDK App. Sie wird durch einen Aufruf von ausgelöstapp.synth(), durchläuft den Konstruktbaum und ruft die synthesize Methode für alle Konstrukte auf. Konstrukte, die implementieren, synthesize können an der Synthetisierung beteiligt sein und Bereitstellungsartefakte an die resultierende Cloud-Baugruppe ausgeben. Zu diesen Artefakten gehören AWS CloudFormation Vorlagen, AWS Lambda Anwendungspakete, Datei- und Docker Image-Komponenten sowie andere Bereitstellungsartefakte. Cloud-Komponenten beschreibt die Ausgabe dieser Phase. In den meisten Fällen müssen Sie die synthesize Methode nicht implementieren.

  • Bereitstellung – In dieser Phase nimmt das AWS CDK CLI die von der -Synthetikphase erzeugten Bereitstellungsartefakte der Cloud-Baugruppe und stellt sie in einer AWS Umgebung bereit. Es lädt Komponenten auf Amazon S3 und Amazon ECR hoch, oder wo immer sie hingehören müssen. Anschließend wird eine - AWS CloudFormation Bereitstellung gestartet, um die Anwendung bereitzustellen und die Ressourcen zu erstellen.

Zum Zeitpunkt des Starts der AWS CloudFormation Bereitstellungsphase ist Ihre AWS CDK App bereits abgeschlossen und beendet. Dies hat folgende Auswirkungen:

  • Die AWS CDK App kann nicht auf Ereignisse reagieren, die während der Bereitstellung auftreten, z. B. auf eine Ressource, die erstellt wird, oder auf die gesamte Bereitstellung, die abgeschlossen wird. Um Code während der Bereitstellungsphase auszuführen, müssen Sie ihn als benutzerdefinierte Ressource in die AWS CloudFormation Vorlage einfügen. Weitere Informationen zum Hinzufügen einer benutzerdefinierten Ressource zu Ihrer App finden Sie im AWS CloudFormation Modul oder im Beispiel für benutzerdefinierte Ressourcen.

  • Die AWS CDK App muss möglicherweise mit Werten arbeiten, die zum Zeitpunkt ihrer Ausführung nicht bekannt sind. Wenn die AWS CDK App beispielsweise einen Amazon S3-Bucket mit einem automatisch generierten Namen definiert und Sie das Attribut bucket.bucketName (Python: bucket_name) abrufen, ist dieser Wert nicht der Name des bereitgestellten Buckets. Stattdessen erhalten Sie einen -TokenWert. Um festzustellen, ob ein bestimmter Wert verfügbar ist, rufen Sie auf cdk.isUnresolved(value) (Python: is_unresolved). Details dazu finden Sie unter Token.

Cloud-Komponenten

Der Aufruf an app.synth() weist den an AWS CDK , eine Cloud-Baugruppe aus einer App zu synthetisieren. In der Regel interagieren Sie nicht direkt mit Cloud-Komponenten. Es handelt sich um Dateien, die alles enthalten, was für die Bereitstellung Ihrer App in einer Cloud-Umgebung erforderlich ist. Sie enthält beispielsweise eine - AWS CloudFormation Vorlage für jeden Stack in Ihrer App. Sie enthält auch eine Kopie aller Dateikomponenten oder Docker-Images, auf die Sie in Ihrer App verweisen.

Einzelheiten zur Formatierung von Cloud-Komponenten finden Sie in der Spezifikation für Cloud-Komponenten.

Um mit der Cloud-Baugruppe zu interagieren, die Ihre AWS CDK App erstellt, verwenden Sie normalerweise die AWS CDK CLI. Jedes Tool, das das Cloud-Assembly-Format lesen kann, kann jedoch verwendet werden, um Ihre App bereitzustellen.

Ausführen Ihrer App

Das CDK CLI muss wissen, wie Sie Ihre AWS CDK App ausführen. Wenn Sie das Projekt mit dem cdk init Befehl aus einer Vorlage erstellt haben, enthält die -cdk.jsonDatei Ihrer App einen -appSchlüssel. Dieser Schlüssel gibt den erforderlichen Befehl für die Sprache an, in der die App geschrieben ist. Wenn Ihre Sprache kompiliert werden muss, führt die Befehlszeile diesen Schritt aus, bevor Sie die App ausführen, sodass Sie dies nicht vergessen können.

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

Wenn Sie Ihr Projekt nicht mit dem CDK erstellt haben CLIoder wenn Sie die in angegebene Befehlszeile überschreiben möchtencdk.json, können Sie bei der Ausgabe des cdk Befehls die --app Option verwenden.

$ cdk --app 'executable' cdk-command ...

Der ausführbare Teil des Befehls gibt den Befehl an, der zum Ausführen Ihrer CDK-Anwendung ausgeführt werden soll. Verwenden Sie Anführungszeichen wie gezeigt, da solche Befehle Leerzeichen enthalten. Der Befehl cdk-command ist ein Unterbefehl wie synth oder deploy, der dem CDK mitteilt, CLI was Sie mit Ihrer App machen möchten. Folgen Sie diesem Schritt mit allen zusätzlichen Optionen, die für diesen Unterbefehl erforderlich sind.

Die AWS CDK CLI kann auch direkt mit einer bereits synthetisierten Cloud-Baugruppe interagieren. Übergeben Sie dazu das Verzeichnis, in dem die Cloud-Baugruppe in gespeichert ist--app. Im folgenden Beispiel werden die Stacks aufgelistet, die in der unter gespeicherten Cloud-Baugruppe definiert sind./my-cloud-assembly.

$ cdk --app ./my-cloud-assembly ls