Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Memecahkan masalah umum AWS CDK

Mode fokus
Memecahkan masalah umum AWS CDK - 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.

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-cdkmenjalankan 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.

macOS/Linux
alias cdk="npx aws-cdk"
Windows
doskey cdk=npx aws-cdk $*
alias cdk="npx aws-cdk"

(kembali ke daftar)

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.

(kembali ke daftar)

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.

(kembali ke daftar)

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.jsonDi 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

(kembali ke daftar)

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.

(kembali ke daftar)

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

(kembali ke daftar)

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.

TypeScript
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, }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class CdkTestStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY }); } } module.exports = { CdkTestStack }
Python
import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_s3 as s3 class CdkTestStack(cdk.stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) bucket = s3.Bucket(self, "Bucket", removal_policy=cdk.RemovalPolicy.DESTROY)
Java
software.amazon.awscdk.*; import software.amazon.awscdk.services.s3.*; import software.constructs; public class CdkTestStack extends Stack { public CdkTestStack(final Construct scope, final String id) { this(scope, id, null); } public CdkTestStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); Bucket.Builder.create(this, "Bucket") .removalPolicy(RemovalPolicy.DESTROY).build(); } }
C#
using Amazon.CDK; using Amazon.CDK.AWS.S3; public CdkTestStack(Construct scope, string id, IStackProps props) : base(scope, id, props) { new Bucket(this, "Bucket", new BucketProps { RemovalPolicy = RemovalPolicy.DESTROY }); }
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

(kembali ke daftar)

PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.