Lavorare con il AWS CDK in Java - AWS Cloud Development Kit (AWS CDK) v2

Questa è la guida per sviluppatori AWS CDK v2. La versione precedente della CDK versione 1 è entrata in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Lavorare con il AWS CDK in Java

Java è un linguaggio client completamente supportato per AWS CDK ed è considerato stabile. Puoi sviluppare AWS CDK applicazioni in Java utilizzando strumenti familiari, tra cui JDK (Oracle o una JDK distribuzione aperta come Amazon Corretto) e Apache Maven.

AWS CDK Supporta Java 8 e versioni successive. Tuttavia, consigliamo di utilizzare la versione più recente possibile, poiché le versioni successive del linguaggio includono miglioramenti particolarmente utili per lo sviluppo di AWS CDK applicazioni. Ad esempio, Java 9 introduce il Map.of() metodo (un modo conveniente per dichiarare hashmap che verrebbero scritte come oggetti letterali). TypeScript Java 10 introduce l'inferenza di tipo locale utilizzando la parola chiave. var

Nota

La maggior parte degli esempi di codice in questa Guida per gli sviluppatori funziona con Java 8. Alcuni esempi di utilizzoMap.of(); questi esempi includono commenti che indicano che richiedono Java 9.

Puoi usare qualsiasi editor di testo o un Java in IDE grado di leggere i progetti Maven per lavorare sulle tue AWS CDK app. Forniamo suggerimenti per Eclipse in questa guida, ma IntelliJ e altri IDEs possono importare progetti Maven e possono essere utilizzati per lo sviluppo di applicazioni in Java. IDEA NetBeans AWS CDK

È possibile scrivere AWS CDK applicazioni in linguaggi JVM ospitati diversi da Java (ad esempio, Kotlin, Groovy, Clojure o Scala), ma l'esperienza potrebbe non essere particolarmente idiomatica e non siamo in grado di fornire alcun supporto per questi linguaggi.

Inizia con Java

Per utilizzare AWS CDK, è necessario disporre di un AWS account e delle credenziali e aver installato Node.js e il AWS CDK Toolkit. Per informazioni, consulta Iniziare con AWS CDK.

AWS CDK Le applicazioni Java richiedono Java 8 (v1.8) o versione successiva. Consigliamo Amazon Corretto, ma puoi utilizzare qualsiasi JDK distribuzione Open o Oracle JDK. Avrai anche bisogno di Apache Maven 3.5 o versione successiva. Puoi anche usare strumenti come Gradle, ma gli scheletri delle applicazioni generati dal Toolkit sono progetti Maven. AWS CDK

Nota

Deprecazione linguistica di terze parti: la versione linguistica è supportata solo fino alla sua EOL (fine del ciclo di vita) condivisa dal fornitore o dalla community ed è soggetta a modifiche con preavviso.

Creare un progetto

È possibile creare un nuovo AWS CDK progetto richiamandolo in una directory vuota. cdk init Utilizzate l'--languageopzione e specificatejava:

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

cdk initutilizza il nome della cartella del progetto per denominare vari elementi del progetto, tra cui classi, sottocartelle e file. I trattini nel nome della cartella vengono convertiti in caratteri di sottolineatura. Tuttavia, il nome dovrebbe altrimenti assumere la forma di un identificatore Java; ad esempio, non dovrebbe iniziare con un numero o contenere spazi.

Il progetto risultante include un riferimento al pacchetto software.amazon.awscdk Maven. Esso e le sue dipendenze vengono installati automaticamente da Maven.

Se stai usando unIDE, ora puoi aprire o importare il progetto. In Eclipse, ad esempio, scegli File > Importa > Maven > Progetti Maven esistenti. Assicuratevi che le impostazioni del progetto siano impostate per utilizzare Java 8 (1.8).

Gestione dei AWS moduli Construct Library

Usa Maven per installare i pacchetti AWS Construct Library, che fanno parte del gruppo. software.amazon.awscdk La maggior parte dei costrutti si trova nell'artefattoaws-cdk-lib, che viene aggiunto ai nuovi progetti Java per impostazione predefinita. I moduli per i servizi il cui CDK supporto di livello superiore è ancora in fase di sviluppo si trovano in pacchetti «sperimentali» separati, denominati con una versione breve (no o prefisso AWS Amazon) del nome del servizio. Cerca nel Maven Central Repository per trovare i nomi di tutte le librerie e di Construct Module. AWS CDK AWS

Il supporto di AWS Construct Library di alcuni servizi è disponibile in più di un namespace. Ad esempio, Amazon Route 53 ha le sue funzionalità suddivise in software.amazon.awscdk.route53route53-patterns,route53resolver, eroute53-targets.

Il AWS CDK pacchetto principale viene importato in codice Java comesoftware.amazon.awscdk. I moduli per i vari servizi della AWS Construct Library risiedono in software.amazon.awscdk.services e hanno un nome simile al nome del pacchetto Maven. Ad esempio, lo spazio dei nomi del modulo Amazon S3 è. software.amazon.awscdk.services.s3

Ti consigliamo di scrivere un'importistruzione Java separata per ogni classe di AWS Construct Library che usi in ciascuno dei tuoi file sorgente Java ed evitare le importazioni con caratteri jolly. Puoi sempre utilizzare il nome completo di un tipo (incluso il relativo spazio dei nomi) senza un'istruzione. import

Se la tua applicazione dipende da un pacchetto sperimentale, modifica il progetto pom.xml e aggiungi un nuovo <dependency> elemento nel contenitore. <dependencies> Ad esempio, il seguente <dependency> elemento specifica il modulo della libreria di costruzioni CodeStar sperimentali:

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

Se usi un JavaIDE, probabilmente ha funzionalità per la gestione delle dipendenze di Maven. Tuttavia, ti consigliamo di modificare pom.xml direttamente, a meno che tu non sia assolutamente sicuro che la IDE funzionalità corrisponda a quella che faresti a mano.

Gestione delle dipendenze in Java

In Java, le dipendenze vengono specificate pom.xml e installate utilizzando Maven. Il <dependencies> contenitore include un <dependency> elemento per ogni pacchetto. Di seguito è riportata una sezione pom.xml di una tipica app CDK Java.

<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>
Suggerimento

Molti Java IDEs hanno integrato il supporto Maven e pom.xml gli editor visivi, che potresti trovare utili per la gestione delle dipendenze.

Maven non supporta il blocco delle dipendenze. Sebbene sia possibile specificare intervalli di versionipom.xml, ti consigliamo di utilizzare sempre versioni esatte per mantenere le build ripetibili.

Maven installa automaticamente le dipendenze transitive, ma può esserci solo una copia installata di ogni pacchetto. Viene selezionata la versione specificata più in alto nell'POMalbero; le applicazioni hanno sempre l'ultima parola sulla versione dei pacchetti da installare.

Maven installa o aggiorna automaticamente le tue dipendenze ogni volta che crei (mvn compile) o impacchettate () il tuo progetto. mvn package Il CDK Toolkit lo fa automaticamente ogni volta che lo esegui, quindi in genere non è necessario richiamare manualmente Maven.

AWS CDK idiomi in Java

oggetti di scena

Tutte le classi di AWS Construct Library vengono istanziate utilizzando tre argomenti: l'ambito in cui viene definito il costrutto (l'elemento principale nell'albero dei costrutti), un id e props, un insieme di coppie chiave/valore che il costrutto utilizza per configurare le risorse che crea. Anche altre classi e metodi utilizzano il modello «bundle of attributes» per gli argomenti.

In Java, gli oggetti di scena vengono espressi utilizzando il pattern Builder. Ogni tipo di costrutto ha un tipo di oggetto corrispondente; ad esempio, il Bucket costrutto (che rappresenta un bucket Amazon S3) prende come oggetto di scena un'istanza di. BucketProps

La BucketProps classe (come ogni classe props di AWS Construct Library) ha una classe interna chiamata. Builder Il BucketProps.Builder tipo offre metodi per impostare le varie proprietà di un'BucketPropsistanza. Ogni metodo restituisce l'Builderistanza, quindi le chiamate al metodo possono essere concatenate per impostare più proprietà. Alla fine della catena, si chiama build() per produrre effettivamente l'BucketPropsoggetto.

Bucket bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());

I costrutti e le altre classi che utilizzano un oggetto simile a un oggetto simile a un oggetto props come argomento finale offrono una scorciatoia. La classe ha una Builder propria istanza che la istanzia e il relativo oggetto props in un unico passaggio. In questo modo, non è necessario istanziare esplicitamente (ad esempio) entrambi BucketProps e un, e non è necessaria un'Bucketimportazione per il tipo props.

Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();

Quando derivate il vostro costrutto da un costrutto esistente, potreste voler accettare proprietà aggiuntive. Ti consigliamo di seguire questi schemi di costruzione. Tuttavia, non è così semplice come sottoclassare una classe di costrutti. È necessario fornire personalmente le parti mobili delle due nuove Builder classi. Potresti preferire che il tuo costrutto accetti semplicemente uno o più argomenti aggiuntivi. È necessario fornire costruttori aggiuntivi quando un argomento è facoltativo.

Strutture generiche

In alcuniAPIs, AWS CDK utilizza JavaScript matrici o oggetti non tipizzati come input per un metodo. (Vedi, ad esempio, AWS CodeBuild il metodo.) BuildSpec.fromObject() In Java, questi oggetti sono rappresentati comejava.util.Map<String, Object>. Nei casi in cui i valori sono tutte stringhe, puoi usareMap<String, String>.

Java non fornisce un modo per scrivere valori letterali per tali contenitori come fanno altri linguaggi. In Java 9 e versioni successive, è possibile java.util.Map.of()definire comodamente mappe con un massimo di dieci voci in linea con una di queste chiamate.

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

Per creare mappe con più di dieci voci, usa. java.util.Map.ofEntries()

Se utilizzi Java 8, potresti fornire metodi personalizzati simili a questi.

JavaScript gli array sono rappresentati come List<Object> o List<String> in Java. Il metodo java.util.Arrays.asList è utile per definire List s brevi.

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

Valori mancanti

In Java, i valori mancanti in AWS CDK oggetti come gli oggetti di scena sono rappresentati danull. È necessario testare esplicitamente qualsiasi valore possibile null per assicurarsi che contenga un valore prima di utilizzarlo. Java non ha uno «zucchero sintattico» per aiutare a gestire i valori nulli come fanno altri linguaggi. Potresti trovare Apache ObjectUtil defaultIfNulle firstNonNullutili in alcune situazioni. In alternativa, scrivete i vostri metodi di supporto statici per semplificare la gestione di valori potenzialmente nulli e rendere il codice più leggibile.

Crea ed esegui applicazioni CDK

Compila AWS CDK automaticamente la tua app prima di eseguirla. Tuttavia, può essere utile creare l'app manualmente per verificare la presenza di errori ed eseguire test. Puoi farlo nel tuo IDE (ad esempio, premendo Control-B in Eclipse) o eseguendolo mvn compile al prompt dei comandi mentre ti trovi nella directory principale del tuo progetto.

Esegui tutti i test che hai scritto eseguendoli al prompt dei comandimvn test.