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.
Mixin
Mixin adalah fitur yang dapat digunakan kembali yang Anda terapkan pada konstruksi menggunakan metode ini. .with() Mereka menambahkan fitur ke konstruksi L1 (CloudFormation-level) dan L2 (berbasis niat), seperti pembuatan versi, objek penghapusan otomatis, atau memblokir akses publik. Setiap mixin bekerja pada satu sumber daya. Untuk menghubungkan dua sumber daya, gunakan Fasad sebagai gantinya.
Setiap mixin menargetkan jenis sumber daya tertentu dan dinamai menurut sumber daya itu. Misalnya, BucketVersioning menargetkan ember Amazon S3. Anda mengakses mixin melalui mixins namespace dari setiap modul layanan, seperti. s3.mixins
Terapkan Mixins
Anda menerapkan mixin menggunakan .with() metode, yang tersedia di semua konstruksi. Anda dapat menghubungkan beberapa mixin bersama-sama:
contoh
- TypeScript
-
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.CfnBucket(this, 'MyBucket')
.with(new s3.mixins.BucketVersioning())
.with(new s3.mixins.BucketBlockPublicAccess());
- JavaScript
-
const s3 = require('aws-cdk-lib/aws-s3');
const bucket = new s3.CfnBucket(this, 'MyBucket')
.with(new s3.mixins.BucketVersioning())
.with(new s3.mixins.BucketBlockPublicAccess());
- Python
-
import aws_cdk.aws_s3 as s3
bucket = s3.CfnBucket(self, "MyBucket") \
.with_(s3.mixins.BucketVersioning()) \
.with_(s3.mixins.BucketBlockPublicAccess())
- Java
-
import software.amazon.awscdk.services.s3.*;
CfnBucket bucket = new CfnBucket(this, "MyBucket");
bucket.with(new BucketVersioning());
bucket.with(new BucketBlockPublicAccess());
- C#
-
using Amazon.CDK.AWS.S3;
var bucket = new CfnBucket(this, "MyBucket");
bucket.With(new BucketVersioning());
bucket.With(new BucketBlockPublicAccess());
- Go
-
bucket := awss3.NewCfnBucket(stack, jsii.String("MyBucket"), nil)
bucket.With(awss3.NewBucketVersioning())
bucket.With(awss3.NewBucketBlockPublicAccess())
Setiap mixin menyatakan jenis sumber daya yang didukungnya. Jika Anda menerapkan mixin ke konstruksi yang tidak didukungnya, itu dilewati secara diam-diam. Ini berarti Anda dapat dengan aman menerapkan mixin secara luas tanpa khawatir tentang ketidakcocokan tipe. Jika Anda perlu memastikan mixin diterapkan, gunakan requireAll()atau requireAny().
Gunakan Mixin dengan konstruksi L1 dan L2
Mixin bekerja dengan konstruksi L1 dan L2. Saat Anda menerapkan mixin ke konstruksi L2, itu juga berlaku untuk sumber daya L1 di belakangnya.
Contoh berikut menunjukkan bagaimana menerapkan mixin ke kedua konstruksi L1 dan L2:
contoh
- TypeScript
-
import * as cdk from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
// Using a mixin with an L1 construct
new s3.CfnBucket(this, 'L1Bucket')
.with(new s3.mixins.BucketVersioning());
// Using a mixin with an L2 construct
new s3.Bucket(this, 'L2Bucket', {
removalPolicy: cdk.RemovalPolicy.DESTROY,
}).with(new s3.mixins.BucketAutoDeleteObjects());
- JavaScript
-
const cdk = require('aws-cdk-lib');
const s3 = require('aws-cdk-lib/aws-s3');
// Using a mixin with an L1 construct
new s3.CfnBucket(this, 'L1Bucket')
.with(new s3.mixins.BucketVersioning());
// Using a mixin with an L2 construct
new s3.Bucket(this, 'L2Bucket', {
removalPolicy: cdk.RemovalPolicy.DESTROY,
}).with(new s3.mixins.BucketAutoDeleteObjects());
- Python
-
import aws_cdk as cdk
import aws_cdk.aws_s3 as s3
# Using a mixin with an L1 construct
s3.CfnBucket(self, "L1Bucket") \
.with_(s3.mixins.BucketVersioning())
# Using a mixin with an L2 construct
s3.Bucket(self, "L2Bucket",
removal_policy=cdk.RemovalPolicy.DESTROY,
).with_(s3.mixins.BucketAutoDeleteObjects())
- Java
-
import software.amazon.awscdk.*;
import software.amazon.awscdk.services.s3.*;
// Using a mixin with an L1 construct
CfnBucket l1Bucket = new CfnBucket(this, "L1Bucket");
l1Bucket.with(new BucketVersioning());
// Using a mixin with an L2 construct
Bucket l2Bucket = Bucket.Builder.create(this, "L2Bucket")
.removalPolicy(RemovalPolicy.DESTROY)
.build();
l2Bucket.with(new BucketAutoDeleteObjects());
- C#
-
using Amazon.CDK;
using Amazon.CDK.AWS.S3;
// Using a mixin with an L1 construct
var l1Bucket = new CfnBucket(this, "L1Bucket");
l1Bucket.With(new BucketVersioning());
// Using a mixin with an L2 construct
var l2Bucket = new Bucket(this, "L2Bucket", new BucketProps
{
RemovalPolicy = RemovalPolicy.DESTROY
});
l2Bucket.With(new BucketAutoDeleteObjects());
- Go
-
l1Bucket := awss3.NewCfnBucket(stack, jsii.String("L1Bucket"), nil)
l1Bucket.With(awss3.NewBucketVersioning())
l2Bucket := awss3.NewBucket(stack, jsii.String("L2Bucket"), &awss3.BucketProps{
RemovalPolicy: awscdk.RemovalPolicy_DESTROY,
})
l2Bucket.With(awss3.NewBucketAutoDeleteObjects())
Mixins vs. properti konstruksi
Mixin dan properti konstruksi bekerja sama. Properti konstruksi L2 menyiapkan sumber daya saat Anda membuatnya. Mixin dapat diterapkan kapan saja.
- Gunakan properti konstruksi L2 saat
-
Anda menggunakan konstruksi L2 dan properti yang Anda butuhkan tersedia. Ini adalah pendekatan paling sederhana.
- Gunakan Mixins saat
-
-
Anda bekerja dengan konstruksi L1 dan menginginkan fitur seperti L2.
-
Anda ingin menambahkan fitur ke konstruksi L2 yang tidak tersedia sebagai properti.
-
Anda ingin menerapkan fitur yang sama di beberapa konstruksi dari berbagai jenis.
Mixin tidak menggantikan properti konstruksi. Mereka tidak dapat membuat properti wajib opsional atau mengubah nilai default.
Terapkan Mixins ke beberapa konstruksi
Mixins.of()API memberikan kontrol lebih besar atas bagaimana mixin diterapkan di seluruh cakupan. Alih-alih memanggil .with() konstruksi individual, Anda dapat menerapkan mixin ke semua konstruksi yang cocok dalam tumpukan atau cakupan sekaligus:
contoh
- TypeScript
-
import { Mixins } from 'aws-cdk-lib';
import * as s3 from 'aws-cdk-lib/aws-s3';
// Apply to all supported constructs in the stack
Mixins.of(stack).apply(new s3.mixins.BucketVersioning());
- JavaScript
-
const { Mixins } = require('aws-cdk-lib');
const s3 = require('aws-cdk-lib/aws-s3');
// Apply to all supported constructs in the stack
Mixins.of(stack).apply(new s3.mixins.BucketVersioning());
- Python
-
from aws_cdk import Mixins
import aws_cdk.aws_s3 as s3
# Apply to all supported constructs in the stack
Mixins.of(stack).apply(s3.mixins.BucketVersioning())
- Java
-
import software.amazon.awscdk.Mixins;
import software.amazon.awscdk.services.s3.*;
// Apply to all supported constructs in the stack
Mixins.of(stack).apply(new BucketVersioning());
- C#
-
using Amazon.CDK;
using Amazon.CDK.AWS.S3;
// Apply to all supported constructs in the stack
Mixins.Of(stack).Apply(new BucketVersioning());
- Go
-
awscdk.Mixins_Of(stack, nil).Apply(awss3.NewBucketVersioning())
Secara default, konstruksi yang tidak mendukung mixin dilewati secara diam-diam. Gunakan requireAll() untuk menegaskan bahwa mixin diterapkan ke setiap konstruksi dalam seleksi, atau requireAny() untuk menegaskan itu diterapkan pada setidaknya satu. Ini berguna untuk menegakkan bahwa sumber daya memiliki konfigurasi yang diperlukan:
contoh
- TypeScript
-
// Throws an error if any construct in the scope doesn't support the mixin
Mixins.of(stack)
.requireAll()
.apply(new s3.mixins.BucketVersioning());
- JavaScript
-
// Throws an error if any construct in the scope doesn't support the mixin
Mixins.of(stack)
.requireAll()
.apply(new s3.mixins.BucketVersioning());
- Python
-
# Throws an error if any construct in the scope doesn't support the mixin
Mixins.of(stack) \
.require_all() \
.apply(s3.mixins.BucketVersioning())
- Java
-
// Throws an error if any construct in the scope doesn't support the mixin
Mixins.of(stack)
.requireAll()
.apply(new BucketVersioning());
- C#
-
// Throws an error if any construct in the scope doesn't support the mixin
Mixins.Of(stack)
.RequireAll()
.Apply(new BucketVersioning());
- Go
-
awscdk.Mixins_Of(stack, nil).RequireAll().Apply(awss3.NewBucketVersioning())
Mixin dan Aspek
Mixin dan Aspek terkait tetapi melayani tujuan yang berbeda:
-
Mixin diterapkan segera saat Anda menelepon.with(). Anda memilih dengan tepat konstruksi mana yang akan diterapkan.
-
Aspek berlaku selama sintesis untuk semua konstruksi dalam ruang lingkup. Gunakan mereka untuk kebijakan dan pemeriksaan yang luas.
Gunakan Mixins untuk menambahkan fitur ke konstruksi tertentu. Gunakan Aspek untuk menegakkan aturan atau menerapkan perubahan di seluruh aplikasi Anda.
-
Fasad — Hubungkan sumber daya dengan prinsipal IAM dan layanan lainnya.
-
Aspek - Terapkan perubahan atau validasi konstruksi di seluruh aplikasi Anda.
-
Konstruksi - Pelajari tentang konstruksi L1, L2, dan L3.
-
Sesuaikan konstruksi - Sesuaikan konstruksi dengan lubang keluar dan penggantian mentah.