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.
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 das JDK (das von Oracle oder eine OpenJDK-Distribution wie Amazon Corretto) und Apache Maven.
Das 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, in TypeScript die sie als Objektliterale geschrieben würden). 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 eine Java-IDE verwenden, die Maven-Projekte lesen kann, um an Ihren AWS CDK Apps zu arbeiten. In diesem Handbuch finden Sie Hinweise zu Eclipse
Es ist möglich, AWS CDK Anwendungen in anderen von JVM gehosteten Sprachen als Java zu schreiben (z. B. Kotlin, Groovy, Clojure oder Scala), aber die Erfahrung ist möglicherweise nicht besonders idiomatisch, und wir können keinen Support für diese Sprachen anbieten.
Themen
Fangen Sie an 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 AWS CDK Toolkit installiert haben. Siehe Erste Schritte mit dem AWS CDK.
AWS CDK Java-Anwendungen benötigen Java 8 (v1.8) oder höher. Wir empfehlen Amazon Corretto
Anmerkung
Veraltete Sprachversionen von Drittanbietern: Die Sprachversion wird nur bis zu ihrem EOL (End Of Life) unterstützt, das vom Anbieter oder der Community geteilt wird. Änderungen können mit vorheriger Ankündigung vorgenommen werden.
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 init
verwendet 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 eine IDE verwenden, 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
Anmerkung
Die Java-Ausgabe der CDK API Reference 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-patterns
route53resolver
, 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 eine Java-IDE verwenden, verfügt sie 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 Funktionalität der IDE 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
In vielen IDEs Java-Versionen sind Maven-Unterstützung und visuelle pom.xml
Editoren integriert, die Sie möglicherweise für die Verwaltung von Abhängigkeiten 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 im POM-Baum am höchsten 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 automatisch bei jeder Ausführung, sodass es im Allgemeinen nicht notwendig 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-MusterBucket
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, "amzn-s3-demo-bucket", 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 Bucket
— BucketProps
und Sie benötigen auch keinen Import für den Typ Requisiten.
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket")
.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()
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 defaultIfNull
CDK-Anwendungen erstellen und ausführen
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 Ihrer IDE tun (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.