Mezclas - AWS Kit Cloud Development Kit (AWS CDK) v2

Esta es la guía para desarrolladores de AWS CDK v2. La primera versión del CDK pasó a la etapa de mantenimiento el 1.° de junio de 2022 y no cuenta con soporte desde el 1.° de junio de 2023.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Mezclas

Las mezclas son funciones reutilizables que se aplican a las construcciones mediante este método. .with() Añaden funciones a las construcciones L1 (CloudFormationnivel) y L2 (basadas en la intención), como el control de versiones, la eliminación automática de objetos o el bloqueo del acceso público. Cada mezcla funciona en un único recurso. Para conectar dos recursos, usa Facades en su lugar.

Cada mezcla se dirige a un tipo de recurso específico y lleva el nombre de ese recurso. Por ejemplo, se BucketVersioning dirige a los buckets de Amazon S3. Puede acceder a mixins a través del espacio de mixins nombres de cada módulo de servicio, por ejemplo. s3.mixins

Aplica Mixins

Las mezclas se aplican mediante el .with() método, que está disponible en todas las construcciones. Puede encadenar varias mezclas:

ejemplo
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())

Cada mixin declara qué tipos de recursos admite. Si aplicas un mixin a una construcción que no admite, se omite silenciosamente. Esto significa que puedes aplicar mezclas de forma amplia y segura sin preocuparte por los desajustes de tipos. Si necesita asegurarse de aplicar una mezcla, utilice o. requireAll()requireAny()

Utilice mezclas con las construcciones L1 y L2

Las mixinas funcionan con las construcciones L1 y L2. Cuando se aplica una mezcla a una construcción de L2, también se aplica al recurso de L1 subyacente.

El siguiente ejemplo muestra cómo aplicar mixins a las construcciones L1 y L2:

ejemplo
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())

Propiedades de mezcla frente a propiedades de construcción

Las propiedades de mezcla y construcción funcionan juntas. Las propiedades de construcción L2 configuran un recurso al crearlo. Las mezclas se pueden aplicar en cualquier momento.

Utilice las propiedades del constructo L2 cuando

Está utilizando una construcción L2 y la propiedad que necesita está disponible. Este es el enfoque más simple.

Use Mixins cuando
  • Está trabajando con una construcción L1 y desea características similares a las de L2.

  • Desea añadir una función a una construcción de L2 que no esté disponible como propiedad.

  • Desea aplicar la misma función en varios componentes fijos de diferentes tipos.

Las mezclas no sustituyen a las propiedades de construcción. No pueden hacer que una propiedad obligatoria sea opcional ni cambiar los valores por defecto.

Aplique mixins a varias construcciones

La Mixins.of() API proporciona un mayor control sobre cómo se aplican los mixins en un ámbito. En lugar de recurrir a .with() constructos individuales, puedes aplicar un mixin a todos los constructos coincidentes de una pila o ámbito a la vez:

ejemplo
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())

De forma predeterminada, las construcciones que no admiten el mixin se omiten silenciosamente. Se usa requireAll() para afirmar que el mixin se aplica a todos los constructos de la selección o requireAny() para afirmar que se aplica al menos a uno. Esto resulta útil para garantizar que los recursos tengan una configuración requerida:

ejemplo
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())

Mezclas y aspectos

Las mezclas y los aspectos están relacionados, pero tienen diferentes propósitos:

  • Los mixins se aplican inmediatamente cuando llamas. .with() Usted elige exactamente a qué constructos aplicarlos.

  • Los aspectos se aplican durante la síntesis a todos los constructos de un osciloscopio. Úselos para políticas y controles generales.

Utilice Mixins para añadir una función a construcciones específicas. Use Aspects para hacer cumplir las reglas o aplicar cambios en toda la aplicación.