Bekerja dengan AWS CDK di Jawa - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Bekerja dengan AWS CDK di Jawa

Java adalah bahasa klien yang sepenuhnya didukung untuk AWS CDK dan dianggap stabil. Anda dapat mengembangkan AWS CDK aplikasi di Java menggunakan alat yang sudah dikenal, termasuk JDK (Oracle's, atau distribusi OpenJDK seperti Amazon Corretto) dan Apache Maven.

AWS CDK Mendukung Java 8 dan yang lebih baru. Kami merekomendasikan untuk menggunakan versi terbaru yang Anda bisa, karena versi bahasa yang lebih baru mencakup peningkatan yang sangat nyaman untuk mengembangkan AWS CDK aplikasi. Misalnya, Java 9 memperkenalkan Map.of() metode (cara mudah untuk mendeklarasikan hashmap yang akan ditulis sebagai literal objek). TypeScript Java 10 memperkenalkan inferensi tipe lokal menggunakan kata kunci. var

catatan

Sebagian besar contoh kode dalam Panduan Pengembang ini bekerja dengan Java 8. Beberapa contoh digunakanMap.of(); contoh-contoh ini termasuk komentar yang mencatat bahwa mereka memerlukan Java 9.

Anda dapat menggunakan editor teks apa pun, atau IDE Java yang dapat membaca proyek Maven, untuk mengerjakan aplikasi Anda AWS CDK . Kami menyediakan petunjuk Eclipse dalam Panduan ini, tetapi IntelliJ IDEA, NetBeans, dan IDE lainnya dapat mengimpor proyek Maven dan dapat digunakan untuk mengembangkan aplikasi di Jawa. AWS CDK

Dimungkinkan untuk menulis AWS CDK aplikasi dalam bahasa yang dihosting JVM selain Java (misalnya, Kotlin, Groovy, Clojure, atau Scala), tetapi pengalamannya mungkin tidak terlalu idiomatis, dan kami tidak dapat memberikan dukungan apa pun untuk bahasa-bahasa ini.

Memulai dengan Java

Untuk bekerja dengan AWS CDK, Anda harus memiliki AWS akun dan kredensional dan telah menginstal Node.js dan Toolkit. AWS CDK Lihat Memulai dengan AWS CDK.

AWS CDK Aplikasi Java membutuhkan Java 8 (v1.8) atau yang lebih baru. Kami merekomendasikan Amazon Corretto, tetapi Anda dapat menggunakan distribusi OpenJDK atau JDK Oracle. Anda juga membutuhkan Apache Maven 3.5 atau yang lebih baru. Anda juga dapat menggunakan alat seperti Gradle, tetapi kerangka aplikasi yang dihasilkan oleh AWS CDK Toolkit adalah proyek Maven.

catatan

Pengakhiran bahasa pihak ketiga: versi bahasa hanya didukung hingga EOL (End Of Life) dibagikan oleh vendor atau komunitas dan dapat berubah sewaktu-waktu dengan pemberitahuan sebelumnya.

Membuat proyek

Anda membuat AWS CDK proyek baru dengan memanggil cdk init dalam direktori kosong. Gunakan --language opsi dan tentukanjava:

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

cdk initmenggunakan nama folder proyek untuk memberi nama berbagai elemen proyek, termasuk kelas, subfolder, dan file. Tanda hubung dalam nama folder diubah menjadi garis bawah. Namun, nama tersebut harus mengikuti bentuk pengenal Java; misalnya, seharusnya tidak dimulai dengan angka atau berisi spasi.

Proyek yang dihasilkan mencakup referensi ke paket software.amazon.awscdk Maven. Ini dan dependensinya diinstal secara otomatis oleh Maven.

Jika Anda menggunakan IDE, Anda sekarang dapat membuka atau mengimpor proyek. Di Eclipse, misalnya, pilih File > Import > Maven > Existing Maven Projects. Pastikan bahwa pengaturan proyek diatur untuk menggunakan Java 8 (1.8).

Mengelola AWS modul Construct Library

Gunakan Maven untuk menginstal paket AWS Construct Library, yang ada di grup. software.amazon.awscdk Sebagian besar konstruksi berada di artefakaws-cdk-lib, yang ditambahkan ke proyek Java baru secara default. Modul untuk layanan yang dukungan CDK tingkat tinggi masih dikembangkan berada dalam paket “eksperimental” terpisah, dinamai dengan versi pendek (tidak ada atau awalan AWS Amazon) dari nama layanan mereka. Cari Repositori Pusat Maven untuk menemukan nama semua AWS CDK dan AWS Membangun pustaka Modul.

catatan

Edisi Java dari Referensi API CDK juga menunjukkan nama paket.

Dukungan AWS Construct Library beberapa layanan ada di lebih dari satu namespace. Misalnya, Amazon Route 53 memiliki fungsinya dibagi menjadisoftware.amazon.awscdk.route53,route53-patterns,route53resolver, danroute53-targets.

AWS CDK Paket utama diimpor dalam kode Java sebagaisoftware.amazon.awscdk. Modul untuk berbagai layanan di Perpustakaan AWS Konstruksi hidup di bawah software.amazon.awscdk.services dan diberi nama yang mirip dengan nama paket Maven mereka. Misalnya, namespace modul Amazon S3 adalah. software.amazon.awscdk.services.s3

Sebaiknya tulis import pernyataan Java terpisah untuk setiap kelas AWS Construct Library yang Anda gunakan di setiap file sumber Java Anda, dan menghindari impor wildcard. Anda selalu dapat menggunakan nama tipe yang sepenuhnya memenuhi syarat (termasuk namespace-nya) tanpa pernyataan. import

Jika aplikasi Anda bergantung pada paket eksperimental, edit proyek Anda pom.xml dan tambahkan <dependency> elemen baru dalam <dependencies> wadah. Misalnya, <dependency> elemen berikut menentukan modul perpustakaan konstruksi CodeStar eksperimental:

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

Jika Anda menggunakan IDE Java, mungkin memiliki fitur untuk mengelola dependensi Maven. Kami merekomendasikan untuk mengedit pom.xml secara langsung, kecuali Anda benar-benar yakin fungsionalitas IDE cocok dengan apa yang akan Anda lakukan dengan tangan.

Mengelola dependensi di Java

Di Java, dependensi ditentukan pom.xml dan diinstal menggunakan Maven. <dependencies>Wadah mencakup <dependency> elemen untuk setiap paket. Berikut ini adalah bagian dari pom.xml untuk aplikasi CDK Java yang khas.

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

Banyak IDE Java telah mengintegrasikan dukungan Maven dan pom.xml editor visual, yang mungkin Anda temukan nyaman untuk mengelola dependensi.

Maven tidak mendukung penguncian ketergantungan. Meskipun dimungkinkan untuk menentukan rentang versipom.xml, kami sarankan Anda selalu menggunakan versi yang tepat agar build Anda tetap dapat diulang.

Maven secara otomatis menginstal dependensi transitif, tetapi hanya ada satu salinan yang diinstal dari setiap paket. Versi yang ditentukan tertinggi di pohon POM dipilih; aplikasi selalu memiliki kata terakhir dalam versi paket apa yang diinstal.

Maven secara otomatis menginstal atau memperbarui dependensi Anda setiap kali Anda membangun (mvn compile) atau package () proyek Anda. mvn package CDK Toolkit melakukan ini secara otomatis setiap kali Anda menjalankannya, jadi umumnya tidak perlu memanggil Maven secara manual.

AWS CDK idiom di Jawa

Alat Peraga

Semua kelas AWS Construct Library dipakai menggunakan tiga argumen: lingkup di mana konstruksi sedang didefinisikan (induknya di pohon konstruksi), id, dan props, bundel pasangan kunci/nilai yang digunakan konstruksi untuk mengkonfigurasi sumber daya yang dibuatnya. Kelas dan metode lain juga menggunakan pola “bundel atribut” untuk argumen.

Di Jawa, alat peraga diekspresikan menggunakan pola Builder. Setiap tipe konstruksi memiliki tipe props yang sesuai; misalnya, Bucket konstruksi (yang mewakili bucket Amazon S3) mengambil sebagai props sebagai instance dari. BucketProps

BucketPropsKelas (seperti setiap kelas props AWS Construct Library) memiliki kelas dalam yang disebut. Builder BucketProps.BuilderJenis ini menawarkan metode untuk mengatur berbagai properti BucketProps instance. Setiap metode mengembalikan Builder instance, sehingga panggilan metode dapat dirantai untuk mengatur beberapa properti. Di akhir rantai, Anda memanggil build() untuk benar-benar menghasilkan BucketProps objek.

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

Konstruksi, dan kelas lain yang mengambil objek seperti alat peraga sebagai argumen terakhir mereka, menawarkan jalan pintas. Kelas memiliki sendiri Builder yang membuat instance dan objek props dalam satu langkah. Dengan cara ini, Anda tidak perlu secara eksplisit membuat instance (misalnya) keduanya BucketProps dan Bucket —dan Anda tidak memerlukan impor untuk jenis alat peraga.

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

Saat menurunkan konstruksi Anda sendiri dari konstruksi yang ada, Anda mungkin ingin menerima properti tambahan. Kami menyarankan Anda mengikuti pola pembangun ini. Namun, ini tidak sesederhana mensubklasifikasikan kelas konstruksi. Anda harus menyediakan sendiri bagian yang bergerak dari dua Builder kelas baru. Anda mungkin lebih suka membuat konstruksi Anda menerima satu atau lebih argumen tambahan. Anda harus memberikan konstruktor tambahan ketika argumen bersifat opsional.

Struktur generik

Di beberapa API, AWS CDK menggunakan JavaScript array atau objek yang tidak diketik sebagai input ke metode. (Lihat, misalnya, AWS CodeBuildBuildSpec.fromObject()metode.) Di Jawa, objek-objek ini direpresentasikan sebagaijava.util.Map<String, Object>. Dalam kasus di mana nilai-nilai semua string, Anda dapat menggunakanMap<String, String>.

Java tidak menyediakan cara untuk menulis literal untuk wadah seperti yang dilakukan beberapa bahasa lain. Di Java 9 dan yang lebih baru, Anda dapat menggunakan java.util.Map.of()untuk dengan mudah menentukan peta hingga sepuluh entri sebaris dengan salah satu panggilan ini.

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

Untuk membuat peta dengan lebih dari sepuluh entri, gunakan java.util.Map.ofEntries().

Jika Anda menggunakan Java 8, Anda dapat memberikan metode Anda sendiri yang mirip dengan ini.

JavaScript array direpresentasikan sebagai List<Object> atau List<String> di Jawa. Metode java.util.Arrays.asList ini nyaman untuk mendefinisikan List s pendek.

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

Nilai yang hilang

Di Jawa, nilai yang hilang dalam AWS CDK objek seperti alat peraga diwakili olehnull. Anda harus secara eksplisit menguji nilai apa pun yang bisa null untuk memastikannya berisi nilai sebelum melakukan apa pun dengannya. Java tidak memiliki “gula sintaksis” untuk membantu menangani nilai nol seperti yang dilakukan beberapa bahasa lain. Anda mungkin menemukan Apache ObjectUtil defaultIfNulldan firstNonNullberguna dalam beberapa situasi. Atau, tulis metode pembantu statis Anda sendiri untuk membuatnya lebih mudah menangani nilai nol yang berpotensi dan membuat kode Anda lebih mudah dibaca.

Membangun, mensintesis, dan menyebarkan

AWS CDK Secara otomatis mengkompilasi aplikasi Anda sebelum menjalankannya. Namun, membangun aplikasi Anda secara manual dapat berguna untuk memeriksa kesalahan dan menjalankan pengujian. Anda dapat melakukan ini di IDE Anda (misalnya, tekan Control-B di Eclipse) atau dengan mengeluarkan mvn compile pada prompt perintah saat berada di direktori root proyek Anda.

Jalankan pengujian apa pun yang Anda tulis dengan menjalankan mvn test pada prompt perintah.

Tumpukan yang ditentukan dalam AWS CDK aplikasi Anda dapat disintesis dan diterapkan secara individual atau bersama-sama menggunakan perintah di bawah ini. Umumnya, Anda harus berada di direktori utama proyek Anda ketika Anda menerbitkannya.

  • cdk synth: Mensintesis AWS CloudFormation template dari satu atau beberapa tumpukan di aplikasi Anda AWS CDK .

  • cdk deploy: Menerapkan resource yang ditentukan oleh satu atau beberapa tumpukan di AWS CDK aplikasi Anda. AWS

Anda dapat menentukan nama beberapa tumpukan yang akan disintesis atau digunakan dalam satu perintah. Jika aplikasi Anda hanya mendefinisikan satu tumpukan, Anda tidak perlu menentukannya.

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

Anda juga dapat menggunakan wildcard * (sejumlah karakter) dan? (setiap karakter tunggal) untuk mengidentifikasi tumpukan berdasarkan pola. Saat menggunakan wildcard, lampirkan pola dalam tanda kutip. Jika tidak, shell mungkin mencoba memperluasnya ke nama-nama file di direktori saat ini sebelum diteruskan ke AWS CDK Toolkit.

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

Anda tidak perlu mensintesis tumpukan secara eksplisit sebelum menerapkannya; cdk deploy melakukan langkah ini agar Anda memastikan kode terbaru Anda diterapkan.

Untuk dokumentasi lengkap cdk perintah, lihatAWS CDK Toolkit (cdkperintah).