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.
Token dan AWS CDK
Token mewakili nilai yang hanya dapat diselesaikan di lain waktu dalam siklus hidup aplikasi. Misalnya, nama bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) yang ditentukan di CDK aplikasi hanya dialokasikan saat AWS CloudFormation template disintesis. Jika Anda mencetak bucket.bucketName
atribut, yang merupakan string, Anda akan melihat bahwa itu berisi sesuatu seperti berikut:
${TOKEN[Bucket.Name.1234]}
Ini adalah bagaimana AWS CDK mengkodekan token yang nilainya belum diketahui pada waktu konstruksi, tetapi akan tersedia nanti. AWS CDK Panggilan token placeholder ini. Dalam hal ini, ini adalah token yang dikodekan sebagai string.
Anda dapat melewatkan string ini seolah-olah itu adalah nama ember. Dalam contoh berikut, nama bucket ditentukan sebagai variabel lingkungan untuk AWS Lambda fungsi.
Ketika AWS CloudFormation template akhirnya disintesis, token dirender sebagai intrinsik. AWS CloudFormation { "Ref":
"amzn-s3-demo-bucket" }
Pada waktu penerapan, AWS CloudFormation ganti intrinsik ini dengan nama sebenarnya dari bucket yang dibuat.
Topik
Token dan pengkodean token
Token adalah objek yang mengimplementasikan IResolvableantarmuka, yang berisi satu resolve
metode. AWS CDK Memanggil metode ini selama sintesis untuk menghasilkan nilai akhir untuk AWS CloudFormation
template. Token berpartisipasi dalam proses sintesis untuk menghasilkan nilai arbitrer dari jenis apa pun.
catatan
Anda jarang akan bekerja secara langsung dengan IResolvable
antarmuka. Anda kemungkinan besar hanya akan melihat versi token yang disandikan string.
Fungsi lain biasanya hanya menerima argumen tipe dasar, seperti string
ataunumber
. Untuk menggunakan token dalam kasus ini, Anda dapat menyandikannya menjadi salah satu dari tiga jenis dengan menggunakan metode statis pada kelas CDK.token.
-
Token.asString
untuk menghasilkan pengkodean string (atau memanggil.toString()
objek token) -
Token.asList
untuk menghasilkan pengkodean daftar -
Token.asNumber
untuk menghasilkan pengkodean numerik
Ini mengambil nilai arbitrer, yang bisa berupaIResolvable
, dan menyandikannya menjadi nilai primitif dari tipe yang ditunjukkan.
penting
Karena salah satu tipe sebelumnya berpotensi menjadi token yang dikodekan, berhati-hatilah saat Anda mengurai atau mencoba membaca isinya. Misalnya, jika Anda mencoba mengurai string untuk mengekstrak nilai darinya, dan string adalah token yang dikodekan, penguraian Anda gagal. Demikian pula, jika Anda mencoba menanyakan panjang array atau melakukan operasi matematika dengan angka, Anda harus terlebih dahulu memverifikasi bahwa itu bukan token yang dikodekan.
Untuk memeriksa apakah suatu nilai memiliki token yang belum terselesaikan di dalamnya, panggil metode Token.isUnresolved
(Pythonis_unresolved
:).
Contoh berikut memvalidasi bahwa nilai string, yang bisa berupa token, panjangnya tidak lebih dari 10 karakter.
Jika nama adalah token, validasi tidak dilakukan, dan kesalahan masih dapat terjadi di tahap selanjutnya dalam siklus hidup, seperti selama penerapan.
catatan
Anda dapat menggunakan pengkodean token untuk keluar dari sistem tipe. Misalnya, Anda dapat mengkodekan string token yang menghasilkan nilai angka pada waktu sintesis. Jika Anda menggunakan fungsi-fungsi ini, Anda bertanggung jawab untuk memastikan bahwa template Anda menyelesaikan ke status yang dapat digunakan setelah sintesis.
Token yang dikodekan string
Token yang disandikan string terlihat seperti berikut ini.
${TOKEN[Bucket.Name.1234]}
Mereka dapat diteruskan seperti string biasa, dan dapat digabungkan, seperti yang ditunjukkan pada contoh berikut.
Anda juga dapat menggunakan interpolasi string, jika bahasa Anda mendukungnya, seperti yang ditunjukkan pada contoh berikut.
Hindari memanipulasi string dengan cara lain. Misalnya, mengambil substring string kemungkinan akan merusak token string.
Token yang dikodekan daftar
Token yang dikodekan daftar terlihat seperti berikut:
["#{TOKEN[Stack.NotificationArns.1234]}"]
Satu-satunya hal yang aman untuk dilakukan dengan daftar ini adalah meneruskannya langsung ke konstruksi lain. Token dalam bentuk daftar string tidak dapat digabungkan, juga elemen tidak dapat diambil dari token. Satu-satunya cara aman untuk memanipulasinya adalah dengan menggunakan fungsi AWS CloudFormation intrinsik seperti fn.Select.
Token yang dikodekan angka
Token yang dikodekan angka adalah sekumpulan angka floating-point negatif kecil yang terlihat seperti berikut ini.
-1.8881545897087626e+289
Seperti halnya token daftar, Anda tidak dapat mengubah nilai angka, karena hal itu kemungkinan akan merusak token angka. Satu-satunya operasi yang diizinkan adalah meneruskan nilai ke konstruksi lain.
Nilai malas
Selain mewakili nilai deploy-time, seperti AWS CloudFormation parameter, token juga biasa digunakan untuk mewakili nilai malas waktu sintesis. Ini adalah nilai yang nilai akhirnya akan ditentukan sebelum sintesis selesai, tetapi tidak pada titik di mana nilai dibangun. Gunakan token untuk meneruskan string literal atau nilai angka ke konstruksi lain, sedangkan nilai aktual pada waktu sintesis mungkin bergantung pada beberapa perhitungan yang belum terjadi.
Anda dapat membuat token yang mewakili nilai malas synth-time menggunakan metode statis pada Lazy
kelas, seperti lazy.String dan Lazy.Number. Metode ini menerima objek yang produce
propertinya adalah fungsi yang menerima argumen konteks dan mengembalikan nilai akhir ketika dipanggil.
Contoh berikut membuat grup Auto Scaling yang kapasitasnya ditentukan setelah pembuatannya.
Konversi ke JSON
Terkadang Anda ingin menghasilkan JSON serangkaian data arbitrer, dan Anda mungkin tidak tahu apakah data tersebut berisi token. Untuk JSON menyandikan struktur data dengan benar, terlepas dari apakah itu berisi token, gunakan tumpukan metode. toJsonString, seperti yang ditunjukkan pada contoh berikut.