Arbeiten mit in AWS CDK Java - 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.

Arbeiten mit in AWS CDK 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, einschließlich des JDK (Oracle oder eine OpenJDK-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 besonders praktisch für die Entwicklung von AWS CDK Anwendungen sind. Java 9 führt beispielsweise die -Map.of()Methode ein (eine bequeme Möglichkeit, Hashmaps zu deklarieren, die als Objektliterale in geschrieben werden würden TypeScript). Java 10 führt eine lokale Typinferenz mit dem var Schlüsselwort ein.

Anmerkung

Die meisten Codebeispiele in diesem Entwicklerhandbuch funktionieren mit Java 8. Einige Beispiele verwenden Map.of(). Diese Beispiele enthalten Kommentare, die darauf hinweisen, dass sie Java 9 erfordern.

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 stellen wir Eclipse-Hinweise bereit, aber IntelliJ IDEA NetBeansund andere IDEs können Maven-Projekte importieren und für die Entwicklung von AWS CDK Anwendungen in Java verwendet werden.

Es ist möglich, AWS CDK Anwendungen in anderen 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 keine Unterstützung für diese Sprachen anbieten.

Erste Schritte mit Java

Um mit der zu arbeiten 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 der AWS CDK.

Java- AWS CDK Anwendungen erfordern Java 8 (v1.8) oder höher. Wir empfehlen Amazon Corretto , aber Sie können jede OpenJDK-Verteilung oder Oracle-JDK verwenden. Sie benötigen auch Apache Maven 3.5 oder höher. Sie können auch Tools wie Gradle verwenden, aber die vom AWS CDK Toolkit generierten Anwendungs-Skeletons sind Maven-Projekte.

Anmerkung

Sprachveralterung von Drittanbietern: Die Sprachversion wird nur unterstützt, bis ihr EOL (End of Life) vom Anbieter oder der Community gemeinsam genutzt wird und kann sich ohne vorherige Ankündigung ändern.

Erstellen eines Projekts

Sie erstellen ein neues AWS CDK Projekt, indem Sie 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, Unterordner und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Der Name sollte jedoch ansonsten der Form einer Java-Kennung folgen; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.

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

Wenn Sie eine IDE verwenden, können Sie das Projekt jetzt öffnen oder importieren. Wählen Sie in Eclipse beispielsweise Datei > Import > Maven > Vorhandene Maven-Projekte aus. Stellen Sie sicher, dass die Projekteinstellungen für die Verwendung von Java 8 (1.8) festgelegt sind.

Verwalten von Modulen AWS der Construct Library

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

Anmerkung

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

Einige Services „ AWS Construct Library“-Unterstützung befinden sich in mehr als einem Namespace. Amazon Route 53 hat beispielsweise seine Funktionalität in software.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 Services in der AWS Construct Library befinden sich unter software.amazon.awscdk.services und werden ähnlich wie ihr Maven-Paketname benannt. Der Namespace des Amazon S3-Moduls lautet beispielsweise software.amazon.awscdk.services.s3.

Wir empfehlen, für jede AWS Construct Library-Klasse, die Sie in jeder Ihrer Java-Quelldateien verwenden, eine separate Java-importAnweisung zu schreiben und Platzhalterimporte zu vermeiden. Sie können den vollqualifizierten Namen eines Typs (einschließlich seines Namespace) ohne -importAnweisung immer verwenden.

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

<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, die Bearbeitung pom.xml direkt durchzuführen, es sei denn, Sie sind sich absolut sicher, dass die Funktionalität der IDE mit der manuellen Ausführung übereinstimmt.

Verwalten von Abhängigkeiten in Java

In Java werden Abhängigkeiten in angegeben pom.xml und mit Maven installiert. Der <dependencies> Container enthält ein -<dependency>Element für jedes Paket. Im Folgenden finden Sie einen Abschnitt von 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 Java-IDEs verfügen über integrierte Mavenpom.xml-Unterstützung und visuelle Editoren, die Sie möglicherweise für die Verwaltung von Abhängigkeiten benötigen.

Maven unterstützt keine Abhängigkeitssperre. Obwohl es möglich ist, Versionsbereiche in anzugebenpom.xml, empfehlen wir Ihnen, immer exakte Versionen zu verwenden, um Ihre Builds wiederholbar zu halten.

Maven installiert automatisch transitive Abhängigkeiten, aber es kann nur eine installierte Kopie jedes Pakets geben. Die Version, die im POM-Baum am höchsten angegeben ist, wird ausgewählt. Anwendungen haben immer das letzte Wort in der installierten Version von Paketen.

Maven installiert oder aktualisiert Ihre Abhängigkeiten automatisch, wenn Sie Ihr Projekt erstellen (mvn compile) oder verpacken (mvn package). Das CDK Toolkit tut dies automatisch bei jeder Ausführung, sodass Maven im Allgemeinen nicht manuell aufgerufen werden muss.

AWS CDK idioms in Java

Eigenschaften

Alle AWS Klassen der Konstruktbibliothek werden mit drei Argumenten instanziiert: dem Bereich, in dem das Konstrukt definiert wird (der übergeordnete Wert in der Konstruktstruktur), einer ID und props, einem Paket von Schlüssel-Wert-Paaren, die das Konstrukt zur Konfiguration der erstellten Ressourcen verwendet. Andere Klassen und Methoden verwenden auch das „Bundle of Attribute“-Muster für Argumente.

In Java werden Props mit dem Builder-Muster ausgedrückt. Jeder Konstrukttyp hat einen entsprechenden Props-Typ. Beispielsweise verwendet das BucketKonstrukt (das einen Amazon S3-Bucket darstellt) als Props eine Instance von BucketProps.

Die BucketProps Klasse (wie jede AWS Construct Library-Props-Klasse) hat eine innere Klasse namens Builder. Der BucketProps.Builder Typ bietet Methoden zum Festlegen der verschiedenen Eigenschaften einer BucketProps Instance. Jede Methode gibt die Builder Instance zurück, sodass die Methodenaufrufe 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, die ein eigenschaftsähnliches Objekt als endgültiges Argument verwenden, bieten eine Verknüpfung. Die Klasse hat einen eigenen , Builder der sie und ihr Eigenschaftsobjekt in einem Schritt instanziiert. Auf diese Weise müssen Sie nicht explizit BucketProps sowohl als auch eine instanziieren (z. B.) Bucketund Sie benötigen keinen Import für den props-Typ.

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 das Unterteilen einer Konstruktklasse. Sie müssen die verschiebenden Teile der beiden neuen Builder Klassen selbst angeben. Möglicherweise möchten Sie einfach, dass Ihr Konstrukt ein oder mehrere zusätzliche Argumente akzeptiert. Sie sollten zusätzliche Konstruktoren angeben, wenn ein Argument optional ist.

Allgemeine Strukturen

In einigen APIs AWS CDK verwendet die JavaScript Arrays oder nicht typisierte Objekte als Eingabe für eine Methode. (Siehe z. B. die BuildSpec.fromObject() Methode AWS CodeBuild von .) In Java werden diese Objekte als dargestelltjava.util.Map<String, Object>. In Fällen, in denen die Werte alle Zeichenfolgen sind, können Sie verwendenMap<String, String>.

Java bietet keine Möglichkeit, Literale für solche Container zu schreiben, wie es bei einigen anderen Sprachen der Fall ist. In Java 9 und höher können Sie verwenden, java.util.Map.of() um Karten mit bis zu zehn Einträgen bequem inline mit einem dieser Aufrufe zu 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önnen 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 eignet sich für die Definition kurzer List.

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

Fehlende Werte

In Java werden fehlende Werte in AWS CDK Objekten wie Eigenschaften durch dargestelltnull. Sie müssen jeden Wert, der sein könnte, explizit testen, null um sicherzustellen, dass er einen Wert enthält, bevor Sie etwas damit tun. Java verfügt nicht über „syntaktische Telefonie“, um bei der Handhabung von Nullwerten zu helfen, wie es bei anderen Sprachen der Fall ist. Möglicherweise finden Sie defaultIfNull und ObjectUtilvon Apache in einigen Situationen firstNonNull nützlich. Alternativ können Sie Ihre eigenen statischen Hilfsmethoden schreiben, um die Handhabung potenziell Nullwerte zu erleichtern und Ihren Code lesbarer zu machen.

Erstellen, Synthetisieren und Bereitstellen

Die 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 auszuführen. Sie können dies in Ihrer IDE tun (z. B. Control-B in Eclipse drücken) oder indem Sie mvn compile an einer Eingabeaufforderung ausgeben, während Sie sich im Stammverzeichnis Ihres Projekts befinden.

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

Die in Ihrer AWS CDK App definierten Stacks können mithilfe der folgenden Befehle einzeln oder zusammen synthetisiert und bereitgestellt werden. Im Allgemeinen sollten Sie sich im Hauptverzeichnis Ihres Projekts befinden, wenn Sie sie ausgeben.

  • cdk synth: Stellt eine AWS CloudFormation Vorlage aus einem oder mehreren Stacks in Ihrer AWS CDK App zusammen.

  • cdk deploy: Stellt die von einem oder mehreren Stacks in Ihrer AWS CDK App definierten Ressourcen in bereit AWS.

Sie können die Namen mehrerer Stacks angeben, die in einem einzigen Befehl synthetisiert oder bereitgestellt werden sollen. Wenn Ihre App nur einen Stack definiert, müssen Sie ihn nicht angeben.

cdk synth # app defines single stack cdk deploy Happy Grumpy # app defines two or more stacks; two are deployed

Sie können auch die Platzhalter * (beliebige Anzahl von Zeichen) und ? (beliebiges einzelnes Zeichen) verwenden, um Stacks nach Mustern zu identifizieren. Wenn Sie Platzhalter verwenden, schließen Sie das Muster in Anführungszeichen ein. Andernfalls versucht die Shell möglicherweise, sie auf die Namen der Dateien im aktuellen Verzeichnis zu erweitern, bevor sie an das AWS CDK Toolkit übergeben werden.

cdk synth "Stack?" # Stack1, StackA, etc. cdk deploy "*Stack" # PipeStack, LambdaStack, etc.
Tipp

Sie müssen Stacks nicht explizit synthetisieren, bevor Sie sie bereitstellen. cdk deploy führt diesen Schritt aus, damit Sie sicherstellen können, dass Ihr neuester Code bereitgestellt wird.

Eine vollständige Dokumentation des cdk Befehls finden Sie unter AWS CDK Toolkit (cdkBefehl).