Arbeiten mit dem AWS CDK in Java - AWS Cloud Development Kit (AWS CDK) v2

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.

Arbeiten mit dem AWS CDK in Java

Java ist eine vollständig unterstützte Client-Sprache für die AWS CDK und gilt als stabil. Sie können AWS CDK Anwendungen in Java mit vertrauten Tools entwickeln, darunter die JDK (von Oracle oder eine offene JDK Distribution wie Amazon Corretto) und Apache Maven.

Die AWS CDK unterstützt Java 8 und höher. Wir empfehlen jedoch, die neueste Version zu verwenden, da spätere Versionen der Sprache Verbesserungen enthalten, die sich besonders für die Entwicklung von AWS CDK Anwendungen eignen. Zum Beispiel führt Java 9 die Map.of() Methode ein (eine bequeme Methode, Hashmaps zu deklarieren, die als Objektliterale geschrieben würden). TypeScript Java 10 führt die Inferenz lokaler Typen mithilfe des Schlüsselworts ein. var

Anmerkung

Die meisten Codebeispiele in diesem Entwicklerhandbuch funktionieren mit Java 8. Einige Beispiele verwendenMap.of(); diese Beispiele enthalten Kommentare, in denen darauf hingewiesen wird, dass sie Java 9 benötigen.

Sie können einen beliebigen Texteditor oder ein Java, IDE das Maven-Projekte lesen kann, verwenden, um an Ihren AWS CDK Apps zu arbeiten. In diesem Handbuch finden Sie Hinweise zu Eclipse, aber IntelliJ IDEA und andere IDEs können Maven-Projekte importieren und für die Entwicklung von AWS CDK Anwendungen in Java verwendet werden. NetBeans

Es ist möglich, AWS CDK Anwendungen in anderen JVM gehosteten Sprachen als Java zu schreiben (zum Beispiel Kotlin, Groovy, Clojure oder Scala), aber die Erfahrung ist möglicherweise nicht besonders idiomatisch, und wir können keine Unterstützung für diese Sprachen anbieten.

Erste Schritte mit Java

Um mit dem arbeiten zu können AWS CDK, müssen Sie über ein AWS Konto und Anmeldeinformationen verfügen und Node.js und das Toolkit installiert haben. AWS CDK Siehe Erste Schritte mit dem AWS CDK.

AWS CDK Java-Anwendungen benötigen Java 8 (v1.8) oder höher. Wir empfehlen Amazon Corretto, aber Sie können jede JDK Open-Distribution oder die von Oracle verwenden. JDK Sie benötigen außerdem Apache Maven 3.5 oder höher. Sie können auch Tools wie Gradle verwenden, aber die vom AWS CDK Toolkit generierten Anwendungsskelette sind Maven-Projekte.

Anmerkung

Veraltete Sprachversionen von Drittanbietern: Die Sprachversion wird nur solange unterstützt, bis sie EOL (End Of Life) vom Anbieter oder der Community veröffentlicht wird, und kann sich nach vorheriger Ankündigung ändern.

Erstellen eines Projekts

Sie erstellen ein neues AWS CDK Projekt, indem Sie es cdk init in einem leeren Verzeichnis aufrufen. Verwenden Sie die --language Option und geben Sie anjava:

mkdir my-project cd my-project cdk init app --language java

cdk initverwendet den Namen des Projektordners, um verschiedene Elemente des Projekts zu benennen, einschließlich Klassen, Unterordnern und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Ansonsten sollte der Name jedoch die Form eines Java-Bezeichners haben; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.

Das daraus resultierende Projekt enthält einen Verweis auf das software.amazon.awscdk Maven-Paket. Es und seine Abhängigkeiten werden automatisch von Maven installiert.

Wenn Sie ein verwendenIDE, können Sie das Projekt jetzt öffnen oder importieren. Wählen Sie in Eclipse beispielsweise „Datei“ > „Importieren“ > „Maven“ > „Bestehende Maven-Projekte“. Stellen Sie sicher, dass die Projekteinstellungen so eingestellt sind, dass sie Java 8 (1.8) verwenden.

Module der AWS Construct Library verwalten

Verwenden Sie Maven, um AWS Construct Library-Pakete zu installieren, die sich in der Gruppe software.amazon.awscdk befinden. Die meisten Konstrukte befinden sich im Artefaktaws-cdk-lib, das standardmäßig zu neuen Java-Projekten hinzugefügt wird. Module für Dienste, deren CDK Unterstützung auf höherer Ebene noch in der Entwicklung ist, befinden sich in separaten „experimentellen“ Paketen, die mit einer Kurzversion (kein AWS oder Amazon-Präfix) des Namens ihres Dienstes benannt sind. Suchen Sie im Maven Central Repository nach den Namen aller Bibliotheken AWS CDK und AWS Construct-Module.

Anmerkung

Die Java-Ausgabe der CDK API Referenz zeigt auch die Paketnamen.

Die AWS Construct Library-Unterstützung einiger Dienste erfolgt in mehr als einem Namespace. Die Funktionalität von Amazon Route 53 ist beispielsweise insoftware.amazon.awscdk.route53, route53-patternsroute53resolver, und unterteiltroute53-targets.

Das AWS CDK Hauptpaket wird im Java-Code als importiertsoftware.amazon.awscdk. Module für die verschiedenen Dienste in der AWS Construct-Bibliothek befinden sich unter software.amazon.awscdk.services und sind ähnlich ihrem Maven-Paketnamen benannt. Der Namespace des Amazon S3 S3-Moduls lautet software.amazon.awscdk.services.s3 beispielsweise.

Wir empfehlen, für jede AWS Construct Library-Klasse, die Sie in jeder Ihrer Java-Quelldateien verwenden, eine separate import Java-Anweisung zu schreiben und Platzhalter-Importe zu vermeiden. Sie können immer den vollständig qualifizierten Namen eines Typs (einschließlich seines Namespace) ohne Anweisung verwenden. import

Wenn Ihre Anwendung von einem experimentellen Paket abhängt, bearbeiten Sie das Ihres Projekts pom.xml und fügen Sie dem <dependencies> Container ein neues <dependency> Element hinzu. Das folgende <dependency> Element spezifiziert beispielsweise das Bibliotheksmodul für CodeStar experimentelle Konstrukte:

<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
Tipp

Wenn Sie Java verwendenIDE, verfügt es wahrscheinlich über Funktionen zur Verwaltung von Maven-Abhängigkeiten. Wir empfehlen jedoch, pom.xml direkt zu bearbeiten, es sei denn, Sie sind sich absolut sicher, dass die IDE Funktionalität mit dem übereinstimmt, was Sie von Hand tun würden.

Verwaltung von Abhängigkeiten in Java

In Java werden Abhängigkeiten in Maven spezifiziert pom.xml und installiert. Der <dependencies> Container enthält ein <dependency> Element für jedes Paket. Im Folgenden finden Sie einen Abschnitt pom.xml für eine typische CDK Java-App.

<dependencies> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>appsync-alpha</artifactId> <version>2.10.0-alpha.0</version> </dependency> </dependencies>
Tipp

Viele IDEs Java-Programme verfügen über integrierte Maven-Unterstützung und visuelle pom.xml Editoren, die Sie für die Verwaltung von Abhängigkeiten möglicherweise als praktisch erachten.

Maven unterstützt das Sperren von Abhängigkeiten nicht. Es ist zwar möglich, Versionsbereiche anzugebenpom.xml, wir empfehlen jedoch, immer exakte Versionen zu verwenden, damit Ihre Builds wiederholbar bleiben.

Maven installiert automatisch transitive Abhängigkeiten, aber von jedem Paket kann nur eine Kopie installiert sein. Die Version, die am höchsten in der POM Struktur angegeben ist, wird ausgewählt. Anwendungen haben immer das letzte Wort darüber, welche Version von Paketen installiert wird.

Maven installiert oder aktualisiert Ihre Abhängigkeiten automatisch, wann immer Sie Ihr Projekt erstellen (mvn compile) oder verpacken (mvn package). Das CDK Toolkit macht dies bei jeder Ausführung automatisch, sodass es im Allgemeinen nicht erforderlich ist, Maven manuell aufzurufen.

AWS CDK Redewendungen in Java

Requisiten

Alle AWS Construct-Library-Klassen werden mit drei Argumenten instanziiert: dem Bereich, in dem das Konstrukt definiert wird (sein übergeordnetes Objekt im Konstruktbaum), einer ID und props, einem Bündel von Schlüssel/Wert-Paaren, die das Konstrukt verwendet, um die von ihm erstellten Ressourcen zu konfigurieren. Andere Klassen und Methoden verwenden ebenfalls das Muster „Bündel von Attributen“ für Argumente.

In Java werden Requisiten mit dem Builder-Muster ausgedrückt. Jeder Konstrukttyp hat einen entsprechenden Requisitentyp. Beispielsweise verwendet das Bucket Konstrukt (das einen Amazon S3 S3-Bucket darstellt) als Requisiten eine Instanz von. BucketProps

Die BucketProps Klasse hat (wie jede Requisitenklasse der AWS Construct Library) eine innere Klasse namens. Builder Der BucketProps.Builder Typ bietet Methoden, um die verschiedenen Eigenschaften einer BucketProps Instanz festzulegen. Jede Methode gibt die Builder Instanz zurück, sodass die Methodenaufrufen verkettet werden können, um mehrere Eigenschaften festzulegen. Am Ende der Kette rufen Sie auf, build() um das BucketProps Objekt tatsächlich zu erzeugen.

Bucket bucket = new Bucket(this, "MyBucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());

Konstrukte und andere Klassen, deren letztes Argument ein Objekt ist, das an Requisiten erinnert, bieten eine Abkürzung. Die Klasse hat eine eigene, Builder die sie und ihr Props-Objekt in einem Schritt instanziiert. Auf diese Weise müssen Sie nicht explizit (zum Beispiel) sowohl als auch ein Objekt instanziieren BucketBucketProps und Sie benötigen auch keinen Import für den Typ Requisiten.

Bucket bucket = Bucket.Builder.create(this, "MyBucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();

Wenn Sie Ihr eigenes Konstrukt aus einem vorhandenen Konstrukt ableiten, möchten Sie möglicherweise zusätzliche Eigenschaften akzeptieren. Wir empfehlen Ihnen, diese Builder-Muster zu befolgen. Dies ist jedoch nicht so einfach wie die Unterteilung einer Konstruktklasse. Sie müssen die beweglichen Teile der beiden neuen Builder Klassen selbst bereitstellen. Möglicherweise ziehen Sie es vor, dass Ihr Konstrukt einfach ein oder mehrere zusätzliche Argumente akzeptiert. Sie sollten zusätzliche Konstruktoren angeben, wenn ein Argument optional ist.

Generische Strukturen

In einigen APIs Fällen werden JavaScript Arrays oder untypisierte Objekte als Eingabe für eine Methode AWS CDK verwendet. (Siehe zum Beispiel die Methode.) AWS CodeBuildBuildSpec.fromObject() In Java werden diese Objekte dargestellt alsjava.util.Map<String, Object>. In Fällen, in denen es sich bei den Werten ausschließlich um Zeichenketten handelt, können Sie Folgendes verwendenMap<String, String>.

Java bietet keine Möglichkeit, Literale für solche Container zu schreiben, wie dies in einigen anderen Sprachen der Fall ist. In Java 9 und höher können Sie java.util.Map.of()damit bequem Zuordnungen mit bis zu zehn Einträgen innerhalb eines dieser Aufrufe definieren.

java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json" )

Um Karten mit mehr als zehn Einträgen zu erstellen, verwenden Sie java.util.Map.ofEntries().

Wenn Sie Java 8 verwenden, könnten Sie Ihre eigenen Methoden bereitstellen, die diesen ähneln.

JavaScript Arrays werden als List<Object> oder List<String> in Java dargestellt. Die Methode java.util.Arrays.asList ist praktisch, um kurze List s zu definieren.

List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")

Fehlende Werte

In Java werden fehlende Werte in AWS CDK Objekten wie Requisiten durch null dargestellt. Sie müssen jeden beliebigen Wert explizit testen, null um sicherzustellen, dass er einen Wert enthält, bevor Sie etwas mit ihm tun. Java hat keinen „syntaktischen Zucker“, der beim Umgang mit Nullwerten hilft, wie es in einigen anderen Sprachen der Fall ist. Möglicherweise finden Sie ObjectUtil Apache defaultIfNullund in einigen Situationen firstNonNullnützlich. Alternativ können Sie Ihre eigenen statischen Hilfsmethoden schreiben, um den Umgang mit potenziell Nullwerten zu vereinfachen und Ihren Code lesbarer zu machen.

Erstellen Sie CDK Anwendungen und führen Sie sie aus

Der kompiliert Ihre App AWS CDK automatisch, bevor sie ausgeführt wird. Es kann jedoch nützlich sein, Ihre App manuell zu erstellen, um nach Fehlern zu suchen und Tests durchzuführen. Sie können dies in Ihrem tun IDE (drücken Sie beispielsweise Strg-B in Eclipse) oder indem Sie es mvn compile an einer Befehlszeile eingeben, während Sie sich im Stammverzeichnis Ihres Projekts befinden.

Führen Sie alle Tests aus, die Sie geschrieben haben, indem Sie sie mvn test an einer Befehlszeile ausführen.