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.
Impor sumber daya dari AWS CloudFormation template ke AWS Cloud Development Kit (AWS CDK) aplikasi Anda dengan menggunakan cloudformation-include.CfnInclude
konstruksi untuk mengonversi sumber daya ke konstruksi L1.
Setelah mengimpor, Anda dapat bekerja dengan resource ini di aplikasi Anda dengan cara yang sama seperti jika mereka awalnya didefinisikan dalam AWS CDK kode. Anda juga dapat menggunakan konstruksi L1 ini dalam konstruksi tingkat yang lebih tinggi AWS CDK . Misalnya, ini memungkinkan Anda menggunakan metode pemberian izin L2 dengan sumber daya yang mereka definisikan.
cloudformation-include.CfnInclude
Konstruksi pada dasarnya menambahkan pembungkus AWS CDK API ke sumber daya apa pun di template Anda AWS CloudFormation . Gunakan kemampuan ini untuk mengimpor AWS CloudFormation templat AWS CDK yang ada ke bagian sekaligus. Dengan melakukan ini, Anda dapat mengelola sumber daya yang ada menggunakan AWS CDK konstruksi untuk memanfaatkan manfaat abstraksi tingkat yang lebih tinggi. Anda juga dapat menggunakan fitur ini untuk menjual AWS CloudFormation template Anda ke AWS CDK pengembang dengan menyediakan API AWS CDK konstruksi.
catatan
AWS CDK v1 juga disertakan aws-cdk-lib.CfnInclude
, yang sebelumnya digunakan untuk tujuan umum yang sama. Namun, ia tidak memiliki banyak fungsi dari. cloudformation-include.CfnInclude
Topik
Impor AWS CloudFormation template
Berikut ini adalah contoh AWS CloudFormation template yang akan kita gunakan untuk memberikan contoh dalam topik ini. Salin dan simpan template my-template.json
untuk diikuti. Setelah mengerjakan contoh-contoh ini, Anda dapat menjelajahi lebih jauh dengan menggunakan salah satu AWS CloudFormation templat yang sudah Anda gunakan. Anda bisa mendapatkannya dari AWS CloudFormation
konsol.
{
"Resources": {
"amzn-s3-demo-bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "amzn-s3-demo-bucket",
}
}
}
}
Anda dapat bekerja dengan template JSON atau YAMG. Kami merekomendasikan JSON jika tersedia karena parser YAMG dapat sedikit berbeda dalam apa yang mereka terima.
Berikut ini adalah contoh cara mengimpor template sampel ke AWS CDK aplikasi Anda menggunakancloudformation-include
. Template diimpor dalam konteks tumpukan CDK.
import * as cdk from 'aws-cdk-lib';
import * as cfninc from 'aws-cdk-lib/cloudformation-include';
import { Construct } from 'constructs';
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const template = new cfninc.CfnInclude(this, 'Template', {
templateFile: 'my-template.json',
});
}
}
Secara default, mengimpor sumber daya mempertahankan ID logis asli sumber daya dari template. Perilaku ini cocok untuk mengimpor AWS CloudFormation templat ke dalam AWS CDK, di mana logika IDs harus dipertahankan. AWS CloudFormation membutuhkan informasi ini untuk mengenali sumber daya yang diimpor ini sebagai sumber daya yang sama dari AWS CloudFormation template.
Jika Anda mengembangkan pembungkus AWS CDK konstruksi untuk template sehingga dapat digunakan oleh AWS CDK pengembang lain, dapatkan sumber daya IDs baru AWS CDK sebagai gantinya. Dengan melakukan ini, konstruksi dapat digunakan beberapa kali dalam tumpukan tanpa konflik nama. Untuk melakukan ini, atur preserveLogicalIds
properti ke false
saat mengimpor template. Berikut adalah contohnya:
const template = new cfninc.CfnInclude(this, 'MyConstruct', {
templateFile: 'my-template.json',
preserveLogicalIds: false
});
Untuk menempatkan sumber daya yang diimpor di bawah kendali AWS CDK aplikasi Anda, tambahkan tumpukan keApp
:
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-stack';
const app = new cdk.App();
new MyStack(app, 'MyStack');
Untuk memverifikasi bahwa tidak akan ada perubahan yang tidak diinginkan pada AWS sumber daya di tumpukan, Anda dapat melakukan diff. Gunakan AWS CDK CLI cdk diff
perintah dan hilangkan metadata AWS CDK-spesifik apa pun. Berikut adalah contohnya:
cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata
Setelah Anda mengimpor AWS CloudFormation template, AWS CDK aplikasi harus menjadi sumber kebenaran untuk sumber daya impor Anda. Untuk membuat perubahan pada sumber daya Anda, modifikasi di AWS CDK aplikasi Anda dan terapkan dengan AWS CDK CLI cdk deployperintah.
Akses sumber daya yang diimpor
Nama template
dalam kode contoh mewakili AWS CloudFormation template yang diimpor. Untuk mengakses sumber daya darinya, gunakan getResource()
metode objek. Untuk mengakses sumber daya yang dikembalikan sebagai jenis sumber daya tertentu, lemparkan hasilnya ke jenis yang diinginkan. Ini tidak diperlukan dalam Python atau. JavaScript Berikut adalah contohnya:
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;
Dari contoh ini, sekarang cfnBucket
merupakan contoh dari aws-s3.CfnBucket
kelas. Ini adalah konstruksi L1 yang mewakili sumber daya yang sesuai AWS CloudFormation . Anda dapat memperlakukannya seperti sumber daya lain dari jenisnya. Misalnya, Anda bisa mendapatkan nilai ARN dengan properti. bucket.attrArn
Untuk membungkus CfnBucket
sumber daya L1 dalam aws-s3.Bucket
instance L2 sebagai gantinya, gunakan metode statis fromBucketArn()
, fromBucketAttributes()
, atau. fromBucketName()
Biasanya, fromBucketName()
metode ini paling nyaman. Berikut adalah contohnya:
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
Konstruksi L2 lainnya memiliki metode serupa untuk membuat konstruksi dari sumber daya yang ada.
Saat Anda membungkus konstruksi L1 dalam konstruksi L2, itu tidak membuat sumber daya baru. Dari contoh kami, kami tidak membuat ember S3; kedua. Sebaliknya, Bucket
instance baru merangkum yang sudah ada. CfnBucket
Dari contoh, sekarang bucket
merupakan konstruksi L2 yang berperilaku seperti Bucket
konstruksi L2 lainnya. Misalnya, Anda dapat memberikan akses tulis AWS Lambda fungsi ke bucket dengan menggunakan grantWrite()
metode praktis bucket. Anda tidak perlu menentukan kebijakan yang diperlukan AWS Identity and Access Management (IAM) secara manual. Berikut adalah contohnya:
bucket.grantWrite(lambdaFunc);
Ganti parameter
Jika AWS CloudFormation template berisi parameter, Anda dapat menggantinya dengan nilai waktu pembuatan saat diimpor menggunakan parameters
properti. Dalam contoh berikut, kita mengganti UploadBucket
parameter dengan ARN dari bucket yang didefinisikan di tempat lain dalam kode kita AWS CDK .
const template = new cfninc.CfnInclude(this, 'Template', {
templateFile: 'my-template.json',
parameters: {
'UploadBucket': bucket.bucketArn,
},
});
Impor elemen template lainnya
Anda dapat mengimpor elemen AWS CloudFormation template apa pun, bukan hanya sumber daya. Elemen yang diimpor menjadi bagian dari AWS CDK
tumpukan. Untuk mengimpor elemen-elemen ini, gunakan metode CfnInclude
objek berikut:
-
getCondition()
— AWS CloudFormation kondisi. -
getHook()
— AWS CloudFormation kait untuk penyebaran biru/hijau. -
getMapping()
— AWS CloudFormation pemetaan. -
getOutput()
— AWS CloudFormation output. -
getParameter()
— AWS CloudFormation parameter. -
getRule()
— AWS CloudFormation aturan untuk AWS Service Catalog template.
Masing-masing metode ini mengembalikan sebuah instance dari kelas yang mewakili jenis tertentu dari AWS CloudFormation elemen. Benda-benda ini bisa berubah. Perubahan yang Anda buat pada mereka akan muncul di template yang dihasilkan dari AWS CDK tumpukan. Berikut ini adalah contoh yang mengimpor parameter dari template dan memodifikasi nilai defaultnya:
const param = template.getParameter('MyParameter');
param.default = "AWS CDK"
Impor tumpukan bersarang
Anda dapat mengimpor tumpukan bersarang dengan menentukan mereka baik ketika Anda mengimpor template utama mereka, atau di beberapa titik kemudian. Template bersarang harus disimpan dalam file lokal, tetapi direferensikan sebagai NestedStack
sumber daya di template utama. Juga, nama sumber daya yang digunakan dalam AWS CDK kode harus cocok dengan nama yang digunakan untuk tumpukan bersarang di template utama.
Mengingat definisi sumber daya ini di template utama, kode berikut menunjukkan cara mengimpor tumpukan bersarang yang direferensikan dengan dua arah.
"NestedStack": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/nested-stack.json"
}
// include nested stack when importing main stack
const mainTemplate = new cfninc.CfnInclude(this, 'MainStack', {
templateFile: 'main-template.json',
loadNestedStacks: {
'NestedStack': {
templateFile: 'nested-template.json',
},
},
});
// or add it some time after importing the main stack
const nestedTemplate = mainTemplate.loadNestedStack('NestedTemplate', {
templateFile: 'nested-template.json',
});
Anda dapat mengimpor beberapa tumpukan bersarang dengan salah satu metode. Saat mengimpor template utama, Anda memberikan pemetaan antara nama sumber daya setiap tumpukan bersarang dan file templatnya. Pemetaan ini dapat berisi sejumlah entri. Untuk melakukannya setelah impor awal, panggil loadNestedStack()
sekali untuk setiap tumpukan bersarang.
Setelah mengimpor tumpukan bersarang, Anda dapat mengaksesnya menggunakan metode template utama. getNestedStack()
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
getNestedStack()
Metode mengembalikan sebuah IncludedNestedStack
instance. Dari contoh ini, Anda dapat mengakses AWS CDK NestedStack
instance melalui stack
properti, seperti yang ditunjukkan pada contoh. Anda juga dapat mengakses objek AWS CloudFormation template asli melaluiincludedTemplate
, dari mana Anda dapat memuat sumber daya dan AWS CloudFormation elemen lainnya.