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.
Konstruksi adalah blok bangunan dasar AWS Cloud Development Kit (AWS CDK) aplikasi. Konstruk adalah komponen dalam aplikasi Anda yang mewakili satu atau lebih AWS CloudFormation sumber daya dan konfigurasinya. Anda membangun aplikasi Anda, sepotong demi sepotong, dengan mengimpor dan mengonfigurasi konstruksi.
Impor dan gunakan konstruksi
Konstruksi adalah kelas yang Anda impor ke aplikasi CDK Anda dari AWS Construct Library. Anda juga dapat membuat dan mendistribusikan konstruksi Anda sendiri, atau menggunakan konstruksi yang dibuat oleh pengembang pihak ketiga.
Konstruksi adalah bagian dari Construct Programming Model (CPM). Mereka tersedia untuk digunakan dengan alat lain seperti CDK untuk Terraform (CDKtf), CDK untuk Kubernetes (CDK8s), dan Projen.
Banyak pihak ketiga juga telah menerbitkan konstruksi yang kompatibel dengan. AWS CDK Kunjungi Construct Hub
Membangun tingkat
Konstruksi dari AWS Construct Library dikategorikan menjadi tiga tingkatan. Setiap tingkat menawarkan tingkat abstraksi yang meningkat. Semakin tinggi abstraksi, semakin mudah dikonfigurasi, membutuhkan lebih sedikit keahlian. Semakin rendah abstraksi, semakin banyak kustomisasi yang tersedia, membutuhkan lebih banyak keahlian.
- Konstruksi level 1 (L1)
-
Konstruksi L1, juga dikenal sebagai sumber daya CFN, adalah konstruksi tingkat terendah dan tidak menawarkan abstraksi. Setiap konstruksi L1 memetakan langsung ke satu AWS CloudFormation sumber daya. Dengan konstruksi L1, Anda mengimpor konstruksi yang mewakili sumber daya tertentu. AWS CloudFormation Anda kemudian menentukan properti sumber daya dalam instance konstruksi Anda.
Konstruksi L1 sangat bagus untuk digunakan ketika Anda terbiasa AWS CloudFormation dan membutuhkan kontrol penuh untuk mendefinisikan properti sumber daya Anda AWS .
Dalam AWS Construct Library, konstruksi L1 diberi nama dimulai dengan
Cfn
, diikuti oleh identifier untuk AWS CloudFormation sumber daya yang diwakilinya. Misalnya,CfnBucket
konstruk adalah konstruksi L1 yang mewakili sumber daya.AWS::S3::Bucket
AWS CloudFormationKonstruksi L1 dihasilkan dari spesifikasi AWS CloudFormation sumber daya. Jika sumber daya ada di AWS CloudFormation, itu akan tersedia di AWS CDK sebagai konstruksi L1. Sumber daya atau properti baru mungkin membutuhkan waktu hingga satu minggu untuk tersedia di Perpustakaan AWS Konstruksi. Untuk informasi selengkapnya, lihat referensi jenis AWS sumber daya dan properti di Panduan AWS CloudFormation Pengguna.
- Konstruksi level 2 (L2)
-
Konstruksi L2, juga dikenal sebagai konstruksi kurasi, dikembangkan dengan cermat oleh tim CDK dan biasanya merupakan jenis konstruksi yang paling banyak digunakan. Konstruksi L2 memetakan langsung ke AWS CloudFormation sumber daya tunggal, mirip dengan konstruksi L1. Dibandingkan dengan konstruksi L1, konstruksi L2 memberikan abstraksi tingkat yang lebih tinggi melalui API berbasis niat intuitif. Konstruksi L2 mencakup konfigurasi properti default yang masuk akal, kebijakan keamanan praktik terbaik, dan menghasilkan banyak kode boilerplate dan logika lem untuk Anda.
Konstruksi L2 juga menyediakan metode pembantu untuk sebagian besar sumber daya yang membuatnya lebih sederhana dan lebih cepat untuk menentukan properti, izin, interaksi berbasis peristiwa antara sumber daya, dan banyak lagi.
s3.Bucket
Kelas ini adalah contoh konstruksi L2 untuk sumber daya bucket Amazon Simple Storage Service (Amazon S3).Library AWS Construct berisi konstruksi L2 yang ditunjuk stabil dan siap untuk digunakan produksi. Untuk konstruksi L2 yang sedang dikembangkan, mereka ditunjuk sebagai eksperimental dan ditawarkan dalam modul terpisah.
- Konstruksi level 3 (L3)
-
Konstruksi L3, juga dikenal sebagai pola, adalah abstraksi tingkat tertinggi. Setiap konstruksi L3 dapat berisi kumpulan sumber daya yang dikonfigurasi untuk bekerja sama untuk menyelesaikan tugas atau layanan tertentu dalam aplikasi Anda. Konstruksi L3 digunakan untuk membuat seluruh AWS arsitektur untuk kasus penggunaan tertentu dalam aplikasi Anda.
Untuk menyediakan desain sistem yang lengkap, atau bagian penting dari sistem yang lebih besar, konstruksi L3 menawarkan konfigurasi properti default yang berpendirian. Mereka dibangun di sekitar pendekatan tertentu untuk memecahkan masalah dan memberikan solusi. Dengan konstruksi L3, Anda dapat membuat dan mengonfigurasi beberapa sumber daya dengan cepat, dengan jumlah input dan kode paling sedikit.
ecsPatterns.ApplicationLoadBalancedFargateService
Kelas adalah contoh konstruksi L3 yang mewakili layanan yang berjalan pada cluster Amazon Elastic Container AWS Fargate Service (Amazon ECS) Container Service (Amazon ECS) dan diawali oleh penyeimbang beban aplikasi.Mirip dengan konstruksi L2, konstruksi L3 yang siap untuk penggunaan produksi disertakan dalam Construct Library. AWS Mereka yang sedang dikembangkan ditawarkan dalam modul terpisah.
Mendefinisikan konstruksi
Komposisi
Komposisi adalah pola kunci untuk mendefinisikan abstraksi tingkat yang lebih tinggi melalui konstruksi. Sebuah konstruksi tingkat tinggi dapat terdiri dari sejumlah konstruksi tingkat rendah. Dari perspektif bottom-up, Anda menggunakan konstruksi untuk mengatur AWS sumber daya individual yang ingin Anda terapkan. Anda menggunakan abstraksi apa pun yang nyaman untuk tujuan Anda, dengan level sebanyak yang Anda butuhkan.
Dengan komposisi, Anda menentukan komponen yang dapat digunakan kembali dan membagikannya seperti kode lainnya. Misalnya, tim dapat menentukan konstruksi yang mengimplementasikan praktik terbaik perusahaan untuk tabel Amazon DynamoDB, termasuk pencadangan, replikasi global, penskalaan otomatis, dan pemantauan. Tim dapat berbagi konstruksi secara internal dengan tim lain, atau secara publik.
Tim dapat menggunakan konstruksi seperti paket perpustakaan lainnya. Ketika pustaka diperbarui, pengembang mendapatkan akses ke perbaikan versi baru dan perbaikan bug, mirip dengan pustaka kode lainnya.
Inisialisasi
Konstruksi diimplementasikan di kelas yang memperluas kelas Construct
dasar. Anda mendefinisikan konstruksi dengan membuat instance kelas. Semua konstruksi mengambil tiga parameter saat diinisialisasi:
-
lingkup — Orang tua atau pemilik konstruksi. Ini bisa berupa tumpukan atau konstruksi lain. Lingkup menentukan tempat konstruk di pohon konstruksi. Anda biasanya harus lulus
this
(self
dalam Python), yang mewakili objek saat ini, untuk ruang lingkup. -
id — Pengenal yang harus unik dalam lingkup. Identifier berfungsi sebagai namespace untuk semua yang didefinisikan dalam konstruksi. Ini digunakan untuk menghasilkan pengidentifikasi unik, seperti nama sumber daya dan AWS CloudFormation logis IDs.
Pengidentifikasi hanya perlu unik dalam lingkup. Ini memungkinkan Anda membuat instance dan menggunakan kembali konstruksi tanpa memperhatikan konstruksi dan pengidentifikasi yang mungkin dikandungnya, dan memungkinkan pembuatan konstruksi menjadi abstraksi tingkat yang lebih tinggi. Selain itu, cakupan memungkinkan untuk merujuk ke kelompok konstruksi sekaligus. Contohnya termasuk untuk penandaan, atau menentukan di mana konstruksi akan digunakan.
-
props — Satu set properti atau argumen kata kunci, tergantung pada bahasa, yang menentukan konfigurasi awal konstruksi. Konstruksi tingkat yang lebih tinggi memberikan lebih banyak default, dan jika semua elemen prop opsional, Anda dapat menghilangkan parameter props sepenuhnya.
Konfigurasi
Sebagian besar konstruksi menerima props
sebagai argumen ketiga mereka (atau dalam Python, argumen kata kunci), kumpulan nama/nilai yang mendefinisikan konfigurasi konstruksi. Contoh berikut mendefinisikan bucket dengan enkripsi AWS Key Management Service (AWS KMS) dan hosting situs web statis diaktifkan. Karena tidak secara eksplisit menentukan kunci enkripsi, Bucket
konstruksi mendefinisikan yang baru kms.Key
dan mengaitkannya dengan bucket.
new s3.Bucket(this, 'MyEncryptedBucket', {
encryption: s3.BucketEncryption.KMS,
websiteIndexDocument: 'index.html'
});
Berinteraksi dengan konstruksi
Konstruksi adalah kelas yang memperluas kelas Konstruksi dasar. Setelah Anda membuat instance konstruksi, objek konstruksi mengekspos satu set metode dan properti yang memungkinkan Anda berinteraksi dengan konstruksi dan meneruskannya sebagai referensi ke bagian lain dari sistem.
AWS CDK Kerangka kerja tidak membatasi APIs konstruksi. Penulis dapat menentukan API apa pun yang mereka inginkan. Namun, AWS konstruksi yang disertakan dengan AWS Construct Library, sepertis3.Bucket
, mengikuti pedoman dan pola umum. Ini memberikan pengalaman yang konsisten di semua AWS sumber daya.
Sebagian besar AWS konstruksi memiliki seperangkat metode hibah yang dapat Anda gunakan untuk memberikan izin AWS Identity and Access Management (IAM) pada konstruksi tersebut ke prinsipal. Contoh berikut memberikan data-science
izin grup IAM untuk membaca dari bucket Amazon S3. raw-data
const rawData = new s3.Bucket(this, 'raw-data');
const dataScience = new iam.Group(this, 'data-science');
rawData.grantRead(dataScience);
Pola umum lainnya adalah AWS konstruksi untuk mengatur salah satu atribut sumber daya dari data yang disediakan di tempat lain. Atribut dapat mencakup Amazon Resource Names (ARNs), nama, atau URLs.
Kode berikut mendefinisikan AWS Lambda fungsi dan mengaitkannya dengan antrian Amazon Simple Queue Service (Amazon SQS) melalui URL antrian dalam variabel lingkungan.
const jobsQueue = new sqs.Queue(this, 'jobs');
const createJobLambda = new lambda.Function(this, 'create-job', {
runtime: lambda.Runtime.NODEJS_18_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('./create-job-lambda-code'),
environment: {
QUEUE_URL: jobsQueue.queueUrl
}
});
Untuk informasi tentang pola API yang paling umum di AWS Construct Library, lihatSumber daya dan AWS CDK.
Aplikasi dan konstruksi tumpukan
Stack
Kelas App
dan dari AWS Construct Library adalah konstruksi yang unik. Dibandingkan dengan konstruksi lain, mereka tidak mengonfigurasi AWS sumber daya sendiri. Sebaliknya, mereka digunakan untuk menyediakan konteks untuk konstruksi Anda yang lain. Semua konstruksi yang mewakili AWS
sumber daya harus didefinisikan, secara langsung atau tidak langsung, dalam lingkup konstruksi. Stack
Stack
konstruksi didefinisikan dalam lingkup App
konstruk.
Untuk mempelajari lebih lanjut tentang aplikasi CDK, lihatAWS CDK aplikasi. Untuk mempelajari lebih lanjut tentang tumpukan CDK, lihat. Pengantar AWS CDK tumpukan
Contoh berikut mendefinisikan aplikasi dengan satu tumpukan. Di dalam tumpukan, konstruksi L2 digunakan untuk mengonfigurasi sumber daya bucket Amazon S3.
import { App, Stack, StackProps } from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
class HelloCdkStack extends Stack {
constructor(scope: App, id: string, props?: StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true
});
}
}
const app = new App();
new HelloCdkStack(app, "HelloCdkStack");
Bekerja dengan konstruksi
Bekerja dengan konstruksi L1
L1 membangun peta langsung ke sumber daya individu AWS CloudFormation . Anda harus menyediakan konfigurasi sumber daya yang diperlukan.
Dalam contoh ini, kita membuat bucket
objek menggunakan konstruksi CfnBucket
L1:
const bucket = new s3.CfnBucket(this, "amzn-s3-demo-bucket", {
bucketName: "amzn-s3-demo-bucket"
});
Properti konstruksi yang bukan Boolean sederhana, string, angka, atau kontainer ditangani secara berbeda dalam bahasa yang didukung.
const bucket = new s3.CfnBucket(this, "amzn-s3-demo-bucket", {
bucketName: "amzn-s3-demo-bucket",
corsConfiguration: {
corsRules: [{
allowedOrigins: ["*"],
allowedMethods: ["GET"]
}]
}
});
penting
Anda tidak dapat menggunakan tipe properti L2 dengan konstruksi L1, atau sebaliknya. Saat bekerja dengan konstruksi L1, selalu gunakan tipe yang ditentukan untuk konstruksi L1 yang Anda gunakan. Jangan gunakan tipe dari konstruksi L1 lainnya (beberapa mungkin memiliki nama yang sama, tetapi tipenya bukan tipe yang sama).
Beberapa referensi API khusus bahasa kami saat ini memiliki kesalahan di jalur ke tipe properti L1, atau tidak mendokumentasikan kelas ini sama sekali. Kami berharap untuk segera memperbaikinya. Sementara itu, ingatlah bahwa tipe seperti itu selalu merupakan kelas dalam dari konstruksi L1 yang digunakan.
Bekerja dengan konstruksi L2
Dalam contoh berikut, kita mendefinisikan bucket Amazon S3 dengan membuat objek dari konstruksi Bucket
L2:
import * as s3 from 'aws-cdk-lib/aws-s3';
// "this" is HelloCdkStack
new s3.Bucket(this, 'MyFirstBucket', {
versioned: true
});
MyFirstBucket
bukan nama ember yang AWS CloudFormation menciptakan. Ini adalah pengidentifikasi logis yang diberikan ke konstruksi baru dalam konteks aplikasi CDK Anda. Nilai PhysicalName akan digunakan untuk memberi nama sumber daya. AWS CloudFormation
Bekerja dengan konstruksi pihak ketiga
Construct Hub
Menulis konstruksi Anda sendiri
Selain menggunakan konstruksi yang ada, Anda juga dapat menulis konstruksi Anda sendiri dan membiarkan siapa pun menggunakannya di aplikasi mereka. Semua konstruksi sama di. AWS CDK Konstruksi dari Perpustakaan AWS Konstruksi diperlakukan sama seperti konstruksi dari pustaka pihak ketiga yang diterbitkan melalui NPM, Maven, atau PyPI. Konstruksi yang dipublikasikan ke repositori paket internal perusahaan Anda juga diperlakukan dengan cara yang sama.
Untuk mendeklarasikan konstruksi baru, buat kelas yang memperluas kelas dasar Construct, dalam constructs
paket, lalu ikuti pola untuk argumen penginisialisasi.
Contoh berikut menunjukkan cara mendeklarasikan konstruksi yang mewakili bucket Amazon S3. Bucket S3 mengirimkan notifikasi Amazon Simple Notification Service (Amazon SNS) setiap kali seseorang mengunggah file ke dalamnya.
export interface NotifyingBucketProps {
prefix?: string;
}
export class NotifyingBucket extends Construct {
constructor(scope: Construct, id: string, props: NotifyingBucketProps = {}) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
const topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(new s3notify.SnsDestination(topic),
{ prefix: props.prefix });
}
}
catatan
NotifyingBucket
Konstruksi kami mewarisi bukan dari Bucket
melainkan dari. Construct
Kami menggunakan komposisi, bukan pewarisan, untuk menggabungkan bucket Amazon S3 dan topik Amazon SNS bersama-sama. Secara umum, komposisi lebih disukai daripada pewarisan ketika mengembangkan AWS CDK konstruksi.
NotifyingBucket
Konstruktor memiliki tanda tangan konstruksi yang khas:scope
,id
, dan. props
Argumen terakhir,props
, adalah opsional (mendapat nilai default{}
) karena semua alat peraga adalah opsional. (Construct
Kelas dasar tidak mengambil props
argumen.) Anda dapat menentukan instance konstruksi ini di aplikasi Anda tanpaprops
, misalnya:
new NotifyingBucket(this, 'MyNotifyingBucket');
Atau Anda dapat menggunakan props
(di Java, parameter tambahan) untuk menentukan awalan jalur untuk difilter, misalnya:
new NotifyingBucket(this, 'MyNotifyingBucket', { prefix: 'images/' });
Biasanya, Anda juga ingin mengekspos beberapa properti atau metode pada konstruksi Anda. Ini tidak terlalu berguna untuk memiliki topik tersembunyi di balik konstruksi Anda, karena pengguna konstruksi Anda tidak dapat berlangganan ke sana. Menambahkan topic
properti memungkinkan konsumen mengakses topik batin, seperti yang ditunjukkan pada contoh berikut:
export class NotifyingBucket extends Construct {
public readonly topic: sns.Topic;
constructor(scope: Construct, id: string, props: NotifyingBucketProps) {
super(scope, id);
const bucket = new s3.Bucket(this, 'bucket');
this.topic = new sns.Topic(this, 'topic');
bucket.addObjectCreatedNotification(new s3notify.SnsDestination(this.topic), { prefix: props.prefix });
}
}
Sekarang, konsumen dapat berlangganan topik, misalnya:
const queue = new sqs.Queue(this, 'NewImagesQueue');
const images = new NotifyingBucket(this, '/images');
images.topic.addSubscription(new sns_sub.SqsSubscription(queue));
Pelajari selengkapnya
Video berikut memberikan ikhtisar komprehensif tentang konstruksi CDK, dan menjelaskan bagaimana Anda dapat menggunakannya di aplikasi CDK Anda.