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.
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. stack2
mungkin, 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_policy
Python:).
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
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);
AWS CDK Ini RemovalPolicy
diterjemahkan menjadi AWS CloudFormation's. DeletionPolicy
Namun, AWS CDK defaultnya adalah mempertahankan data, yang merupakan kebalikan dari AWS CloudFormation default.