混合 - AWS クラウド開発キット (AWS CDK) v2

これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

混合

ミキサーは、 .with()メソッドを使用してコンストラクトに適用する再利用可能な機能です。バージョニング、オブジェクトの自動削除、パブリックアクセスのブロックなど、L1 (CloudFormation レベル) コンストラクトと L2 (インテントベース) コンストラクトの両方に機能を追加します。各ミキサーは 1 つのリソースで機能します。2 つのリソースを接続するには、代わりにファサードを使用します。

各ミックスインは特定のリソースタイプをターゲットとし、そのリソースにちなんで命名されます。たとえば、 は Amazon S3 バケットをBucketVersioningターゲットにします。などの各サービスモジュールmixinsの名前空間からミックスインにアクセスしますs3.mixins

ミキサーの適用

すべてのコンストラクトで使用できる .with()メソッドを使用して、ミキサーを適用します。複数のミキサーを連結できます。

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

各 mixin は、サポートするリソースタイプを宣言します。サポートされていないコンストラクトにミックスインを適用すると、サイレントにスキップされます。つまり、タイプの不一致を気にすることなく、ミクシンを広範囲に安全に適用できます。ミキサーが適用されていることを確認する必要がある場合は、 requireAll()または requireAny()を使用します。

L1 および L2 コンストラクトで Mixins を使用する

ミキサーは L1 コンストラクトと L2 コンストラクトの両方で機能します。ミックスインを L2 コンストラクトに適用すると、その背後にある L1 リソースにも適用されます。

次の例は、L1 コンストラクトと L2 コンストラクトの両方にミクシンを適用する方法を示しています。

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

混合とコンストラクトのプロパティ

混合プロパティとコンストラクトプロパティは連携します。L2 コンストラクトプロパティは、作成時にリソースを設定します。ミキサーはいつでも適用できます。

次の場合に L2 コンストラクトプロパティを使用する

L2 コンストラクトを使用しており、必要な プロパティを使用できます。これは最も簡単なアプローチです。

次の場合に Mixins を使用する
  • L1 コンストラクトを使用していて、L2-like機能が必要です。

  • プロパティとして使用できない L2 コンストラクトに機能を追加します。

  • 異なるタイプの複数のコンストラクトに同じ機能を適用する場合。

Mixins はコンストラクトプロパティを置き換えません。必須プロパティをオプションにしたり、デフォルト値を変更したりすることはできません。

複数のコンストラクトに Mixins を適用する

Mixins.of() API は、スコープ全体にミクシンがどのように適用されるかをより詳細に制御します。個々のコンストラクト.with()を呼び出す代わりに、スタックまたはスコープ内のすべての一致するコンストラクトに一度にミックスインを適用できます。

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

デフォルトでは、ミキサーをサポートしていないコンストラクトはサイレントにスキップされます。requireAll() を使用して、ミキサーが選択内のすべてのコンストラクトに適用されることをアサートrequireAny()するか、少なくとも 1 つに適用されることをアサートします。これは、リソースに必要な設定を強制するのに役立ちます。

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

混合と側面

ミックスとアスペクトは関連していますが、目的は異なります。

  • 混合は、 を呼び出すとすぐに適用されます.with()。適用するコンストラクトを正確に選択します。

  • アスペクトは、合成中にスコープ内のすべてのコンストラクトに適用されます。広範なポリシーとチェックに使用します。

Mixins を使用して、特定のコンストラクトに機能を追加します。アスペクトを使用して、アプリケーション全体にルールを適用したり、変更を適用したりします。

  • ファサード – リソースを IAM プリンシパルやその他のサービスに接続します。

  • 側面 – アプリケーション全体に変更を適用するか、コンストラクトを検証します。

  • コンストラクト – L1, L2、L3 コンストラクトについて説明します。

  • コンストラクトのカスタマイズ – エスケープハッチと raw オーバーライドを使用してコンストラクトをカスタマイズします。