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.
AWS CDK Tumpukan adalah unit tunggal terkecil dari penyebaran. Ini merupakan kumpulan AWS sumber daya yang Anda tentukan menggunakan konstruksi CDK. Saat Anda menerapkan aplikasi CDK, sumber daya dalam tumpukan CDK akan digunakan bersama sebagai tumpukan. AWS CloudFormation Untuk mempelajari lebih lanjut tentang AWS CloudFormation tumpukan, lihat Mengelola sumber daya AWS sebagai satu unit dengan AWS CloudFormation tumpukan di AWS CloudFormation Panduan Pengguna.
Anda mendefinisikan tumpukan dengan memperluas atau mewarisi dari konstruksi. Stack
Contoh berikut adalah pola umum untuk mendefinisikan tumpukan CDK pada file terpisah, yang dikenal sebagai file tumpukan. Di sini, kita memperluas atau mewarisi Stack
kelas dan mendefinisikan konstruktor yang menerimascope
,, id
dan. props
Kemudian, kita memanggil konstruktor Stack
kelas dasar menggunakan super
dengan yang diterimascope
,id
, dan: props
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class MyCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define your constructs here
}
}
Contoh sebelumnya hanya mendefinisikan tumpukan. Untuk membuat tumpukan, itu harus dipakai dalam konteks aplikasi CDK Anda. Pola umum adalah mendefinisikan aplikasi CDK Anda dan menginisialisasi tumpukan Anda pada file terpisah, yang dikenal sebagai file aplikasi.
Berikut ini adalah contoh yang membuat tumpukan CDK bernamaMyCdkStack
. Di sini, aplikasi CDK MyCdkStack
dibuat dan dipakai dalam konteks aplikasi:
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyCdkStack } from '../lib/my-cdk-stack';
const app = new cdk.App();
new MyCdkStack(app, 'MyCdkStack', {
});
Contoh berikut membuat aplikasi CDK yang berisi dua tumpukan:
const app = new App();
new MyFirstStack(app, 'stack1');
new MySecondStack(app, 'stack2');
app.synth();
Tentang stack API
Stack
Objek menyediakan API kaya, termasuk yang berikut ini:
-
Stack.of(construct)
— Metode statis yang mengembalikan Stack di mana konstruksi didefinisikan. Ini berguna jika Anda perlu berinteraksi dengan tumpukan dari dalam konstruksi yang dapat digunakan kembali. Panggilan gagal jika tumpukan tidak dapat ditemukan dalam ruang lingkup. -
stack.stackName
(Python:stack_name
) — Mengembalikan nama fisik tumpukan. Seperti disebutkan sebelumnya, semua AWS CDK tumpukan memiliki nama fisik yang AWS CDK dapat diselesaikan selama sintesis. -
stack.region
danstack.account
— Kembalikan AWS Wilayah dan akun, masing-masing, ke mana tumpukan ini akan digunakan. Properti ini mengembalikan salah satu dari yang berikut:-
Akun atau Wilayah secara eksplisit ditentukan saat tumpukan ditentukan
-
Token yang disandikan string yang menyelesaikan parameter AWS CloudFormation semu untuk akun dan Wilayah untuk menunjukkan bahwa tumpukan ini adalah lingkungan agnostik
Untuk informasi tentang bagaimana lingkungan ditentukan untuk tumpukan, lihatLingkungan untuk AWS CDK.
-
-
stack.addDependency(stack)
(Python:stack.add_dependency(stack)
— Dapat digunakan untuk secara eksplisit mendefinisikan urutan ketergantungan antara dua tumpukan. Urutan ini dihormati oleh cdk deploy perintah saat menerapkan beberapa tumpukan sekaligus. -
stack.tags
— Mengembalikan TagManageryang dapat Anda gunakan untuk menambah atau menghapus tag tingkat tumpukan. Manajer tag ini menandai semua sumber daya di dalam tumpukan, dan juga menandai tumpukan itu sendiri saat dibuat AWS CloudFormation. -
stack.partition
,stack.urlSuffix
(Python:url_suffix
), (stack.stackId
Python:stack_id
), dan (stack.notificationArn
Python:notification_arn
) — Kembalikan token yang menyelesaikan parameter semu masing-masing AWS CloudFormation , seperti.{ "Ref": "AWS::Partition" }
Token ini dikaitkan dengan objek tumpukan tertentu sehingga AWS CDK kerangka kerja dapat mengidentifikasi referensi cross-stack. -
stack.availabilityZones
(Python:availability_zones
) — Mengembalikan set Availability Zones yang tersedia di lingkungan tempat tumpukan ini digunakan. Untuk tumpukan agnostik lingkungan, ini selalu mengembalikan array dengan dua Availability Zones. Untuk tumpukan khusus lingkungan, AWS CDK kueri lingkungan dan menampilkan set persis Availability Zone yang tersedia di Wilayah yang Anda tentukan. -
stack.parseArn(arn)
danstack.formatArn(comps)
(Python:parse_arn
,format_arn
) - Dapat digunakan untuk bekerja dengan Amazon Resource Names ()ARNs. -
stack.toJsonString(obj)
(Python:to_json_string
) - Dapat digunakan untuk memformat objek arbitrer sebagai string JSON yang dapat disematkan dalam template. AWS CloudFormation Objek dapat menyertakan token, atribut, dan referensi, yang hanya diselesaikan selama penerapan. -
stack.templateOptions
(Python:template_options
) — Gunakan untuk menentukan opsi AWS CloudFormation template, seperti Transform, Description, dan Metadata, untuk tumpukan Anda.
Menggunakan tumpukan
Tumpukan digunakan sebagai AWS CloudFormation tumpukan ke lingkungan AWS . Lingkungan mencakup spesifik Akun AWS dan Wilayah AWS.
Saat Anda menjalankan cdk synth
perintah untuk aplikasi dengan beberapa tumpukan, rakitan cloud menyertakan templat terpisah untuk setiap instance tumpukan. Bahkan jika dua tumpukan adalah contoh dari kelas yang sama, AWS CDK memancarkannya sebagai dua templat individual.
Anda dapat mensintesis setiap template dengan menentukan nama tumpukan dalam perintah. cdk synth
Contoh berikut mensintesis template untukstack1
:
$
cdk synthstack1
Pendekatan ini secara konseptual berbeda dari bagaimana AWS CloudFormation template biasanya digunakan, di mana template dapat digunakan beberapa kali dan diparameterisasi melalui parameter.AWS CloudFormation Meskipun AWS CloudFormation parameter dapat didefinisikan dalam AWS CDK, mereka umumnya tidak disarankan karena AWS CloudFormation parameter diselesaikan hanya selama penerapan. Ini berarti Anda tidak dapat menentukan nilainya dalam kode Anda.
Misalnya, untuk menyertakan sumber daya secara kondisional di aplikasi berdasarkan nilai parameter, Anda harus menyiapkan AWS CloudFormation kondisi dan menandai sumber daya dengannya. Ini AWS CDK mengambil pendekatan di mana templat konkret diselesaikan pada waktu sintesis. Oleh karena itu, Anda dapat menggunakan if
pernyataan untuk memeriksa nilai untuk menentukan apakah sumber daya harus didefinisikan atau beberapa perilaku harus diterapkan.
catatan
AWS CDK Ini memberikan resolusi sebanyak mungkin selama waktu sintesis untuk memungkinkan penggunaan bahasa pemrograman Anda secara idiomatik dan alami.
Seperti konstruksi lainnya, tumpukan dapat disusun bersama menjadi beberapa kelompok. Kode berikut menunjukkan contoh layanan yang terdiri dari tiga tumpukan: bidang kontrol, bidang data, dan tumpukan pemantauan. Konstruksi layanan didefinisikan dua kali: sekali untuk lingkungan beta dan sekali untuk lingkungan produksi.
import { App, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
interface EnvProps {
prod: boolean;
}
// imagine these stacks declare a bunch of related resources
class ControlPlane extends Stack {}
class DataPlane extends Stack {}
class Monitoring extends Stack {}
class MyService extends Construct {
constructor(scope: Construct, id: string, props?: EnvProps) {
super(scope, id);
// we might use the prod argument to change how the service is configured
new ControlPlane(this, "cp");
new DataPlane(this, "data");
new Monitoring(this, "mon"); }
}
const app = new App();
new MyService(app, "beta");
new MyService(app, "prod", { prod: true });
app.synth();
AWS CDK Aplikasi ini akhirnya terdiri dari enam tumpukan, tiga untuk setiap lingkungan:
$
cdk ls
betacpDA8372D3 betadataE23DB2BA betamon632BD457 prodcp187264CE proddataF7378CE5 prodmon631A1083
Nama fisik AWS CloudFormation tumpukan secara otomatis ditentukan oleh AWS CDK berdasarkan jalur konstruksi tumpukan di pohon. Secara default, nama tumpukan berasal dari ID konstruksi Stack
objek. Namun, Anda dapat menentukan nama eksplisit dengan menggunakan stackName
prop (dalam Python,stack_name
), sebagai berikut.
new MyStack(this, 'not:a:stack:name', { stackName: 'this-is-stack-name' });
Bekerja dengan tumpukan nest
Tumpukan bersarang adalah tumpukan CDK yang Anda buat di dalam tumpukan lain, yang dikenal sebagai tumpukan induk. Anda membuat tumpukan bersarang menggunakan konstruksi. NestedStack
Dengan menggunakan tumpukan bersarang, Anda dapat mengatur sumber daya di beberapa tumpukan. Tumpukan bersarang juga menawarkan jalan di sekitar batas AWS CloudFormation 500 sumber daya untuk tumpukan. Tumpukan bersarang dihitung sebagai hanya satu sumber daya di tumpukan yang berisi itu. Namun, dapat berisi hingga 500 sumber daya, termasuk tumpukan bersarang tambahan.
Ruang lingkup tumpukan bersarang harus berupa Stack
atau NestedStack
konstruksi. Tumpukan bersarang tidak perlu dideklarasikan secara leksikal di dalam tumpukan induknya. Anda hanya perlu meneruskan tumpukan induk sebagai parameter pertama (scope
) saat membuat instance tumpukan bersarang. Selain pembatasan ini, mendefinisikan konstruksi dalam tumpukan bersarang bekerja persis sama seperti di tumpukan biasa.
Pada waktu sintesis, tumpukan bersarang disintesis ke AWS CloudFormation templatnya sendiri, yang diunggah ke bucket AWS CDK
pementasan saat penerapan. Tumpukan bersarang terikat pada tumpukan induknya dan tidak diperlakukan sebagai artefak penerapan independen. Mereka tidak terdaftar olehcdk list
, dan mereka tidak dapat digunakan olehcdk
deploy
.
Awas
Perubahan postur keamanan tidak ditampilkan sebelum penerapan untuk tumpukan bersarang. Informasi ini hanya ditampilkan untuk tumpukan tingkat atas.