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

Questa è la guida per sviluppatori AWS CDK v2. Il vecchio CDK v1 è entrato 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 Java AWS CDK

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 distribuzione OpenJDK come Amazon Corretto) e Apache Maven.

Supporta Java 8 e versioni successive. AWS CDK 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 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 IDE Java in grado di leggere i progetti Maven per lavorare sulle tue AWS CDK app. Forniamo suggerimenti per Eclipse in questa guida, ma IntelliJ IDEA e altri IDE possono importare progetti Maven e possono essere utilizzati per lo sviluppo di applicazioni in Java. NetBeans AWS CDK

È possibile scrivere AWS CDK applicazioni in linguaggi ospitati da JVM 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 a usare Java

Per utilizzare, è necessario disporre di un account e delle AWS CDK credenziali e aver installato Node.js e il Toolkit AWS . AWS CDK 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 distribuzione OpenJDK o JDK di Oracle. 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 fine del ciclo di vita (EOL (End Of Life) condivisa dal fornitore o dalla community ed è soggetta a modifiche con preavviso.

Creare un progetto

È possibile creare un nuovo AWS CDK progetto cdk init richiamandolo in una directory vuota. 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 utilizzi un IDE, 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 supporto CDK 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

Nota

L'edizione Java del CDK API Reference mostra anche i nomi dei pacchetti.

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 si utilizza un IDE Java, probabilmente dispone di 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 funzionalità dell'IDE 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 Java CDK.

<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 IDE Java 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'albero POM; 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 pacchettizzi () il tuo progetto. mvn package CDK Toolkit lo fa automaticamente ogni volta che lo eseguite, 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, "MyBucket", 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, "MyBucket") .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 alcune API, 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.

Creazione, sintesi e distribuzione

Compila AWS CDK automaticamente l'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, premi Control-B in Eclipse) o eseguendo l'operazione mvn compile al prompt dei comandi mentre ti trovi nella directory principale del progetto.

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

Gli stack definiti nell' AWS CDK app possono essere sintetizzati e distribuiti singolarmente o insieme utilizzando i comandi seguenti. In genere, dovresti trovarti nella directory principale del tuo progetto quando li pubblichi.

  • cdk synth: sintetizza un AWS CloudFormation modello da uno o più stack dell'app. AWS CDK

  • cdk deploy: distribuisce le risorse definite da uno o più stack dell'app su. AWS CDK AWS

È possibile specificare i nomi di più stack da sintetizzare o distribuire in un unico comando. Se l'app definisce solo uno stack, non è necessario specificarlo.

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

Puoi anche usare i caratteri jolly * (qualsiasi numero di caratteri) e? (qualsiasi carattere singolo) per identificare le pile in base allo schema. Quando usate i caratteri jolly, racchiudete il pattern tra virgolette. Altrimenti, la shell potrebbe provare ad espanderlo ai nomi dei file nella directory corrente prima che vengano passati al AWS CDK Toolkit.

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

Non è necessario sintetizzare esplicitamente gli stack prima di distribuirli; cdk deploy esegue questo passaggio per assicurarsi che venga distribuito il codice più recente.

Per la documentazione completa del comando, consulta. cdk AWS CDK Toolkit (cdkcomando)