Mixages - AWS Kit de développement Cloud (AWS CDK) v2

Ceci est le guide du développeur du AWS CDK v2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mixages

Les mixins sont des fonctionnalités réutilisables que vous appliquez aux constructions à l'aide de la .with() méthode. Ils ajoutent des fonctionnalités aux constructions L1 (CloudFormationniveau) et L2 (basées sur l'intention), telles que le contrôle de version, la suppression automatique d'objets ou le blocage de l'accès public. Chaque mixin fonctionne sur une seule ressource. Pour connecter deux ressources, utilisez plutôt Facades.

Chaque mixin cible un type de ressource spécifique et porte le nom de cette ressource. Par exemple, BucketVersioning cible les compartiments Amazon S3. Vous accédez aux mixins via l'mixinsespace de noms de chaque module de service, tel que. s3.mixins

Appliquer des mixins

Vous appliquez des mixins à l'aide de la .with() méthode, qui est disponible sur toutes les constructions. Vous pouvez enchaîner plusieurs mixins ensemble :

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

Chaque mixin déclare les types de ressources qu'il prend en charge. Si vous appliquez un mixin à une construction qu'il ne prend pas en charge, il est ignoré en silence. Cela signifie que vous pouvez appliquer des mixins à grande échelle en toute sécurité sans vous soucier des incohérences entre les types. Si vous devez vous assurer qu'un mixin est appliqué, utilisez requireAll()ou requireAny().

Utiliser Mixins avec les constructions L1 et L2

Les mixins fonctionnent avec les constructions L1 et L2. Lorsque vous appliquez un mixin à une construction L2, cela s'applique également à la ressource L1 qui la sous-tend.

L'exemple suivant montre comment appliquer des mixins aux constructions L1 et L2 :

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

Propriétés des mélanges et des propriétés de construction

Les propriétés de mixage et de construction fonctionnent ensemble. Les propriétés de construction L2 configurent une ressource lorsque vous la créez. Les mixins peuvent être appliqués à tout moment.

Utilisez les propriétés de construction L2 lorsque

Vous utilisez une construction L2 et la propriété dont vous avez besoin est disponible. Il s'agit de l'approche la plus simple.

Utilisez Mixins lorsque
  • Vous travaillez avec une construction L1 et souhaitez des fonctionnalités de type L2.

  • Vous souhaitez ajouter une fonction à une construction L2 qui n'est pas disponible en tant que propriété.

  • Vous souhaitez appliquer la même fonctionnalité à plusieurs constructions de types différents.

Les mixins ne remplacent pas les propriétés de construction. Ils ne peuvent pas rendre une propriété obligatoire facultative ou modifier les valeurs par défaut.

Appliquer des mixins à plusieurs constructions

L'Mixins.of()API permet de mieux contrôler la manière dont les mixins sont appliqués dans un scope. Au lieu de faire appel .with() à des constructions individuelles, vous pouvez appliquer un mixin à toutes les constructions correspondantes d'une pile ou d'une portée en même temps :

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

Par défaut, les constructions qui ne supportent pas le mixin sont ignorées silencieusement. requireAll()À utiliser pour affirmer que le mixin est appliqué à toutes les constructions de la sélection, ou requireAny() pour affirmer qu'il est appliqué à au moins une d'entre elles. Ceci est utile pour s'assurer que les ressources ont une configuration requise :

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

Mixages et aspects

Les mixins et les aspects sont liés mais ont des objectifs différents :

  • Les mixins sont appliqués immédiatement lorsque vous appelez.with(). Vous choisissez exactement les constructions auxquelles les appliquer.

  • Les aspects s'appliquent lors de la synthèse à toutes les constructions d'un scope. Utilisez-les pour les politiques générales et les contrôles.

Utilisez Mixins pour ajouter une fonctionnalité à des constructions spécifiques. Utilisez Aspects pour appliquer des règles ou appliquer des modifications à l'ensemble de votre application.

  • Façades — Connectez les ressources aux principaux IAM et à d'autres services.

  • Aspects — Appliquez les modifications ou validez les constructions dans l'ensemble de votre application.

  • Constructions — Découvrez les constructions L1, L2 et L3.

  • Personnalisation des constructions : personnalisez les constructions avec des trappes d'échappement et des remplacements bruts.