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.
Nilai konteks dan AWS CDK
Nilai konteks adalah pasangan nilai kunci yang dapat dikaitkan dengan aplikasi, tumpukan, atau konstruksi. Mereka dapat diberikan ke aplikasi Anda dari file (biasanya salah satu cdk.json
atau cdk.context.json
di direktori proyek Anda) atau pada baris perintah.
CDKToolkit menggunakan konteks untuk menyimpan nilai yang diambil dari AWS akun Anda selama sintesis. Nilai termasuk Availability Zone di akun Anda atau Amazon Machine Image (AMI) yang IDs saat ini tersedia untuk EC2 instans Amazon. Karena nilai-nilai ini disediakan oleh AWS akun Anda, mereka dapat berubah di antara proses CDK aplikasi Anda. Ini menjadikan mereka sumber potensial perubahan yang tidak diinginkan. Perilaku cache CDK Toolkit “membekukan” nilai-nilai ini untuk CDK aplikasi Anda hingga Anda memutuskan untuk menerima nilai baru.
Bayangkan skenario berikut tanpa cache konteks. Katakanlah Anda menentukan “Amazon Linux terbaru” sebagai EC2 contoh Amazon Anda, dan versi baru ini AMI dirilis. AMI Kemudian, lain kali Anda menerapkan CDK tumpukan Anda, instance Anda yang sudah diterapkan akan menggunakan yang sudah ketinggalan zaman (“salah”) AMI dan perlu ditingkatkan. Memutakhirkan akan mengakibatkan penggantian semua instance Anda yang ada dengan yang baru, yang mungkin tidak terduga dan tidak diinginkan.
Sebagai gantinya, CDK catatan akun Anda tersedia AMIs di cdk.context.json
file proyek Anda, dan menggunakan nilai tersimpan untuk operasi sintesis masa depan. Dengan cara ini, daftar AMIs tidak lagi menjadi sumber perubahan potensial. Anda juga dapat yakin bahwa tumpukan Anda akan selalu disintesis ke templat yang sama AWS CloudFormation .
Tidak semua nilai konteks adalah nilai cache dari AWS lingkungan Anda. AWS CDK bendera fiturjuga nilai konteks. Anda juga dapat membuat nilai konteks Anda sendiri untuk digunakan oleh aplikasi atau konstruksi Anda.
Kunci konteks adalah string. Nilai dapat berupa jenis apa pun yang didukung olehJSON: angka, string, array, atau objek.
Tip
Jika konstruksi Anda membuat nilai konteksnya sendiri, sertakan nama paket perpustakaan Anda di kuncinya sehingga tidak akan bertentangan dengan nilai konteks paket lain.
Banyak nilai konteks dikaitkan dengan AWS lingkungan tertentu, dan CDK aplikasi tertentu dapat diterapkan di lebih dari satu lingkungan. Kunci untuk nilai tersebut mencakup AWS akun dan Wilayah sehingga nilai dari lingkungan yang berbeda tidak bertentangan.
Kunci konteks berikut menggambarkan format yang digunakan oleh AWS CDK, termasuk akun dan Wilayah.
availability-zones:account=123456789012:region=eu-central-1
penting
Nilai konteks cache dikelola oleh AWS CDK dan konstruksinya, termasuk konstruksi yang dapat Anda tulis. Jangan menambahkan atau mengubah nilai konteks cache dengan mengedit file secara manual. Akan tetapi, berguna untuk meninjau cdk.context.json
sesekali untuk melihat nilai apa yang sedang di-cache. Nilai konteks yang tidak mewakili nilai cache harus disimpan di bawah context
kunci. cdk.json
Dengan cara ini, mereka tidak akan dihapus ketika nilai cache dihapus.
Sumber nilai konteks
Nilai konteks dapat diberikan ke AWS CDK aplikasi Anda dengan enam cara berbeda:
-
Secara otomatis dari AWS akun saat ini.
-
Melalui --context opsi ke cdk perintah. (Nilai-nilai ini selalu string.)
-
Dalam
cdk.context.json
file proyek. -
Di
context
kuncicdk.json
file proyek. -
Di
context
kunci~/.cdk.json
file Anda. -
Di AWS CDK aplikasi Anda menggunakan
construct.node.setContext()
metode ini.
File proyek cdk.context.json
adalah tempat nilai konteks AWS CDK cache diambil dari akun Anda AWS . Praktik ini menghindari perubahan tak terduga pada penerapan Anda saat, misalnya, Availability Zone baru diperkenalkan. AWS CDK Tidak menulis data konteks ke salah satu file lain yang terdaftar.
penting
Karena mereka adalah bagian dari status aplikasi Anda, cdk.json
dan cdk.context.json
harus berkomitmen untuk kontrol sumber bersama dengan kode sumber aplikasi lainnya. Jika tidak, penerapan di lingkungan lain (misalnya, pipeline CI) mungkin menghasilkan hasil yang tidak konsisten.
Nilai-nilai konteks tercakup pada konstruksi yang menciptakannya; mereka terlihat oleh konstruksi anak, tetapi tidak untuk orang tua atau saudara kandung. Nilai konteks yang ditetapkan oleh AWS CDK Toolkit (cdkperintah) dapat diatur secara otomatis, dari file, atau dari --context opsi. Nilai konteks dari sumber-sumber ini secara implisit ditetapkan pada konstruksi. App
Oleh karena itu, mereka terlihat oleh setiap konstruksi di setiap tumpukan di aplikasi.
Aplikasi Anda dapat membaca nilai konteks menggunakan construct.node.tryGetContext
metode ini. Jika entri yang diminta tidak ditemukan pada konstruksi saat ini atau salah satu induknya, hasilnya adalahundefined
. (Atau, hasilnya bisa setara dengan bahasa Anda, seperti None
di Python.)
Metode konteks
AWS CDK Mendukung beberapa metode konteks yang memungkinkan AWS CDK aplikasi memperoleh informasi kontekstual dari lingkungan. AWS Misalnya, Anda bisa mendapatkan daftar Availability Zone yang tersedia di AWS akun dan Wilayah tertentu, menggunakan tumpukan. availabilityZonesmetode.
Berikut ini adalah metode konteksnya:
- HostedZone.fromLookup
-
Mendapatkan zona yang dihosting di akun Anda.
- tumpukan. availabilityZones
-
Mendapatkan Availability Zone yang didukung.
- StringParameter.valueFromLookup
-
Mendapat nilai dari Amazon EC2 Systems Manager Parameter Store Wilayah saat ini.
- Vpc. fromLookup
-
Mendapatkan Amazon Virtual Private Clouds yang ada di akun Anda.
- LookupMachineImage
-
Mencari image mesin untuk digunakan dengan NAT instance di Amazon Virtual Private Cloud.
Jika nilai konteks yang diperlukan tidak tersedia, AWS CDK aplikasi akan memberi tahu CDK Toolkit bahwa informasi konteks tidak ada. Selanjutnya, CLI kueri AWS akun saat ini untuk informasi dan menyimpan informasi konteks yang dihasilkan dalam cdk.context.json
file. Kemudian, ia mengeksekusi AWS CDK aplikasi lagi dengan nilai konteks.
Melihat dan mengelola konteks
Gunakan cdk context perintah untuk melihat dan mengelola informasi dalam cdk.context.json
file Anda. Untuk melihat informasi ini, gunakan cdk context perintah tanpa opsi apa pun. Outputnya harus seperti berikut ini.
Context found in cdk.json: ┌───┬─────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┐ │ # │ Key │ Value │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 1 │ availability-zones:account=123456789012:region=eu-central-1 │ [ "eu-central-1a", "eu-central-1b", "eu-central-1c" ] │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 2 │ availability-zones:account=123456789012:region=eu-west-1 │ [ "eu-west-1a", "eu-west-1b", "eu-west-1c" ] │ └───┴─────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┘ Runcdk context --reset KEY_OR_NUMBER
to remove a context key. If it is a cached value, it will be refreshed on the nextcdk synth
.
Untuk menghapus nilai konteks, jalankancdk context --reset, tentukan kunci atau angka yang sesuai dengan nilai. Contoh berikut menghapus nilai yang sesuai dengan kunci kedua dalam contoh sebelumnya. Nilai ini mewakili daftar Availability Zone di Wilayah Eropa (Irlandia).
cdk context --reset 2
Context value availability-zones:account=123456789012:region=eu-west-1 reset. It will be refreshed on the next SDK synthesis run.
Oleh karena itu, jika Anda ingin memperbarui ke versi terbaru Amazon LinuxAMI, gunakan contoh sebelumnya untuk melakukan pembaruan terkontrol dari nilai konteks dan mengatur ulang. Kemudian, sintesis dan terapkan aplikasi Anda lagi.
cdk synth
Untuk menghapus semua nilai konteks yang disimpan untuk aplikasi Anda, jalankancdk context --clear, sebagai berikut.
cdk context --clear
Hanya nilai konteks yang disimpan di cdk.context.json
dapat diatur ulang atau dihapus. AWS CDK Tidak menyentuh nilai konteks lainnya. Oleh karena itu, untuk melindungi nilai konteks agar tidak disetel ulang menggunakan perintah ini, Anda dapat menyalin nilainyacdk.json
.
AWS CDK Bendera toolkit --context
Gunakan opsi --context
(-c
singkatnya) untuk meneruskan nilai konteks runtime ke CDK aplikasi Anda selama sintesis atau penerapan.
cdk synth --context key=value MyStack
Untuk menentukan beberapa nilai konteks, ulangi --context opsi beberapa kali, berikan satu pasangan kunci-nilai setiap kali.
cdk synth --context key1=value1 --context key2=value2 MyStack
Saat mensintesis beberapa tumpukan, nilai konteks yang ditentukan diteruskan ke semua tumpukan. Untuk memberikan nilai konteks yang berbeda ke tumpukan individu, gunakan kunci yang berbeda untuk nilai, atau gunakan beberapa cdk synth atau cdk deploy perintah.
Nilai konteks yang diteruskan dari baris perintah selalu string. Jika nilai biasanya dari beberapa jenis lain, kode Anda harus siap untuk mengonversi atau mengurai nilai. Anda mungkin memiliki nilai konteks non-string yang disediakan dengan cara lain (misalnya, dalamcdk.context.json
). Untuk memastikan nilai semacam ini berfungsi seperti yang diharapkan, konfirmasikan bahwa nilainya adalah string sebelum mengonversinya.
Contoh
Berikut ini adalah contoh menggunakan Amazon yang ada VPC menggunakan AWS CDK konteks.
Anda dapat menggunakan cdk diff untuk melihat efek dari meneruskan nilai konteks pada baris perintah:
cdk diff -c vpcid=vpc-0cb9c31031d0d3e22
Stack ExistsvpcStack
Outputs
[+] Output publicsubnets publicsubnets: {"Value":"subnet-06e0ea7dd302d3e8f,subnet-01fc0acfb58f3128f"}
Nilai konteks yang dihasilkan dapat dilihat seperti yang ditunjukkan di sini.
cdk context -j
{ "vpc-provider:account=123456789012:filter.vpc-id=vpc-0cb9c31031d0d3e22:region=us-east-1": { "vpcId": "vpc-0cb9c31031d0d3e22", "availabilityZones": [ "us-east-1a", "us-east-1b" ], "privateSubnetIds": [ "subnet-03ecfc033225be285", "subnet-0cded5da53180ebfa" ], "privateSubnetNames": [ "Private" ], "privateSubnetRouteTableIds": [ "rtb-0e955393ced0ada04", "rtb-05602e7b9f310e5b0" ], "publicSubnetIds": [ "subnet-06e0ea7dd302d3e8f", "subnet-01fc0acfb58f3128f" ], "publicSubnetNames": [ "Public" ], "publicSubnetRouteTableIds": [ "rtb-00d1fdfd823c82289", "rtb-04bb1969b42969bcb" ] } }