Sumber daya dan AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 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.

Sumber daya dan AWS CDK

Sumber daya adalah apa yang Anda konfigurasikan untuk digunakan Layanan AWS dalam aplikasi Anda. Sumber daya adalah fitur dari AWS CloudFormation. Dengan mengonfigurasi sumber daya dan propertinya dalam AWS CloudFormation templat, Anda dapat menerapkan AWS CloudFormation untuk menyediakan sumber daya Anda. Dengan AWS Cloud Development Kit (AWS CDK), Anda dapat mengonfigurasi sumber daya melalui konstruksi. Anda kemudian menerapkan CDK aplikasi Anda, yang melibatkan sintesis AWS CloudFormation template dan penerapan AWS CloudFormation untuk menyediakan sumber daya Anda.

Mengkonfigurasi sumber daya menggunakan konstruksi

Seperti dijelaskan dalamAWS CDK Membangun, AWS CDK menyediakan perpustakaan kelas kaya konstruksi, yang disebut AWS konstruksi, yang mewakili semua AWS sumber daya.

Untuk membuat instance sumber daya menggunakan konstruksi yang sesuai, teruskan lingkup sebagai argumen pertama, ID logis konstruksi, dan satu set properti konfigurasi (props). Misalnya, berikut cara membuat antrian Amazon dengan AWS KMS enkripsi menggunakan konstruksi SQS SQS.queue dari Construct Library. AWS

TypeScript
import * as sqs from '@aws-cdk/aws-sqs'; new sqs.Queue(this, 'MyQueue', { encryption: sqs.QueueEncryption.KMS_MANAGED });
JavaScript
const sqs = require('@aws-cdk/aws-sqs'); new sqs.Queue(this, 'MyQueue', { encryption: sqs.QueueEncryption.KMS_MANAGED });
Python
import aws_cdk.aws_sqs as sqs sqs.Queue(self, "MyQueue", encryption=sqs.QueueEncryption.KMS_MANAGED)
Java
import software.amazon.awscdk.services.sqs.*; Queue.Builder.create(this, "MyQueue").encryption( QueueEncryption.KMS_MANAGED).build();
C#
using Amazon.CDK.AWS.SQS; new Queue(this, "MyQueue", new QueueProps { Encryption = QueueEncryption.KMS_MANAGED });
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" sqs "github.com/aws/aws-cdk-go/awscdk/v2/awssqs" ) sqs.NewQueue(stack, jsii.String("MyQueue"), &sqs.QueueProps{ Encryption: sqs.QueueEncryption_KMS_MANAGED, })

Beberapa alat peraga konfigurasi bersifat opsional, dan dalam banyak kasus memiliki nilai default. Dalam beberapa kasus, semua alat peraga bersifat opsional, dan argumen terakhir dapat dihilangkan seluruhnya.

Atribut sumber daya

Sebagian besar sumber daya dalam AWS Construct Library mengekspos atribut, yang diselesaikan pada waktu penerapan oleh. AWS CloudFormation Atribut diekspos dalam bentuk properti pada kelas sumber daya dengan nama tipe sebagai awalan. Contoh berikut menunjukkan cara mendapatkan SQS antrian Amazon menggunakan properti queueUrl (Pythonqueue_url:). URL

TypeScript
import * as sqs from '@aws-cdk/aws-sqs'; const queue = new sqs.Queue(this, 'MyQueue'); const url = queue.queueUrl; // => A string representing a deploy-time value
JavaScript
const sqs = require('@aws-cdk/aws-sqs'); const queue = new sqs.Queue(this, 'MyQueue'); const url = queue.queueUrl; // => A string representing a deploy-time value
Python
import aws_cdk.aws_sqs as sqs queue = sqs.Queue(self, "MyQueue") url = queue.queue_url # => A string representing a deploy-time value
Java
Queue queue = new Queue(this, "MyQueue"); String url = queue.getQueueUrl(); // => A string representing a deploy-time value
C#
var queue = new Queue(this, "MyQueue"); var url = queue.QueueUrl; // => A string representing a deploy-time value
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" sqs "github.com/aws/aws-cdk-go/awscdk/v2/awssqs" ) queue := sqs.NewQueue(stack, jsii.String("MyQueue"), &sqs.QueueProps{}) url := queue.QueueUrl() // => A string representing a deploy-time value

Lihat Token dan AWS CDK untuk informasi tentang cara AWS CDK mengkodekan atribut deploy-time sebagai string.

Referensi sumber daya

Saat mengonfigurasi sumber daya, Anda sering harus mereferensikan properti dari sumber daya lain. Berikut ini adalah beberapa contohnya:

  • Sumber daya Amazon Elastic Container Service (AmazonECS) memerlukan referensi ke cluster tempat ia berjalan.

  • CloudFront Distribusi Amazon memerlukan referensi ke bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) yang berisi kode sumber.

Anda dapat mereferensikan sumber daya dengan salah satu cara berikut:

  • Dengan meneruskan sumber daya yang ditentukan di CDK aplikasi Anda, baik di tumpukan yang sama atau di tumpukan yang berbeda

  • Dengan meneruskan objek proxy yang mereferensikan sumber daya yang ditentukan di AWS akun Anda, dibuat dari pengenal unik sumber daya (seperti) ARN

Jika properti konstruksi mewakili konstruksi untuk sumber daya lain, tipenya adalah tipe antarmuka konstruksi. Misalnya, ECS konstruksi Amazon mengambil properti cluster tipeecs.ICluster. Contoh lain, adalah konstruksi CloudFront distribusi yang mengambil properti sourceBucket (Pythonsource_bucket:) tipe. s3.IBucket

Anda dapat langsung meneruskan objek sumber daya apa pun dari jenis yang tepat yang ditentukan dalam AWS CDK aplikasi yang sama. Contoh berikut mendefinisikan ECS cluster Amazon dan kemudian menggunakannya untuk menentukan ECS layanan Amazon.

TypeScript
const cluster = new ecs.Cluster(this, 'Cluster', { /*...*/ }); const service = new ecs.Ec2Service(this, 'Service', { cluster: cluster });
JavaScript
const cluster = new ecs.Cluster(this, 'Cluster', { /*...*/ }); const service = new ecs.Ec2Service(this, 'Service', { cluster: cluster });
Python
cluster = ecs.Cluster(self, "Cluster") service = ecs.Ec2Service(self, "Service", cluster=cluster)
Java
Cluster cluster = new Cluster(this, "Cluster"); Ec2Service service = new Ec2Service(this, "Service", new Ec2ServiceProps.Builder().cluster(cluster).build());
C#
var cluster = new Cluster(this, "Cluster"); var service = new Ec2Service(this, "Service", new Ec2ServiceProps { Cluster = cluster });
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" ecs "github.com/aws/aws-cdk-go/awscdk/v2/awsecs" ) cluster := ecs.NewCluster(stack, jsii.String("MyCluster"), &ecs.ClusterProps{}) service := ecs.NewEc2Service(stack, jsii.String("MyService"), &ecs.Ec2ServiceProps{ Cluster: cluster, })

Mereferensikan sumber daya dalam tumpukan yang berbeda

Anda dapat merujuk ke sumber daya di tumpukan yang berbeda selama mereka didefinisikan dalam aplikasi yang sama dan berada di AWS lingkungan yang sama. Pola berikut ini umumnya digunakan:

  • Menyimpan referensi ke konstruksi sebagai atribut tumpukan yang menghasilkan sumber daya. (Untuk mendapatkan referensi ke tumpukan konstruksi saat ini, gunakanStack.of(this).)

  • Teruskan referensi ini ke konstruktor tumpukan yang mengkonsumsi sumber daya sebagai parameter atau properti. Tumpukan konsumsi kemudian meneruskannya sebagai properti ke konstruksi apa pun yang membutuhkannya.

Contoh berikut mendefinisikan tumpukanstack1. Tumpukan ini mendefinisikan bucket Amazon S3 dan menyimpan referensi ke konstruksi bucket sebagai atribut tumpukan. Kemudian aplikasi mendefinisikan tumpukan keduastack2, yang menerima bucket saat instantiation. stack2mungkin, misalnya, mendefinisikan AWS Glue Tabel yang menggunakan bucket untuk penyimpanan data.

TypeScript
const prod = { account: '123456789012', region: 'us-east-1' }; const stack1 = new StackThatProvidesABucket(app, 'Stack1', { env: prod }); // stack2 will take a property { bucket: IBucket } const stack2 = new StackThatExpectsABucket(app, 'Stack2', { bucket: stack1.bucket, env: prod });
JavaScript
const prod = { account: '123456789012', region: 'us-east-1' }; const stack1 = new StackThatProvidesABucket(app, 'Stack1', { env: prod }); // stack2 will take a property { bucket: IBucket } const stack2 = new StackThatExpectsABucket(app, 'Stack2', { bucket: stack1.bucket, env: prod });
Python
prod = core.Environment(account="123456789012", region="us-east-1") stack1 = StackThatProvidesABucket(app, "Stack1", env=prod) # stack2 will take a property "bucket" stack2 = StackThatExpectsABucket(app, "Stack2", bucket=stack1.bucket, env=prod)
Java
// Helper method to build an environment static Environment makeEnv(String account, String region) { return Environment.builder().account(account).region(region) .build(); } App app = new App(); Environment prod = makeEnv("123456789012", "us-east-1"); StackThatProvidesABucket stack1 = new StackThatProvidesABucket(app, "Stack1", StackProps.builder().env(prod).build()); // stack2 will take an argument "bucket" StackThatExpectsABucket stack2 = new StackThatExpectsABucket(app, "Stack,", StackProps.builder().env(prod).build(), stack1.bucket);
C#
Amazon.CDK.Environment makeEnv(string account, string region) { return new Amazon.CDK.Environment { Account = account, Region = region }; } var prod = makeEnv(account: "123456789012", region: "us-east-1"); var stack1 = new StackThatProvidesABucket(app, "Stack1", new StackProps { Env = prod }); // stack2 will take a property "bucket" var stack2 = new StackThatExpectsABucket(app, "Stack2", new StackProps { Env = prod, bucket = stack1.Bucket});

Jika AWS CDK menentukan bahwa sumber daya berada di lingkungan yang sama, tetapi dalam tumpukan yang berbeda, secara otomatis mensintesis AWS CloudFormation ekspor di tumpukan penghasil dan Fn:: ImportValue di tumpukan konsumsi untuk mentransfer informasi itu dari satu tumpukan ke tumpukan lainnya.

Menyelesaikan kebuntuan ketergantungan

Mereferensikan sumber daya dari satu tumpukan di tumpukan yang berbeda menciptakan ketergantungan antara dua tumpukan. Ini memastikan bahwa mereka dikerahkan dalam urutan yang benar. Setelah tumpukan digunakan, ketergantungan ini konkret. Setelah itu, menghapus penggunaan sumber daya bersama dari tumpukan konsumsi dapat menyebabkan kegagalan penerapan yang tidak terduga. Ini terjadi jika ada ketergantungan lain antara dua tumpukan yang memaksa mereka untuk digunakan dalam urutan yang sama. Ini juga dapat terjadi tanpa ketergantungan jika tumpukan penghasil hanya dipilih oleh CDK Toolkit untuk digunakan terlebih dahulu. AWS CloudFormation Ekspor dihapus dari tumpukan penghasil karena tidak lagi diperlukan, tetapi sumber daya yang diekspor masih digunakan di tumpukan konsumsi karena pembaruannya belum diterapkan. Oleh karena itu, penerapan tumpukan produsen gagal.

Untuk memecahkan kebuntuan ini, hapus penggunaan sumber daya bersama dari tumpukan konsumsi. (Ini menghapus ekspor otomatis dari tumpukan produksi.) Selanjutnya, tambahkan ekspor yang sama secara manual ke tumpukan penghasil menggunakan ID logis yang sama persis dengan ekspor yang dihasilkan secara otomatis. Hapus penggunaan sumber daya bersama di tumpukan konsumsi dan terapkan kedua tumpukan. Kemudian, hapus ekspor manual (dan sumber daya bersama jika tidak lagi diperlukan) dan gunakan kedua tumpukan lagi. exportValue()Metode tumpukan adalah cara mudah untuk membuat ekspor manual untuk tujuan ini. (Lihat contoh dalam referensi metode tertaut.)

Mereferensikan sumber daya di akun Anda AWS

Misalkan Anda ingin menggunakan sumber daya yang sudah tersedia di AWS akun Anda di AWS CDK aplikasi Anda. Ini mungkin sumber daya yang didefinisikan melalui konsol,, langsung dengan AWS CloudFormation, atau dalam AWS CDK aplikasi yang berbeda. AWS SDK Anda dapat mengubah sumber daya ARN (atau atribut pengenal lainnya, atau grup atribut) menjadi objek proxy. Objek proxy berfungsi sebagai referensi ke sumber daya dengan memanggil metode pabrik statis pada kelas sumber daya.

Saat Anda membuat proxy seperti itu, sumber daya eksternal tidak menjadi bagian dari AWS CDK aplikasi Anda. Oleh karena itu, perubahan yang Anda buat pada proxy di AWS CDK aplikasi Anda tidak memengaruhi sumber daya yang diterapkan. Proxy dapat, bagaimanapun, diteruskan ke AWS CDK metode apa pun yang membutuhkan sumber daya jenis itu.

Contoh berikut menunjukkan cara mereferensikan bucket berdasarkan bucket yang ada dengan ARN arn:aws:s3: ::amzn-s3-demo-bucket1, dan Amazon Virtual Private Cloud berdasarkan ID tertentu yang sudah ada. VPC

TypeScript
// Construct a proxy for a bucket by its name (must be same account) s3.Bucket.fromBucketName(this, 'amzn-s3-demo-bucket', 'amzn-s3-demo-bucket1'); // Construct a proxy for a bucket by its full ARN (can be another account) s3.Bucket.fromBucketArn(this, 'amzn-s3-demo-bucket', 'arn:aws:s3:::amzn-s3-demo-bucket1'); // Construct a proxy for an existing VPC from its attribute(s) ec2.Vpc.fromVpcAttributes(this, 'MyVpc', { vpcId: 'vpc-1234567890abcde', });
JavaScript
// Construct a proxy for a bucket by its name (must be same account) s3.Bucket.fromBucketName(this, 'amzn-s3-demo-bucket', 'amzn-s3-demo-bucket1'); // Construct a proxy for a bucket by its full ARN (can be another account) s3.Bucket.fromBucketArn(this, 'amzn-s3-demo-bucket', 'arn:aws:s3:::amzn-s3-demo-bucket1'); // Construct a proxy for an existing VPC from its attribute(s) ec2.Vpc.fromVpcAttributes(this, 'MyVpc', { vpcId: 'vpc-1234567890abcde' });
Python
# Construct a proxy for a bucket by its name (must be same account) s3.Bucket.from_bucket_name(self, "amzn-s3-demo-bucket", "amzn-s3-demo-bucket1") # Construct a proxy for a bucket by its full ARN (can be another account) s3.Bucket.from_bucket_arn(self, "amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket1") # Construct a proxy for an existing VPC from its attribute(s) ec2.Vpc.from_vpc_attributes(self, "MyVpc", vpc_id="vpc-1234567890abcdef")
Java
// Construct a proxy for a bucket by its name (must be same account) Bucket.fromBucketName(this, "amzn-s3-demo-bucket", "amzn-s3-demo-bucket1"); // Construct a proxy for a bucket by its full ARN (can be another account) Bucket.fromBucketArn(this, "amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket1"); // Construct a proxy for an existing VPC from its attribute(s) Vpc.fromVpcAttributes(this, "MyVpc", VpcAttributes.builder() .vpcId("vpc-1234567890abcdef").build());
C#
// Construct a proxy for a bucket by its name (must be same account) Bucket.FromBucketName(this, "amzn-s3-demo-bucket", "amzn-s3-demo-bucket1"); // Construct a proxy for a bucket by its full ARN (can be another account) Bucket.FromBucketArn(this, "amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket1"); // Construct a proxy for an existing VPC from its attribute(s) Vpc.FromVpcAttributes(this, "MyVpc", new VpcAttributes { VpcId = "vpc-1234567890abcdef" });
Go
// Define a proxy for a bucket by its name (must be same account) s3.Bucket_FromBucketName(stack, jsii.String("amzn-s3-demo-bucket"), jsii.String("amzn-s3-demo-bucket1")) // Define a proxy for a bucket by its full ARN (can be another account) s3.Bucket_FromBucketArn(stack, jsii.String("amzn-s3-demo-bucket"), jsii.String("arn:aws:s3:::amzn-s3-demo-bucket1")) // Define a proxy for an existing VPC from its attributes ec2.Vpc_FromVpcAttributes(stack, jsii.String("MyVpc"), &ec2.VpcAttributes{ VpcId: jsii.String("vpc-1234567890abcde"), })

Mari kita lihat lebih dekat Vpc.fromLookup()metodenya. Karena ec2.Vpc konstruksinya rumit, ada banyak cara Anda mungkin ingin memilih yang VPC akan digunakan dengan CDK aplikasi Anda. Untuk mengatasi hal ini, VPC konstruksi memiliki metode fromLookup statis (Pythonfrom_lookup:) yang memungkinkan Anda mencari VPC Amazon yang diinginkan dengan menanyakan akun AWS Anda pada waktu sintesis.

Untuk menggunakannyaVpc.fromLookup(), sistem yang mensintesis tumpukan harus memiliki akses ke akun yang memiliki Amazon. VPC Ini karena CDK Toolkit menanyakan akun untuk menemukan Amazon yang tepat VPC pada waktu sintesis.

Selanjutnya, hanya Vpc.fromLookup() berfungsi di tumpukan yang didefinisikan dengan akun dan wilayah eksplisit (lihatLingkungan untuk AWS CDK). Jika AWS CDK mencoba mencari Amazon VPC dari tumpukan agnostik lingkungan, CDK Toolkit tidak tahu lingkungan mana yang harus ditanyakan untuk menemukan. VPC

Anda harus memberikan Vpc.fromLookup() atribut yang cukup untuk mengidentifikasi secara unik a VPC di akun Anda AWS . Misalnya, hanya ada satu defaultVPC, jadi cukup untuk menentukan VPC sebagai default.

TypeScript
ec2.Vpc.fromLookup(this, 'DefaultVpc', { isDefault: true });
JavaScript
ec2.Vpc.fromLookup(this, 'DefaultVpc', { isDefault: true });
Python
ec2.Vpc.from_lookup(self, "DefaultVpc", is_default=True)
Java
Vpc.fromLookup(this, "DefaultVpc", VpcLookupOptions.builder() .isDefault(true).build());
C#
Vpc.FromLookup(this, id = "DefaultVpc", new VpcLookupOptions { IsDefault = true });
Go
ec2.Vpc_FromLookup(this, jsii.String("DefaultVpc"), &ec2.VpcLookupOptions{ IsDefault: jsii.Bool(true), })

Anda juga dapat menggunakan tags properti untuk kueri VPCs berdasarkan tag. Anda dapat menambahkan tag ke Amazon VPC pada saat pembuatannya dengan menggunakan AWS CloudFormation atau AWS CDK. Anda dapat mengedit tag kapan saja setelah pembuatan dengan menggunakan AWS Management Console, AWS CLI, atau file AWS SDK. Selain tag apa pun yang Anda tambahkan sendiri, secara AWS CDK otomatis menambahkan tag berikut ke semua yang VPCs dibuatnya.

  • Nama - NamaVPC.

  • aws-cdk:subnet-name — Nama subnet.

  • aws-cdk:subnet-type — Jenis subnet: Publik, Pribadi, atau Terisolasi.

TypeScript
ec2.Vpc.fromLookup(this, 'PublicVpc', {tags: {'aws-cdk:subnet-type': "Public"}});
JavaScript
ec2.Vpc.fromLookup(this, 'PublicVpc', {tags: {'aws-cdk:subnet-type': "Public"}});
Python
ec2.Vpc.from_lookup(self, "PublicVpc", tags={"aws-cdk:subnet-type": "Public"})
Java
Vpc.fromLookup(this, "PublicVpc", VpcLookupOptions.builder() .tags(java.util.Map.of("aws-cdk:subnet-type", "Public")) // Java 9 or later .build());
C#
Vpc.FromLookup(this, id = "PublicVpc", new VpcLookupOptions { Tags = new Dictionary<string, string> { ["aws-cdk:subnet-type"] = "Public" });
Go
ec2.Vpc_FromLookup(this, jsii.String("DefaultVpc"), &ec2.VpcLookupOptions{ Tags: &map[string]*string{"aws-cdk:subnet-type": jsii.String("Public")}, })

Hasil Vpc.fromLookup() cache dalam cdk.context.json file proyek. (Lihat Nilai konteks dan AWS CDK). Komit file ini ke kontrol versi sehingga aplikasi Anda akan terus merujuk ke Amazon yang samaVPC. Ini berfungsi bahkan jika Anda kemudian mengubah atribut Anda dengan VPCs cara yang akan menghasilkan pemilihan VPC yang berbeda. Ini sangat penting jika Anda menerapkan tumpukan di lingkungan yang tidak memiliki akses ke AWS akun yang mendefinisikanVPC, seperti CDK Pipelines.

Meskipun Anda dapat menggunakan sumber daya eksternal di mana pun Anda menggunakan sumber daya serupa yang ditentukan dalam AWS CDK aplikasi, Anda tidak dapat memodifikasinya. Misalnya, memanggil addToResourcePolicy (Python:add_to_resource_policy) pada eksternal s3.Bucket tidak melakukan apa-apa.

Nama fisik sumber daya

Nama logis sumber daya AWS CloudFormation berbeda dari nama sumber daya yang ditampilkan AWS Management Console setelah digunakan oleh AWS CloudFormation. AWS CDK Disebut nama-nama akhir ini nama-nama fisik.

Misalnya, AWS CloudFormation mungkin membuat bucket Amazon S3 dengan ID logis Stack2amzn-s3-demo-bucket4DD88B4F dari contoh sebelumnya dengan nama fisik. stack2amzn-s3-demo-bucket4dd88b4f-iuv1rbv9z3to

Anda dapat menentukan nama fisik saat membuat konstruksi yang mewakili sumber daya dengan menggunakan properti <resourceType>Nama. Contoh berikut membuat bucket Amazon S3 dengan nama fisik. amzn-s3-demo-bucket

TypeScript
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', { bucketName: 'amzn-s3-demo-bucket', });
JavaScript
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', { bucketName: 'amzn-s3-demo-bucket' });
Python
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", bucket_name="amzn-s3-demo-bucket")
Java
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket") .bucketName("amzn-s3-demo-bucket").build();
C#
var bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps { BucketName = "amzn-s3-demo-bucket" });
Go
bucket := s3.NewBucket(this, jsii.String("amzn-s3-demo-bucket"), &s3.BucketProps{ BucketName: jsii.String("amzn-s3-demo-bucket"), })

Menetapkan nama fisik ke sumber daya memiliki beberapa kelemahan. AWS CloudFormation Yang paling penting, setiap perubahan pada sumber daya yang digunakan yang memerlukan penggantian sumber daya, seperti perubahan pada properti sumber daya yang tidak dapat diubah setelah pembuatan, akan gagal jika sumber daya memiliki nama fisik yang ditetapkan. Jika Anda berakhir dalam keadaan itu, satu-satunya solusi adalah menghapus AWS CloudFormation tumpukan, lalu menerapkan AWS CDK aplikasi lagi. Lihat AWS CloudFormation dokumentasi untuk detailnya.

Dalam beberapa kasus, seperti saat membuat AWS CDK aplikasi dengan referensi lintas lingkungan, nama fisik diperlukan AWS CDK agar berfungsi dengan benar. Dalam kasus tersebut, jika Anda tidak ingin repot-repot membuat nama fisik sendiri, Anda dapat membiarkan AWS CDK nama itu untuk Anda. Untuk melakukannya, gunakan nilai khususPhysicalName.GENERATE_IF_NEEDED, sebagai berikut.

TypeScript
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', { bucketName: core.PhysicalName.GENERATE_IF_NEEDED, });
JavaScript
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', { bucketName: core.PhysicalName.GENERATE_IF_NEEDED });
Python
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", bucket_name=core.PhysicalName.GENERATE_IF_NEEDED)
Java
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket") .bucketName(PhysicalName.GENERATE_IF_NEEDED).build();
C#
var bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps { BucketName = PhysicalName.GENERATE_IF_NEEDED });
Go
bucket := s3.NewBucket(this, jsii.String("amzn-s3-demo-bucket"), &s3.BucketProps{ BucketName: awscdk.PhysicalName_GENERATE_IF_NEEDED(), })

Melewati pengidentifikasi sumber daya unik

Bila memungkinkan, Anda harus melewatkan sumber daya dengan referensi, seperti yang dijelaskan di bagian sebelumnya. Namun, ada kasus di mana Anda tidak punya pilihan lain selain merujuk ke sumber daya dengan salah satu atributnya. Contoh kasus penggunaan meliputi yang berikut:

  • Saat Anda menggunakan AWS CloudFormation sumber daya tingkat rendah.

  • Saat Anda perlu mengekspos sumber daya ke komponen runtime AWS CDK aplikasi, seperti saat merujuk ke fungsi Lambda melalui variabel lingkungan.

Pengidentifikasi ini tersedia sebagai atribut pada sumber daya, seperti berikut ini.

TypeScript
bucket.bucketName lambdaFunc.functionArn securityGroup.groupArn
JavaScript
bucket.bucketName lambdaFunc.functionArn securityGroup.groupArn
Python
bucket.bucket_name lambda_func.function_arn security_group_arn
Java

AWS CDK Pengikatan Java menggunakan metode pengambil untuk atribut.

bucket.getBucketName() lambdaFunc.getFunctionArn() securityGroup.getGroupArn()
C#
bucket.BucketName lambdaFunc.FunctionArn securityGroup.GroupArn
Go
bucket.BucketName() fn.FunctionArn()

Contoh berikut menunjukkan cara meneruskan nama bucket yang dihasilkan ke suatu AWS Lambda fungsi.

TypeScript
const bucket = new s3.Bucket(this, 'Bucket'); new lambda.Function(this, 'MyLambda', { // ... environment: { BUCKET_NAME: bucket.bucketName, }, });
JavaScript
const bucket = new s3.Bucket(this, 'Bucket'); new lambda.Function(this, 'MyLambda', { // ... environment: { BUCKET_NAME: bucket.bucketName } });
Python
bucket = s3.Bucket(self, "Bucket") lambda.Function(self, "MyLambda", environment=dict(BUCKET_NAME=bucket.bucket_name))
Java
final Bucket bucket = new Bucket(this, "Bucket"); Function.Builder.create(this, "MyLambda") .environment(java.util.Map.of( // Java 9 or later "BUCKET_NAME", bucket.getBucketName())) .build();
C#
var bucket = new Bucket(this, "Bucket"); new Function(this, "MyLambda", new FunctionProps { Environment = new Dictionary<string, string> { ["BUCKET_NAME"] = bucket.BucketName } });
Go
bucket := s3.NewBucket(this, jsii.String("Bucket"), &s3.BucketProps{}) lambda.NewFunction(this, jsii.String("MyLambda"), &lambda.FunctionProps{ Environment: &map[string]*string{"BUCKET_NAME": bucket.BucketName()}, })

Memberikan izin antar sumber daya

Konstruksi tingkat yang lebih tinggi membuat izin hak istimewa paling sedikit dapat dicapai dengan menawarkan persyaratan izin yang sederhana dan berbasis niat untuk menyatakan. APIs Misalnya, banyak konstruksi L2 menawarkan metode hibah yang dapat Anda gunakan untuk memberikan izin entitas (seperti IAM peran atau pengguna) untuk bekerja dengan sumber daya, tanpa harus membuat pernyataan IAM izin secara manual.

Contoh berikut membuat izin untuk mengizinkan peran eksekusi fungsi Lambda membaca dan menulis objek ke bucket Amazon S3 tertentu. Jika bucket Amazon S3 dienkripsi dengan AWS KMS kunci, metode ini juga memberikan izin ke peran eksekusi fungsi Lambda untuk mendekripsi dengan kunci.

TypeScript
if (bucket.grantReadWrite(func).success) { // ... }
JavaScript
if ( bucket.grantReadWrite(func).success) { // ... }
Python
if bucket.grant_read_write(func).success: # ...
Java
if (bucket.grantReadWrite(func).getSuccess()) { // ... }
C#
if (bucket.GrantReadWrite(func).Success) { // ... }
Go
if *bucket.GrantReadWrite(function, nil).Success() { // ... }

Metode hibah mengembalikan iam.Grant objek. Gunakan success atribut Grant objek untuk menentukan apakah hibah diterapkan secara efektif (misalnya, mungkin tidak diterapkan pada sumber daya eksternal). Anda juga dapat menggunakan metode assertSuccess (Python:assert_success) Grant objek untuk menegakkan bahwa hibah berhasil diterapkan.

Jika metode hibah tertentu tidak tersedia untuk kasus penggunaan tertentu, Anda dapat menggunakan metode hibah generik untuk menentukan hibah baru dengan daftar tindakan tertentu.

Contoh berikut menunjukkan cara memberikan akses fungsi Lambda ke tindakan Amazon DynamoDB. CreateBackup

TypeScript
table.grant(func, 'dynamodb:CreateBackup');
JavaScript
table.grant(func, 'dynamodb:CreateBackup');
Python
table.grant(func, "dynamodb:CreateBackup")
Java
table.grant(func, "dynamodb:CreateBackup");
C#
table.Grant(func, "dynamodb:CreateBackup");
Go
table := dynamodb.NewTable(this, jsii.String("MyTable"), &dynamodb.TableProps{}) table.Grant(function, jsii.String("dynamodb:CreateBackup"))

Banyak sumber daya, seperti fungsi Lambda, memerlukan peran yang harus diasumsikan saat mengeksekusi kode. Properti konfigurasi memungkinkan Anda untuk menentukaniam.IRole. Jika tidak ada peran yang ditentukan, fungsi secara otomatis membuat peran khusus untuk penggunaan ini. Anda kemudian dapat menggunakan metode hibah pada sumber daya untuk menambahkan pernyataan ke peran.

Metode hibah dibangun menggunakan tingkat yang lebih rendah APIs untuk menangani IAM kebijakan. Kebijakan dimodelkan sebagai PolicyDocumentobjek. Tambahkan pernyataan langsung ke peran (atau peran terlampir konstruksi) menggunakan addToRolePolicy metode (Pythonadd_to_role_policy:), atau ke kebijakan sumber daya (seperti Bucket kebijakan) menggunakan metode addToResourcePolicy (add_to_resource_policyPython:).

Metrik sumber daya dan alarm

Banyak sumber daya memancarkan CloudWatch metrik yang dapat digunakan untuk mengatur dasbor pemantauan dan alarm. Konstruksi tingkat yang lebih tinggi memiliki metode metrik yang memungkinkan Anda mengakses metrik tanpa mencari nama yang benar untuk digunakan.

Contoh berikut menunjukkan cara menentukan alarm ketika SQS antrian Amazon melebihi 100. ApproximateNumberOfMessagesNotVisible

TypeScript
import * as cw from '@aws-cdk/aws-cloudwatch'; import * as sqs from '@aws-cdk/aws-sqs'; import { Duration } from '@aws-cdk/core'; const queue = new sqs.Queue(this, 'MyQueue'); const metric = queue.metricApproximateNumberOfMessagesNotVisible({ label: 'Messages Visible (Approx)', period: Duration.minutes(5), // ... }); metric.createAlarm(this, 'TooManyMessagesAlarm', { comparisonOperator: cw.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold: 100, // ... });
JavaScript
const cw = require('@aws-cdk/aws-cloudwatch'); const sqs = require('@aws-cdk/aws-sqs'); const { Duration } = require('@aws-cdk/core'); const queue = new sqs.Queue(this, 'MyQueue'); const metric = queue.metricApproximateNumberOfMessagesNotVisible({ label: 'Messages Visible (Approx)', period: Duration.minutes(5) // ... }); metric.createAlarm(this, 'TooManyMessagesAlarm', { comparisonOperator: cw.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold: 100 // ... });
Python
import aws_cdk.aws_cloudwatch as cw import aws_cdk.aws_sqs as sqs from aws_cdk.core import Duration queue = sqs.Queue(self, "MyQueue") metric = queue.metric_approximate_number_of_messages_not_visible( label="Messages Visible (Approx)", period=Duration.minutes(5), # ... ) metric.create_alarm(self, "TooManyMessagesAlarm", comparison_operator=cw.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold=100, # ... )
Java
import software.amazon.awscdk.core.Duration; import software.amazon.awscdk.services.sqs.Queue; import software.amazon.awscdk.services.cloudwatch.Metric; import software.amazon.awscdk.services.cloudwatch.MetricOptions; import software.amazon.awscdk.services.cloudwatch.CreateAlarmOptions; import software.amazon.awscdk.services.cloudwatch.ComparisonOperator; Queue queue = new Queue(this, "MyQueue"); Metric metric = queue .metricApproximateNumberOfMessagesNotVisible(MetricOptions.builder() .label("Messages Visible (Approx)") .period(Duration.minutes(5)).build()); metric.createAlarm(this, "TooManyMessagesAlarm", CreateAlarmOptions.builder() .comparisonOperator(ComparisonOperator.GREATER_THAN_THRESHOLD) .threshold(100) // ... .build());
C#
using cdk = Amazon.CDK; using cw = Amazon.CDK.AWS.CloudWatch; using sqs = Amazon.CDK.AWS.SQS; var queue = new sqs.Queue(this, "MyQueue"); var metric = queue.MetricApproximateNumberOfMessagesNotVisible(new cw.MetricOptions { Label = "Messages Visible (Approx)", Period = cdk.Duration.Minutes(5), // ... }); metric.CreateAlarm(this, "TooManyMessagesAlarm", new cw.CreateAlarmOptions { ComparisonOperator = cw.ComparisonOperator.GREATER_THAN_THRESHOLD, Threshold = 100, // .. });
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" cw "github.com/aws/aws-cdk-go/awscdk/v2/awscloudwatch" sqs "github.com/aws/aws-cdk-go/awscdk/v2/awssqs" ) queue := sqs.NewQueue(this, jsii.String("MyQueue"), &sqs.QueueProps{}) metric := queue.MetricApproximateNumberOfMessagesNotVisible(&cw.MetricOptions{ Label: jsii.String("Messages Visible (Approx)"), Period: awscdk.Duration_Minutes(jsii.Number(5)), }) metric.CreateAlarm(this, jsii.String("TooManyMessagesAlarm"), &cw.CreateAlarmOptions{ ComparisonOperator: cw.ComparisonOperator_GREATER_THAN_THRESHOLD, Threshold: jsii.Number(100), })

Jika tidak ada metode untuk metrik tertentu, Anda dapat menggunakan metode metrik umum untuk menentukan nama metrik secara manual.

Metrik juga dapat ditambahkan ke CloudWatch dasbor. Lihat CloudWatch.

Lalu lintas jaringan

Dalam banyak kasus, Anda harus mengaktifkan izin pada jaringan agar aplikasi berfungsi, seperti ketika infrastruktur komputasi perlu mengakses lapisan persistensi. Sumber daya yang membangun atau mendengarkan koneksi mengekspos metode yang memungkinkan arus lalu lintas, termasuk pengaturan aturan grup keamanan atau jaringanACLs.

IConnectablesumber daya memiliki connections properti yang merupakan gateway ke konfigurasi aturan lalu lintas jaringan.

Anda mengaktifkan data mengalir pada jalur jaringan tertentu dengan menggunakan allow metode. Contoh berikut memungkinkan HTTPS koneksi ke web dan koneksi masuk dari grup Amazon EC2 Auto fleet2 Scaling.

TypeScript
import * as asg from '@aws-cdk/aws-autoscaling'; import * as ec2 from '@aws-cdk/aws-ec2'; const fleet1: asg.AutoScalingGroup = asg.AutoScalingGroup(/*...*/); // Allow surfing the (secure) web fleet1.connections.allowTo(new ec2.Peer.anyIpv4(), new ec2.Port({ fromPort: 443, toPort: 443 })); const fleet2: asg.AutoScalingGroup = asg.AutoScalingGroup(/*...*/); fleet1.connections.allowFrom(fleet2, ec2.Port.AllTraffic());
JavaScript
const asg = require('@aws-cdk/aws-autoscaling'); const ec2 = require('@aws-cdk/aws-ec2'); const fleet1 = asg.AutoScalingGroup(); // Allow surfing the (secure) web fleet1.connections.allowTo(new ec2.Peer.anyIpv4(), new ec2.Port({ fromPort: 443, toPort: 443 })); const fleet2 = asg.AutoScalingGroup(); fleet1.connections.allowFrom(fleet2, ec2.Port.AllTraffic());
Python
import aws_cdk.aws_autoscaling as asg import aws_cdk.aws_ec2 as ec2 fleet1 = asg.AutoScalingGroup( ... ) # Allow surfing the (secure) web fleet1.connections.allow_to(ec2.Peer.any_ipv4(), ec2.Port(PortProps(from_port=443, to_port=443))) fleet2 = asg.AutoScalingGroup( ... ) fleet1.connections.allow_from(fleet2, ec2.Port.all_traffic())
Java
import software.amazon.awscdk.services.autoscaling.AutoScalingGroup; import software.amazon.awscdk.services.ec2.Peer; import software.amazon.awscdk.services.ec2.Port; AutoScalingGroup fleet1 = AutoScalingGroup.Builder.create(this, "MyFleet") /* ... */.build(); // Allow surfing the (secure) Web fleet1.getConnections().allowTo(Peer.anyIpv4(), Port.Builder.create().fromPort(443).toPort(443).build()); AutoScalingGroup fleet2 = AutoScalingGroup.Builder.create(this, "MyFleet2") /* ... */.build(); fleet1.getConnections().allowFrom(fleet2, Port.allTraffic());
C#
using cdk = Amazon.CDK; using asg = Amazon.CDK.AWS.AutoScaling; using ec2 = Amazon.CDK.AWS.EC2; // Allow surfing the (secure) Web var fleet1 = new asg.AutoScalingGroup(this, "MyFleet", new asg.AutoScalingGroupProps { /* ... */ }); fleet1.Connections.AllowTo(ec2.Peer.AnyIpv4(), new ec2.Port(new ec2.PortProps { FromPort = 443, ToPort = 443 }); var fleet2 = new asg.AutoScalingGroup(this, "MyFleet2", new asg.AutoScalingGroupProps { /* ... */ }); fleet1.Connections.AllowFrom(fleet2, ec2.Port.AllTraffic());
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" autoscaling "github.com/aws/aws-cdk-go/awscdk/v2/awsautoscaling" ec2 "github.com/aws/aws-cdk-go/awscdk/v2/awsec2" ) fleet1 := autoscaling.NewAutoScalingGroup(this, jsii.String("MyFleet1"), &autoscaling.AutoScalingGroupProps{}) fleet1.Connections().AllowTo(ec2.Peer_AnyIpv4(),ec2.NewPort(&ec2.PortProps{ FromPort: jsii.Number(443), ToPort: jsii.Number(443) }),jsii.String("secure web")) fleet2 := autoscaling.NewAutoScalingGroup(this, jsii.String("MyFleet2"), &autoscaling.AutoScalingGroupProps{}) fleet1.Connections().AllowFrom(fleet2, ec2.Port_AllTraffic(),jsii.String("all traffic"))

Sumber daya tertentu memiliki port default yang terkait dengannya. Contohnya termasuk pendengar penyeimbang beban di port publik, dan port tempat mesin database menerima koneksi untuk instance database Amazon. RDS Dalam kasus seperti itu, Anda dapat menerapkan kontrol jaringan yang ketat tanpa harus menentukan port secara manual. Untuk melakukannya, gunakan allowToDefaultPort metode allowDefaultPortFrom dan (Python:allow_default_port_from,allow_to_default_port).

Contoh berikut menunjukkan cara mengaktifkan koneksi dari IPV4 alamat apa pun, dan koneksi dari grup Auto Scaling untuk mengakses database.

TypeScript
listener.connections.allowDefaultPortFromAnyIpv4('Allow public access'); fleet.connections.allowToDefaultPort(rdsDatabase, 'Fleet can access database');
JavaScript
listener.connections.allowDefaultPortFromAnyIpv4('Allow public access'); fleet.connections.allowToDefaultPort(rdsDatabase, 'Fleet can access database');
Python
listener.connections.allow_default_port_from_any_ipv4("Allow public access") fleet.connections.allow_to_default_port(rds_database, "Fleet can access database")
Java
listener.getConnections().allowDefaultPortFromAnyIpv4("Allow public access"); fleet.getConnections().AllowToDefaultPort(rdsDatabase, "Fleet can access database");
C#
listener.Connections.AllowDefaultPortFromAnyIpv4("Allow public access"); fleet.Connections.AllowToDefaultPort(rdsDatabase, "Fleet can access database");
Go
listener.Connections().AllowDefaultPortFromAnyIpv4(jsii.String("Allow public Access")) fleet.Connections().AllowToDefaultPort(rdsDatabase, jsii.String("Fleet can access database"))

Penanganan acara

Beberapa sumber daya dapat bertindak sebagai sumber acara. Gunakan addEventNotification metode (Python:add_event_notification) untuk mendaftarkan target acara ke jenis peristiwa tertentu yang dipancarkan oleh sumber daya. Selain itu, addXxxNotification metode menawarkan cara sederhana untuk mendaftarkan handler untuk jenis acara umum.

Contoh berikut menunjukkan cara memicu fungsi Lambda saat objek ditambahkan ke bucket Amazon S3.

TypeScript
import * as s3nots from '@aws-cdk/aws-s3-notifications'; const handler = new lambda.Function(this, 'Handler', { /*…*/ }); const bucket = new s3.Bucket(this, 'Bucket'); bucket.addObjectCreatedNotification(new s3nots.LambdaDestination(handler));
JavaScript
const s3nots = require('@aws-cdk/aws-s3-notifications'); const handler = new lambda.Function(this, 'Handler', { /*…*/ }); const bucket = new s3.Bucket(this, 'Bucket'); bucket.addObjectCreatedNotification(new s3nots.LambdaDestination(handler));
Python
import aws_cdk.aws_s3_notifications as s3_nots handler = lambda_.Function(self, "Handler", ...) bucket = s3.Bucket(self, "Bucket") bucket.add_object_created_notification(s3_nots.LambdaDestination(handler))
Java
import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.s3.notifications.LambdaDestination; Function handler = Function.Builder.create(this, "Handler")/* ... */.build(); Bucket bucket = new Bucket(this, "Bucket"); bucket.addObjectCreatedNotification(new LambdaDestination(handler));
C#
using lambda = Amazon.CDK.AWS.Lambda; using s3 = Amazon.CDK.AWS.S3; using s3Nots = Amazon.CDK.AWS.S3.Notifications; var handler = new lambda.Function(this, "Handler", new lambda.FunctionProps { .. }); var bucket = new s3.Bucket(this, "Bucket"); bucket.AddObjectCreatedNotification(new s3Nots.LambdaDestination(handler));
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" s3 "github.com/aws/aws-cdk-go/awscdk/v2/awss3" s3nots "github.com/aws/aws-cdk-go/awscdk/v2/awss3notifications" ) handler := lambda.NewFunction(this, jsii.String("MyFunction"), &lambda.FunctionProps{}) bucket := s3.NewBucket(this, jsii.String("Bucket"), &s3.BucketProps{}) bucket.AddObjectCreatedNotification(s3nots.NewLambdaDestination(handler), nil)

Kebijakan penghapusan

Sumber daya yang menyimpan data persisten, seperti database, bucket Amazon S3, dan pendaftar ECR Amazon, memiliki kebijakan penghapusan. Kebijakan penghapusan menunjukkan apakah akan menghapus objek persisten saat AWS CDK tumpukan yang berisi objek tersebut dihancurkan. Nilai yang menentukan kebijakan penghapusan tersedia melalui RemovalPolicy enumerasi dalam modul. AWS CDK core

catatan

Sumber daya selain yang menyimpan data secara terus-menerus mungkin juga memiliki removalPolicy yang digunakan untuk tujuan yang berbeda. Misalnya, versi fungsi Lambda menggunakan removalPolicy atribut untuk menentukan apakah versi tertentu dipertahankan saat versi baru diterapkan. Ini memiliki arti dan default yang berbeda dibandingkan dengan kebijakan penghapusan pada bucket Amazon S3 atau tabel DynamoDB.

Nilai Arti

RemovalPolicy.RETAIN

Simpan isi sumber daya saat menghancurkan tumpukan (default). Sumber daya menjadi yatim piatu dari tumpukan dan harus dihapus secara manual. Jika Anda mencoba menerapkan kembali tumpukan saat sumber daya masih ada, Anda akan menerima pesan kesalahan karena konflik nama.

RemovalPolicy.DESTROY

Sumber daya akan dihancurkan bersama dengan tumpukan.

AWS CloudFormation tidak menghapus bucket Amazon S3 yang berisi file meskipun kebijakan penghapusannya disetel ke. DESTROY Mencoba melakukannya adalah AWS CloudFormation kesalahan. Untuk AWS CDK menghapus semua file dari bucket sebelum menghancurkannya, atur autoDeleteObjects properti bucket ketrue.

Berikut ini adalah contoh membuat bucket Amazon S3 dengan RemovalPolicy of DESTROY dan autoDeleteOjbects disetel ke. true

TypeScript
import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, autoDeleteObjects: true }); } }
JavaScript
const cdk = require('@aws-cdk/core'); const s3 = require('@aws-cdk/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, autoDeleteObjects: true }); } } module.exports = { CdkTestStack }
Python
import aws_cdk.core as cdk import aws_cdk.aws_s3 as s3 class CdkTestStack(cdk.stack): def __init__(self, scope: cdk.Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) bucket = s3.Bucket(self, "Bucket", removal_policy=cdk.RemovalPolicy.DESTROY, auto_delete_objects=True)
Java
software.amazon.awscdk.core.*; import software.amazon.awscdk.services.s3.*; 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) .autoDeleteObjects(true).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, AutoDeleteObjects = true }); }
Go
import ( "github.com/aws/aws-cdk-go/awscdk/v2" "github.com/aws/jsii-runtime-go" s3 "github.com/aws/aws-cdk-go/awscdk/v2/awss3" ) s3.NewBucket(this, jsii.String("Bucket"), &s3.BucketProps{ RemovalPolicy: awscdk.RemovalPolicy_DESTROY, AutoDeleteObjects: jsii.Bool(true), })

Anda juga dapat menerapkan kebijakan penghapusan langsung ke AWS CloudFormation sumber daya yang mendasarinya melalui applyRemovalPolicy() metode ini. Metode ini tersedia pada beberapa sumber daya stateful yang tidak memiliki removalPolicy properti di alat peraga sumber daya L2 mereka. Contohnya meliputi hal berikut:

  • AWS CloudFormation tumpukan

  • Kolam pengguna Amazon Cognito

  • Contoh basis data Amazon DocumentDB

  • EC2Volume Amazon

  • Domain OpenSearch Layanan Amazon

  • Sistem FSx file Amazon

  • SQSAntrian Amazon

TypeScript
const resource = bucket.node.findChild('Resource') as cdk.CfnResource; resource.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
JavaScript
const resource = bucket.node.findChild('Resource'); resource.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
Python
resource = bucket.node.find_child('Resource') resource.apply_removal_policy(cdk.RemovalPolicy.DESTROY);
Java
CfnResource resource = (CfnResource)bucket.node.findChild("Resource"); resource.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
C#
var resource = (CfnResource)bucket.node.findChild('Resource'); resource.ApplyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
catatan

AWS CDK Ini RemovalPolicy diterjemahkan menjadi AWS CloudFormation's. DeletionPolicy Namun, AWS CDK defaultnya adalah mempertahankan data, yang merupakan kebalikan dari AWS CloudFormation default.