Bekerja dengan AWS CDK in Go - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 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 in Go

Go adalah bahasa klien yang didukung penuh untuk AWS Cloud Development Kit (AWS CDK) dan dianggap stabil. Bekerja dengan AWS CDK in Go menggunakan alat yang sudah dikenal. Versi Go AWS CDK bahkan menggunakan pengidentifikasi gaya GO.

Berbeda dengan bahasa lain yang CDK mendukung, Go bukanlah bahasa pemrograman berorientasi objek tradisional. Go menggunakan komposisi di mana bahasa lain sering memanfaatkan pewarisan. Kami telah mencoba menggunakan pendekatan Go idiomatis sebanyak mungkin, tetapi ada tempat-tempat di mana mungkin berbeda. CDK

Topik ini memberikan panduan saat bekerja dengan AWS CDK in Go. Lihat posting blog pengumuman untuk panduan proyek Go sederhana untuk. AWS CDK

Memulai dengan Go

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.

Ikatan Go untuk AWS CDK menggunakan toolchain Go standar, v1.18 atau yang lebih baru. Anda dapat menggunakan editor pilihan Anda.

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 tentukango:

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

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 Go; misalnya, seharusnya tidak dimulai dengan angka atau berisi spasi.

Proyek yang dihasilkan mencakup referensi ke modul inti AWS CDK Go,github.com/aws/aws-cdk-go/awscdk/v2, digo.mod. Masalah go get untuk menginstal ini dan modul lain yang diperlukan.

Mengelola AWS modul Construct Library

Dalam sebagian besar AWS CDK dokumentasi dan contoh, kata “modul” sering digunakan untuk merujuk pada modul AWS Construct Library, satu atau lebih per AWS layanan, yang berbeda dari penggunaan istilah Go idiomatik. CDKConstruct Library disediakan dalam satu modul Go dengan modul Construct Library individual, yang mendukung berbagai AWS layanan, disediakan sebagai paket Go dalam modul itu.

Dukungan AWS Construct Library beberapa layanan ada di lebih dari satu modul Construct Library (paket Go). Misalnya, Amazon Route 53 memiliki tiga modul Construct Library selain awsroute53 paket utama, bernama awsroute53patternsawsroute53resolver, danawsroute53targets.

Paket AWS CDK inti, yang Anda perlukan di sebagian besar AWS CDK aplikasi, diimpor dalam kode Go sebagaigithub.com/aws/aws-cdk-go/awscdk/v2. Paket untuk berbagai layanan di Perpustakaan AWS Konstruksi hidup di bawahgithub.com/aws/aws-cdk-go/awscdk/v2. Misalnya, namespace modul Amazon S3 adalah. github.com/aws/aws-cdk-go/awscdk/v2/awss3

import ( "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // ... )

Setelah Anda mengimpor modul Construct Library (paket Go) untuk layanan yang ingin Anda gunakan di aplikasi Anda, Anda mengakses konstruksi dalam modul tersebut menggunakan, misalnya,. awss3.Bucket

Mengelola dependensi di Go

Di Go, versi dependensi didefinisikan dalam. go.mod go.modDefaultnya mirip dengan yang ditampilkan di sini.

module my-package go 1.16 require ( github.com/aws/aws-cdk-go/awscdk/v2 v2.16.0 github.com/aws/constructs-go/constructs/v10 v10.0.5 github.com/aws/jsii-runtime-go v1.29.0 )

Nama Package (modul, dalam bahasa Go) ditentukan oleh URL dengan nomor versi yang diperlukan ditambahkan. Sistem modul Go tidak mendukung rentang versi.

Keluarkan go get perintah untuk menginstal semua modul dan pembaruan yang diperlukango.mod. Untuk melihat daftar pembaruan yang tersedia untuk dependensi Anda, masalah. go list -m -u all

AWS CDK idiom di Go

Nama bidang dan metode

Nama bidang dan metode menggunakan casing unta (likeThis) di TypeScriptCDK, bahasa asalnya. Di Go, ini mengikuti konvensi Go, begitu juga Pascal-cased (). LikeThis

Membersihkan

Dalam main metode Anda, gunakan defer jsii.Close() untuk memastikan CDK aplikasi Anda membersihkan setelah itu sendiri.

Nilai dan konversi pointer yang hilang

Di Go, nilai yang hilang dalam AWS CDK objek seperti bundel properti diwakili olehnil. Go tidak memiliki tipe nullable; satu-satunya tipe yang dapat berisi nil adalah pointer. Untuk memungkinkan nilai menjadi opsional, maka, semua CDK properti, argumen, dan nilai pengembalian adalah pointer, bahkan untuk tipe primitif. Ini berlaku untuk nilai yang diperlukan serta nilai opsional, jadi jika nilai yang diperlukan nanti menjadi opsional, tidak diperlukan perubahan tipe yang melanggar.

Saat melewati nilai atau ekspresi literal, gunakan fungsi pembantu berikut untuk membuat pointer ke nilai.

  • jsii.String

  • jsii.Number

  • jsii.Bool

  • jsii.Time

Untuk konsistensi, kami menyarankan Anda menggunakan pointer yang sama saat mendefinisikan konstruksi Anda sendiri, meskipun mungkin tampak lebih nyaman untuk, misalnya, menerima konstruksi Anda id sebagai string daripada penunjuk ke string.

Saat berhadapan dengan AWS CDK nilai opsional, termasuk nilai primitif serta tipe kompleks, Anda harus menguji pointer secara eksplisit untuk memastikannya tidak nil sebelum melakukan apa pun dengannya. Go tidak memiliki “gula sintaksis” untuk membantu menangani nilai kosong atau hilang seperti yang dilakukan beberapa bahasa lain. Namun, nilai yang diperlukan dalam bundel properti dan struktur serupa dijamin ada (konstruksi gagal jika tidak), jadi nilai ini tidak perlu diperiksanil.

Konstruksi dan Alat Peraga

Konstruksi, yang mewakili satu atau lebih AWS sumber daya dan atribut terkait, direpresentasikan dalam Go sebagai antarmuka. Misalnya, awss3.Bucket adalah antarmuka. Setiap konstruksi memiliki fungsi pabrik, sepertiawss3.NewBucket, untuk mengembalikan struct yang mengimplementasikan antarmuka yang sesuai.

Semua fungsi pabrik mengambil tiga argumen: scope di mana konstruksi sedang didefinisikan (induknya di pohon konstruksi), sebuah, dan idprops, bundel pasangan kunci/nilai yang digunakan konstruksi untuk mengonfigurasi sumber daya yang dibuatnya. Pola “bundel atribut” juga digunakan di tempat lain di AWS CDK.

Di Go, alat peraga diwakili oleh tipe struct tertentu untuk setiap konstruksi. Misalnya, awss3.Bucket mengambil argumen props tipeawss3.BucketProps. Gunakan struct literal untuk menulis argumen props.

var bucket = awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &awss3.BucketProps{ Versioned: jsii.Bool(true), })

Struktur generik

Di beberapa tempat, AWS CDK menggunakan JavaScript array atau objek yang tidak diketik sebagai masukan ke metode. (Lihat, misalnya, AWS CodeBuildBuildSpec.fromObject()metode.) Di Go, objek-objek ini direpresentasikan sebagai irisan dan antarmuka kosong, masing-masing.

CDKMenyediakan fungsi pembantu variadik seperti jsii.Strings untuk membangun irisan yang mengandung tipe primitif.

jsii.Strings("One", "Two", "Three")

Mengembangkan konstruksi kustom

Di Go, biasanya lebih mudah untuk menulis konstruksi baru daripada memperluas yang sudah ada. Pertama, tentukan tipe struct baru, sematkan secara anonim satu atau lebih tipe yang ada jika semantik seperti ekstensi diinginkan. Tulis metode untuk fungsionalitas baru apa pun yang Anda tambahkan dan bidang yang diperlukan untuk menyimpan data yang mereka butuhkan. Tentukan antarmuka alat peraga jika konstruksi Anda membutuhkannya. Akhirnya, tulis fungsi pabrik NewMyConstruct() untuk mengembalikan instance konstruksi Anda.

Jika Anda hanya mengubah beberapa nilai default pada konstruksi yang ada atau menambahkan perilaku sederhana di instantiation, Anda tidak memerlukan semua pipa ledeng itu. Sebagai gantinya, tulis fungsi pabrik yang memanggil fungsi pabrik dari konstruksi yang Anda “perluas.” Dalam CDK bahasa lain, misalnya, Anda dapat membuat TypedBucket konstruksi yang menerapkan tipe objek di bucket Amazon S3 dengan mengganti s3.Bucket tipe dan, di penginisialisasi tipe baru Anda, menambahkan kebijakan bucket yang hanya mengizinkan ekstensi nama file yang ditentukan untuk ditambahkan ke bucket. Di Go, lebih mudah untuk hanya menulis NewTypedBucket yang mengembalikan s3.Bucket (menggunakan instantiateds3.NewBucket) yang telah Anda tambahkan kebijakan bucket yang sesuai. Tidak ada jenis konstruksi baru yang diperlukan karena fungsionalitas sudah tersedia dalam konstruksi bucket standar; “konstruksi” baru hanya menyediakan cara yang lebih sederhana untuk mengonfigurasinya.

Membangun, mensintesis, dan menyebarkan

AWS CDK Secara otomatis mengompilasi aplikasi Anda sebelum menjalankannya. Namun, membangun aplikasi Anda secara manual dapat berguna untuk memeriksa kesalahan dan menjalankan pengujian. Anda dapat melakukan ini dengan mengeluarkan go build pada prompt perintah saat berada di direktori root proyek Anda.

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