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.
Anda dapat mengonfigurasi AWS lingkungan dengan berbagai cara untuk digunakan dengan file AWS Cloud Development Kit (AWS CDK). Metode terbaik untuk mengelola AWS lingkungan akan bervariasi, berdasarkan kebutuhan spesifik Anda.
Setiap tumpukan CDK dalam aplikasi Anda pada akhirnya harus dikaitkan dengan lingkungan untuk menentukan ke mana tumpukan akan digunakan.
Untuk pengenalan AWS lingkungan, lihatLingkungan untuk AWS CDK.
Topik
Di mana Anda dapat menentukan lingkungan dari
Anda dapat menentukan lingkungan dalam kredensyal dan file konfigurasi, atau dengan menggunakan env
properti konstruksi dari Stack
Construct Library. AWS
Kredensial dan file konfigurasi
Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk membuat credentials
dan config
file yang menyimpan, mengatur, dan mengelola informasi AWS lingkungan Anda. Untuk mempelajari lebih lanjut tentang file-file ini, lihat Pengaturan konfigurasi dan file kredensyal di Panduan AWS Command Line Interface Pengguna.
Nilai yang disimpan dalam file-file ini diatur oleh profil. Cara Anda memberi nama profil Anda dan pasangan nilai kunci dalam file-file ini akan bervariasi berdasarkan metode Anda mengonfigurasi akses terprogram. Untuk mempelajari lebih lanjut tentang metode yang berbeda, lihatKonfigurasikan kredensi keamanan untuk AWS CDK CLI.
Secara umum, AWS CDK menyelesaikan Akun AWS informasi dari credentials
file Anda dan Wilayah AWS informasi dari file Andaconfig
.
Setelah Anda mengkonfigurasi config
file credentials
dan Anda, Anda dapat menentukan lingkungan yang akan digunakan dengan AWS CDK CLI dan melalui variabel lingkungan.
properti env dari konstruksi Stack
Anda dapat menentukan lingkungan untuk setiap tumpukan dengan menggunakan env
properti Stack
konstruksi. Properti ini mendefinisikan akun dan Wilayah yang akan digunakan. Anda dapat meneruskan nilai hard-code ke properti ini atau meneruskan variabel lingkungan yang ditawarkan oleh CDK.
Untuk melewati variabel lingkungan, gunakan variabel AWS_DEFAULT_ACCOUNT
dan AWS_DEFAULT_REGION
lingkungan. Variabel lingkungan ini dapat meneruskan nilai dari config
file Anda credentials
dan. Anda juga dapat menggunakan logika dalam kode CDK Anda untuk menentukan nilai variabel lingkungan ini.
Prioritas lingkungan dengan AWS CDK
Jika Anda menggunakan beberapa metode menentukan lingkungan, AWS CDK mematuhi prioritas berikut:
-
Nilai hard-code ditentukan dengan
env
properti konstruksi.Stack
-
AWS_DEFAULT_ACCOUNT
dan variabelAWS_DEFAULT_REGION
lingkungan ditentukan denganenv
propertiStack
konstruksi. -
Informasi lingkungan yang terkait dengan profil dari Anda
credentials
danconfig
file dan diteruskan ke CDK CLI menggunakan--profile
opsi. -
default
Profil dari Andacredentials
danconfig
file.
Kapan menentukan lingkungan
Ketika Anda mengembangkan dengan CDK, Anda mulai dengan mendefinisikan tumpukan CDK, yang berisi konstruksi yang mewakili sumber daya. AWS Selanjutnya, Anda mensintesis setiap tumpukan CDK ke dalam template. AWS CloudFormation Anda kemudian menyebarkan CloudFormation template ke lingkungan Anda. Bagaimana Anda menentukan lingkungan menentukan kapan informasi lingkungan Anda diterapkan dan dapat memengaruhi perilaku dan hasil CDK.
Tentukan lingkungan pada sintesis templat
Saat Anda menentukan informasi lingkungan menggunakan env
properti Stack
konstruksi, informasi lingkungan Anda diterapkan pada sintesis templat. Menjalankan cdk synth
atau cdk
deploy
menghasilkan template khusus lingkungan CloudFormation .
Jika Anda menggunakan variabel lingkungan dalam env
properti, Anda harus menggunakan --profile
opsi dengan CDK CLI perintah untuk meneruskan profil yang berisi informasi lingkungan Anda dari kredensyal dan file konfigurasi Anda. Informasi ini kemudian akan diterapkan pada sintesis template untuk menghasilkan template khusus lingkungan.
Informasi lingkungan dalam CloudFormation template lebih diutamakan daripada metode lain. Misalnya, jika Anda menyediakan lingkungan yang berbedacdk deploy --profile
, profil akan diabaikan.profile
Saat Anda memberikan informasi lingkungan dengan cara ini, Anda dapat menggunakan kode dan logika yang bergantung pada lingkungan dalam aplikasi CDK Anda. Ini juga berarti bahwa template yang disintesis bisa berbeda, berdasarkan mesin, pengguna, atau sesi yang disintesis di bawahnya. Pendekatan ini sering dapat diterima atau diinginkan selama pengembangan, tetapi tidak direkomendasikan untuk penggunaan produksi.
Tentukan lingkungan pada penyebaran tumpukan
Jika Anda tidak menentukan lingkungan menggunakan env
properti Stack
konstruksi, CDK CLI akan menghasilkan template agnostik lingkungan CloudFormation pada sintesis. Anda kemudian dapat menentukan lingkungan yang akan digunakan dengan menggunakancdk deploy --profile
.profile
Jika Anda tidak menentukan profil saat menerapkan template agnostik lingkungan, CDK CLI akan mencoba menggunakan nilai lingkungan dari default
profil Anda credentials
dan config
file saat penerapan.
Jika informasi lingkungan tidak tersedia saat penyebaran, AWS CloudFormation akan mencoba untuk menyelesaikan informasi lingkungan saat penyebaran melalui atribut terkait lingkungan seperti,, dan. stack.account
stack.region
stack.availabilityZones
Untuk tumpukan agnostik lingkungan, konstruksi dalam tumpukan tidak dapat menggunakan informasi lingkungan dan Anda tidak dapat menggunakan logika yang memerlukan informasi lingkungan. Misalnya, Anda tidak dapat menulis kode seperti if (stack.region ====
'us-east-1')
atau menggunakan metode konstruksi yang memerlukan informasi lingkungan sepertiVpc.fromLookup
. Untuk menggunakan fitur ini, Anda harus menentukan lingkungan dengan env
properti.
Untuk tumpukan agnostik lingkungan, konstruksi apa pun yang menggunakan Availability Zones akan melihat dua Availability Zone, memungkinkan tumpukan untuk diterapkan ke Wilayah mana pun.
Cara menentukan lingkungan dengan AWS CDK
Tentukan lingkungan hard-code untuk setiap tumpukan
Gunakan env
properti Stack
konstruksi untuk menentukan nilai AWS lingkungan untuk tumpukan Anda. Berikut adalah contohnya:
const envEU = { account: '2383838383', region: 'eu-west-1' };
const envUSA = { account: '8373873873', region: 'us-west-2' };
new MyFirstStack(app, 'first-stack-us', { env: envUSA });
new MyFirstStack(app, 'first-stack-eu', { env: envEU });
Kami merekomendasikan pendekatan ini untuk lingkungan produksi. Dengan secara eksplisit menentukan lingkungan dengan cara ini, Anda dapat memastikan bahwa tumpukan selalu diterapkan ke lingkungan tertentu.
Tentukan lingkungan menggunakan variabel lingkungan
AWS CDK Ini menyediakan dua variabel lingkungan yang dapat Anda gunakan dalam kode CDK Anda: CDK_DEFAULT_ACCOUNT
danCDK_DEFAULT_REGION
. Ketika Anda menggunakan variabel lingkungan ini dalam env
properti instance tumpukan Anda, Anda dapat meneruskan informasi lingkungan dari kredensi dan file konfigurasi Anda menggunakan CDK CLI --profile
pilihan.
Berikut ini adalah contoh bagaimana menentukan variabel lingkungan ini:
Akses variabel lingkungan melalui process
objek Node.
catatan
Anda memerlukan DefinitelyTyped
modul untuk process
digunakan TypeScript. cdk
init
menginstal modul ini untuk Anda. Namun, Anda harus menginstal modul ini secara manual jika Anda bekerja dengan proyek yang dibuat sebelum ditambahkan, atau jika Anda tidak menyiapkan proyek Anda menggunakancdk
init
.
npm install @types/node
new MyDevStack(app, 'dev', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}});
Dengan menentukan lingkungan menggunakan variabel lingkungan, Anda dapat memiliki tumpukan CDK yang sama yang disintesis ke AWS CloudFormation templat untuk lingkungan yang berbeda. Ini berarti Anda dapat menerapkan tumpukan CDK yang sama ke AWS lingkungan yang berbeda tanpa harus memodifikasi kode CDK Anda. Anda hanya perlu menentukan profil yang akan digunakan saat menjalankancdk synth
.
Pendekatan ini sangat bagus untuk lingkungan pengembangan saat menerapkan tumpukan yang sama ke lingkungan yang berbeda. Namun, kami tidak merekomendasikan pendekatan ini untuk lingkungan produksi karena kode CDK yang sama dapat mensintesis template yang berbeda, tergantung pada mesin, pengguna, atau sesi yang disintesis di bawahnya.
Tentukan lingkungan dari kredensi dan file konfigurasi Anda dengan CDK CLI
Saat menerapkan template agnostik lingkungan, gunakan opsi dengan CDK apa pun --profile
CLI perintah untuk menentukan profil yang akan digunakan. Berikut ini adalah contoh yang menyebarkan tumpukan CDK bernama myStack
menggunakan prod
profil yang didefinisikan dalam file credentials
danconfig
:
$
cdk deploy
myStack
--profileprod
Untuk informasi lebih lanjut tentang --profile
opsi, bersama dengan CDK lainnya CLI perintah dan opsi, lihatAWS CDK CLI referensi perintah.
Pertimbangan saat mengonfigurasi lingkungan dengan AWS CDK
Layanan yang Anda tentukan dengan menggunakan konstruksi dalam tumpukan Anda harus mendukung Wilayah yang Anda gunakan. Untuk daftar yang didukung Layanan AWS per wilayah, lihat AWS Layanan menurut Wilayah
Anda harus memiliki kredensyal yang valid AWS Identity and Access Management (IAM) untuk melakukan penerapan tumpukan dengan ke dalam lingkungan yang Anda tentukan AWS CDK .
Contoh
Mensintesis template agnostik lingkungan dari tumpukan CDK CloudFormation
Dalam contoh ini, kami membuat CloudFormation template agnostik lingkungan dari tumpukan CDK kami. Kami kemudian dapat menyebarkan template ini ke lingkungan apa pun.
Berikut ini adalah contoh tumpukan CDK kami. Tumpukan ini mendefinisikan bucket Amazon S3 dan output CloudFormation tumpukan untuk Wilayah bucket. Untuk contoh ini, tidak env
didefinisikan:
export class CdkAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Create the S3 bucket
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
// Create an output for the bucket's Region
new cdk.CfnOutput(this, 'BucketRegion', {
value: bucket.env.region,
});
}
}
Saat kami menjalankancdk synth
, CDK CLI menghasilkan CloudFormation template dengan parameter semu AWS::Region
sebagai nilai output untuk Wilayah bucket. Parameter ini akan diselesaikan saat penerapan:
Outputs:
BucketRegion:
Value:
Ref: AWS::Region
Untuk menyebarkan tumpukan ini ke lingkungan yang ditentukan dalam dev
profil kredensyal dan file konfigurasi kami, kami menjalankan yang berikut ini:
$
cdk deploy CdkAppStack --profile dev
Jika kami tidak menentukan profil, CDK CLI akan mencoba menggunakan informasi lingkungan dari default
profil di kredensi dan file konfigurasi kami.
Gunakan logika untuk menentukan informasi lingkungan pada sintesis template
Dalam contoh ini, kita mengkonfigurasi env
properti stack
instance kita untuk menggunakan ekspresi yang valid. Kami menentukan dua variabel lingkungan tambahan, CDK_DEPLOY_ACCOUNT
danCDK_DEPLOY_REGION
. Variabel lingkungan ini dapat mengesampingkan default pada waktu sintesis jika ada:
new MyDevStack(app, 'dev', {
env: {
account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION
}});
Dengan lingkungan tumpukan kami dideklarasikan dengan cara ini, kami kemudian dapat menulis skrip pendek atau file batch dan mengatur variabel dari argumen baris perintah, lalu memanggilcdk deploy
. Berikut adalah contohnya. Argumen apa pun di luar dua yang pertama diteruskan cdk deploy
untuk menentukan opsi atau argumen baris perintah:
#!/usr/bin/env bash
if [[ $# -ge 2 ]]; then
export CDK_DEPLOY_ACCOUNT=$1
export CDK_DEPLOY_REGION=$2
shift; shift
npx cdk deploy "$@"
exit $?
else
echo 1>&2 "Provide account and region as first two args."
echo 1>&2 "Additional args are passed through to cdk deploy."
exit 1
fi
Simpan skrip sebagaicdk-deploy-to.sh
, lalu jalankan chmod +x
cdk-deploy-to.sh
untuk membuatnya dapat dieksekusi.
Kami kemudian dapat menulis skrip tambahan yang menggunakan cdk-deploy-to
skrip untuk menyebarkan ke lingkungan tertentu. Berikut adalah contohnya:
#!/usr/bin/env bash
# cdk-deploy-to-test.sh
./cdk-deploy-to.sh 123457689 us-east-1 "$@"
Berikut ini adalah contoh yang menggunakan cdk-deploy-to
skrip untuk menyebarkan ke beberapa lingkungan. Jika penerapan pertama gagal, proses berhenti:
#!/usr/bin/env bash
# cdk-deploy-to-prod.sh
./cdk-deploy-to.sh 135792468 us-west-1 "$@" || exit
./cdk-deploy-to.sh 246813579 eu-west-1 "$@"