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.
Topik ini menjelaskan cara memecahkan masalah berikut dengan. AWS CDK
Setelah memperbarui AWS CDK, AWS CDK Toolkit (CLI) melaporkan ketidakcocokan dengan Construct Library AWS
Versi AWS CDK Toolkit (yang menyediakan cdk
perintah) harus setidaknya sama dengan versi modul AWS Construct Library utama,. aws-cdk-lib
Toolkit dimaksudkan agar kompatibel ke belakang. Versi 2.x terbaru dari toolkit dapat digunakan dengan rilis pustaka 1.x atau 2.x apa pun. Untuk alasan ini, kami sarankan Anda menginstal komponen ini secara global dan tetap up to date.
npm update -g aws-cdk
Jika Anda perlu bekerja dengan beberapa versi AWS CDK Toolkit, instal versi toolkit tertentu secara lokal di folder proyek Anda.
Jika Anda menggunakan TypeScript atau JavaScript, direktori proyek Anda sudah berisi salinan lokal berversi CDK Toolkit.
Jika Anda menggunakan bahasa lain, gunakan npm
untuk menginstal AWS CDK Toolkit, menghilangkan -g
bendera dan menentukan versi yang diinginkan. Sebagai contoh:
npm install aws-cdk@2.0
Untuk menjalankan AWS CDK Toolkit yang diinstal secara lokal, gunakan perintah npx aws-cdk
bukan hanya. cdk
Sebagai contoh:
npx aws-cdk deploy MyStack
npx aws-cdk
menjalankan versi lokal AWS CDK Toolkit jika ada. Ini kembali ke versi global ketika sebuah proyek tidak memiliki instalasi lokal. Anda mungkin merasa nyaman untuk mengatur alias shell untuk memastikan selalu cdk
dipanggil dengan cara ini.
alias cdk="npx aws-cdk"
Saat menerapkan AWS CDK tumpukan saya, saya menerima kesalahan NoSuchBucket
AWS Lingkungan Anda belum di-bootstrap, sehingga tidak memiliki bucket Amazon S3 untuk menyimpan sumber daya selama penerapan. Anda dapat membuat bucket pementasan dan sumber daya lain yang diperlukan dengan perintah berikut:
cdk bootstrap aws://
ACCOUNT-NUMBER
/REGION
Untuk menghindari menghasilkan AWS muatan yang tidak terduga, AWS CDK tidak secara otomatis mem-bootstrap lingkungan apa pun. Anda harus secara eksplisit mem-bootstrap setiap lingkungan yang akan Anda gunakan.
Secara default, sumber daya bootstrap dibuat di Wilayah atau Wilayah yang digunakan oleh tumpukan dalam AWS CDK
aplikasi saat ini. Atau, mereka dibuat di Wilayah yang ditentukan dalam AWS profil lokal Anda (ditetapkan olehaws
configure
), menggunakan akun profil itu. Anda dapat menentukan akun dan Wilayah yang berbeda pada baris perintah sebagai berikut. (Anda harus menentukan akun dan Wilayah jika Anda tidak berada di direktori aplikasi.)
cdk bootstrap aws://
ACCOUNT-NUMBER
/REGION
Untuk informasi selengkapnya, lihat AWS CDK bootstrap.
Saat menerapkan AWS CDK tumpukan saya, saya menerima pesan forbidden: null
Anda menerapkan tumpukan yang membutuhkan sumber daya bootstrap, tetapi menggunakan peran IAM atau akun yang tidak memiliki izin untuk menulis ke sana. (Bucket staging digunakan saat menerapkan tumpukan yang berisi aset atau yang mensintesis AWS CloudFormation templat yang lebih besar dari 50K.) Gunakan akun atau peran yang memiliki izin untuk melakukan tindakan s3:*
terhadap bucket yang disebutkan dalam pesan kesalahan.
Saat mensintesis AWS CDK tumpukan, saya mendapatkan pesannya --app is
required either in command-line, in cdk.json or in ~/.cdk.json
Pesan ini biasanya berarti bahwa Anda tidak berada di direktori utama AWS CDK proyek Anda ketika Anda mengeluarkancdk
synth
. File cdk.json
dalam direktori ini, yang dibuat oleh cdk init
perintah, berisi baris perintah yang diperlukan untuk menjalankan (dan dengan demikian mensintesis) AWS CDK aplikasi Anda. Untuk TypeScript aplikasi, misalnya, cdk.json
defaultnya terlihat seperti ini:
{
"app": "npx ts-node bin/my-cdk-app.ts"
}
Sebaiknya Anda mengeluarkan cdk
perintah hanya di direktori utama proyek Anda, sehingga AWS CDK toolkit dapat menemukannya di cdk.json
sana dan berhasil menjalankan aplikasi Anda.
Jika ini tidak praktis karena alasan tertentu, AWS CDK Toolkit mencari baris perintah aplikasi di dua lokasi lain:
-
cdk.json
Di direktori home Anda -
Pada
cdk synth
perintah itu sendiri menggunakan-a
opsi
Misalnya, Anda mungkin mensintesis tumpukan dari TypeScript aplikasi sebagai berikut.
cdk synth --app "npx ts-node my-cdk-app.ts" MyStack
Saat mensintesis AWS CDK tumpukan, saya menerima kesalahan karena AWS CloudFormation template berisi terlalu banyak sumber daya
AWS CDK Menghasilkan dan menyebarkan AWS CloudFormation template. AWS CloudFormation memiliki batas keras pada jumlah sumber daya yang dapat dikandung oleh tumpukan. Dengan itu AWS CDK, Anda dapat berlari melawan batas ini lebih cepat dari yang Anda harapkan.
catatan
Batas AWS CloudFormation sumber daya adalah 500 pada tulisan ini. Lihat AWS CloudFormation kuota untuk batas sumber daya saat ini.
AWS Konstruksi berbasis niat tingkat tinggi dari Perpustakaan Konstruksi secara otomatis menyediakan sumber daya tambahan apa pun yang diperlukan untuk pencatatan, manajemen kunci, otorisasi, dan tujuan lainnya. Misalnya, memberikan satu akses sumber daya ke sumber daya lain menghasilkan objek IAM apa pun yang diperlukan untuk layanan yang relevan untuk berkomunikasi.
Dalam pengalaman kami, penggunaan konstruksi berbasis niat di dunia nyata menghasilkan 1-5 AWS CloudFormation sumber daya per konstruksi, meskipun ini dapat bervariasi. Untuk aplikasi tanpa server, 5—8 AWS sumber daya per titik akhir API adalah tipikal.
Pola, yang mewakili tingkat abstraksi yang lebih tinggi, memungkinkan Anda mendefinisikan lebih banyak AWS sumber daya dengan kode yang lebih sedikit. AWS CDK Kode dalamContoh: Buat AWS Fargate layanan menggunakan AWS CDK, misalnya, menghasilkan lebih dari 50 AWS CloudFormation sumber daya sambil mendefinisikan hanya tiga konstruksi!
Melebihi batas AWS CloudFormation sumber daya adalah kesalahan selama AWS CloudFormation sintesis. AWS CDK Masalah peringatan jika tumpukan Anda melebihi 80% dari batas. Anda dapat menggunakan batas yang berbeda dengan menyetel maxResources
properti di tumpukan Anda, atau menonaktifkan validasi dengan menyetel maxResources
ke 0.
Tip
Anda bisa mendapatkan jumlah yang tepat dari sumber daya dalam output yang disintesis menggunakan skrip utilitas berikut. (Karena setiap AWS CDK pengembang membutuhkan Node.js, skrip ditulis dalam JavaScript.)
// rescount.js - count the resources defined in a stack
// invoke with: node rescount.js <path-to-stack-json>
// e.g. node rescount.js cdk.out/MyStack.template.json
import * as fs from 'fs';
const path = process.argv[2];
if (path) fs.readFile(path, 'utf8', function(err, contents) {
console.log(err ? `${err}` :
`${Object.keys(JSON.parse(contents).Resources).length} resources defined in ${path}`);
}); else console.log("Please specify the path to the stack's output .json file");
Saat jumlah sumber daya tumpukan Anda mendekati batas, pertimbangkan untuk merancang ulang untuk mengurangi jumlah sumber daya yang terkandung dalam tumpukan Anda: misalnya, dengan menggabungkan beberapa fungsi Lambda, atau dengan memecah tumpukan Anda menjadi beberapa tumpukan. CDK mendukung referensi antar tumpukan, sehingga Anda dapat memisahkan fungsionalitas aplikasi menjadi tumpukan yang berbeda dengan cara apa pun yang paling masuk akal bagi Anda.
catatan
AWS CloudFormation para ahli sering menyarankan penggunaan tumpukan bersarang sebagai solusi untuk batas sumber daya. AWS CDK Mendukung pendekatan ini melalui NestedStackkonstruksi.
Saya menentukan tiga (atau lebih) Availability Zone untuk grup Auto Scaling atau VPC saya, tetapi hanya diterapkan dalam dua
Untuk mendapatkan jumlah Availability Zone yang Anda minta, tentukan akun dan Region di env
properti stack. Jika Anda tidak menentukan keduanya, secara default AWS CDK, mensintesis tumpukan sebagai agnostik lingkungan. Anda kemudian dapat menerapkan tumpukan ke Wilayah tertentu menggunakan AWS CloudFormation. Karena beberapa Wilayah hanya memiliki dua Availability Zone, template agnostik lingkungan tidak menggunakan lebih dari dua.
catatan
Di masa lalu, Wilayah sesekali diluncurkan dengan hanya satu Availability Zone. AWS CDK Tumpukan agnostik lingkungan tidak dapat digunakan ke Wilayah tersebut. Namun, pada tulisan ini, semua AWS Wilayah memiliki setidaknya dua AZs.
Anda dapat mengubah perilaku ini dengan mengganti properti stack availablilityZones
(Pythonavailability_zones
:) Anda untuk secara eksplisit menentukan zona yang ingin Anda gunakan.
Untuk informasi selengkapnya tentang menentukan akun dan wilayah tumpukan pada waktu sintesis, sambil mempertahankan fleksibilitas untuk menerapkan ke wilayah mana pun, lihat. Lingkungan untuk AWS CDK
Bucket S3 saya, tabel DynamoDB, atau sumber daya lainnya tidak dihapus saat saya mengeluarkan cdk destroy
Secara default, sumber daya yang dapat berisi data pengguna memiliki properti removalPolicy
(Python:removal_policy
)RETAIN
, dan sumber daya tidak dihapus ketika tumpukan dihancurkan. Sebaliknya, sumber daya menjadi yatim piatu dari tumpukan. Anda kemudian harus menghapus sumber daya secara manual setelah tumpukan dihancurkan. Sampai Anda melakukannya, penempatan kembali tumpukan gagal. Ini karena nama sumber daya baru yang dibuat selama penyebaran bertentangan dengan nama sumber daya yatim piatu.
Jika Anda menyetel kebijakan penghapusan sumber daya keDESTROY
, sumber daya tersebut akan dihapus saat tumpukan dihancurkan.
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class CdkTestStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const bucket = new s3.Bucket(this, 'Bucket', {
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
}
}
catatan
AWS CloudFormation tidak dapat menghapus bucket Amazon S3 yang tidak kosong. Jika Anda menyetel kebijakan penghapusan bucket Amazon S3 keDESTROY
, dan berisi data, upaya menghancurkan tumpukan akan gagal karena bucket tidak dapat dihapus. Anda dapat AWS CDK menghapus objek di ember sebelum mencoba menghancurkannya dengan menyetel autoDeleteObjects
penyangga ember ke. true