Mixin - AWS Cloud Development Kit (AWS CDK) v2

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.