Back to Releases
v2.239.0 2026年2月19日

AWS CDK v2.239.0 リリース解説

DynamoDBクロスアカウントグローバルテーブル、Kinesis Firehoseダイナミックパーティショニング、L1リソース向けリソースポリシーラッパーが追加されました。

dynamodbkinesisfirehoseec2rdsbedrock-agentcoreredshiftecss3logs

概要

AWS CDK v2.239.0では、DynamoDBでクロスアカウントグローバルテーブルレプリケーションがサポートされ、異なるAWSアカウント間でのテーブルレプリケーションが可能になりました。Kinesis Firehoseではダイナミックパーティショニングがサポートされ、レコードの内容に基づいたS3バケット内の自動パーティショニングが実現できます。また、L1リソース向けにリソースポリシーと暗号化リソースラッパーが追加され、L1コンストラクトでもL2と同様の権限付与が可能になりました。

新機能

DynamoDB: クロスアカウントグローバルテーブルレプリケーションのサポート (#36895)

DynamoDBグローバルテーブルで、異なるAWSアカウント間でのテーブルレプリケーションがサポートされました。マルチテナントアーキテクチャ、組織境界、ディザスタリカバリシナリオに対応できます。

新しいTableV2MultiAccountReplicaコンストラクトと、自動的な権限管理が追加されました。

import * as cdk from 'aws-cdk-lib';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import * as kms from 'aws-cdk-lib/aws-kms';

// ソースアカウントのスタック(アカウントA、us-east-1)
const sourceStack = new cdk.Stack(app, 'SourceStack', {
  env: { account: '111111111111', region: 'us-east-1' },
});

// ソーステーブルの作成
const sourceTable = new dynamodb.TableV2(sourceStack, 'SourceTable', {
  tableName: 'MyGlobalTable',
  partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
  billing: dynamodb.Billing.onDemand(),
});

// レプリカアカウントのスタック(アカウントB、us-west-2)
const replicaStack = new cdk.Stack(app, 'ReplicaStack', {
  env: { account: '222222222222', region: 'us-west-2' },
});

// 新機能: クロスアカウントレプリカの作成
const replica = new dynamodb.TableV2MultiAccountReplica(replicaStack, 'Replica', {
  sourceTable,                              // ソーステーブルへの参照
  tableName: 'MyGlobalTable',               // レプリカテーブル名(ソースと同じ名前が必要)
  // テーブル設定のレプリケーションモードを指定
  settingsReplicationMode: dynamodb.SettingsReplicationMode.ALL,  // ALL: すべての設定をレプリケート
});

権限管理の自動化:

  • ソーステーブルのリソースポリシーでレプリカアカウントにdynamodb:AssociateTableReplicaを付与
  • DynamoDBレプリケーションサービスプリンシパルに読み取り/書き込み権限を自動付与
  • KMS暗号化キーの権限も自動設定

クロスアカウント権限付与のためのメソッド:

import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';

// ソーステーブルとレプリカテーブルの権限付与
// TableGrantsクラスを使用
const grants = dynamodb.TableGrants.fromTable(sourceTable);

// レプリカアカウントへのレプリケーション権限を付与
grants.multiAccountReplicationTo(
  replicaStack.account,           // レプリカアカウントID
  replicaStack.region,            // レプリカリージョン
);

// ソーステーブルからのレプリケーション受信権限を付与(レプリカ側で実行)
const replicaGrants = dynamodb.TableGrants.fromTable(replica);
replicaGrants.multiAccountReplicationFrom(
  sourceStack.account,            // ソースアカウントID
  sourceStack.region,             // ソースリージョン
);

Kinesis Firehose: ダイナミックパーティショニングのサポート (#35903)

Kinesis FirehoseでS3バケットへのダイナミックパーティショニングがサポートされました。レコードの内容に基づいてS3バケット内でデータを自動的にパーティション分割できます。

import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as lambda from 'aws-cdk-lib/aws-lambda';

const bucket = new s3.Bucket(this, 'DataBucket');
const processorFunction = new lambda.Function(this, 'ProcessorFunction', {
  // Lambda関数の設定...
  runtime: lambda.Runtime.NODEJS_20_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
});

// 新機能: ダイナミックパーティショニングを有効にしたS3送信先
const s3Destination = new firehose.S3Bucket(bucket, {
  // ダイナミックパーティショニングを有効化
  dynamicPartitioning: {
    enabled: true,                  // ダイナミックパーティショニングを有効化
  },

  // データプロセッサの設定
  processors: [
    // マルチレコードデアグリゲーション(JSONレコードの分割)
    firehose.RecordDeAggregationProcessor.json(),

    // JQ-1.6を使用したインラインメタデータ抽出
    firehose.MetadataExtractionProcessor.jq16({
      customer_id: '.customer_id',              // JSONフィールドから顧客IDを抽出
      device: '.type.device',                   // ネストされたフィールドからデバイス情報を抽出
      year: '.event_timestamp|strftime("%Y")',  // タイムスタンプから年を抽出
    }),

    // Lambda関数によるカスタム処理(オプション)
    new firehose.LambdaFunctionProcessor(processorFunction),
  ],

  // パーティションキーを含むS3出力プレフィックス
  dataOutputPrefix: '!{partitionKeyFromQuery:year}/!{partitionKeyFromQuery:device}/!{partitionKeyFromQuery:customer_id}/!{partitionKeyFromLambda:lambda_key}/',
  // エラー出力プレフィックス(dataOutputPrefixに式が含まれる場合は必須)
  errorOutputPrefix: '!{firehose:error-output-type}/!{timestamp:yyyy/MM}/',
});

const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
  destination: s3Destination,
});

利用可能なデータプロセッサ:

  • RecordDeAggregationProcessor.json(): JSONレコードのマルチレコードデアグリゲーション
  • RecordDeAggregationProcessor.delimiter(delimiter): 区切り文字ベースのデアグリゲーション
  • MetadataExtractionProcessor.jq16(queries): JQ-1.6クエリによるインラインメタデータ抽出
  • LambdaFunctionProcessor: Lambda関数によるカスタム処理

L1リソース向けリソースポリシーと暗号化リソースラッパー (#36849)

L1(CloudFormation)リソースに対して、L2コンストラクトと同様にリソースポリシーや暗号化設定の権限付与ができるようになりました。新しい「トレイト」パターンとトレイトファクトリが導入されています。

import * as cdk from 'aws-cdk-lib';
import * as kms from 'aws-cdk-lib/aws-kms';
import * as iam from 'aws-cdk-lib/aws-iam';

// 新機能: ResourceWithPolicies を使用してL1リソースにリソースポリシーを追加
const cfnKey = new kms.CfnKey(this, 'L1Key', {
  keyPolicy: {
    Version: '2012-10-17',
    Statement: [],
  },
});

// L1リソースに対してリソースポリシーを追加
iam.ResourceWithPolicies.of(cfnKey).addToResourcePolicy(
  new iam.PolicyStatement({
    actions: ['kms:Encrypt', 'kms:Decrypt'],
    principals: [new iam.ServicePrincipal('logs.amazonaws.com')],
    resources: ['*'],
  }),
);

// KeyGrantsクラスを使用した権限付与
// L1/L2どちらでも同じように動作
const grants = kms.KeyGrants.fromKey(cfnKey);
grants.decrypt(new iam.ServicePrincipal('lambda.amazonaws.com'));

サポートされるリソースタイプ:

リソースポリシーファクトリ(IResourceWithPolicyV2):

  • S3バケット
  • KMSキー
  • CloudWatch Logsロググループ
  • SQSキュー
  • DynamoDBテーブル
  • SNSトピック

暗号化リソースファクトリ(IEncryptedResource):

  • S3バケット
  • SQSキュー
  • DynamoDBテーブル
  • SNSトピック

フィーチャーフラグ: デフォルト実装を無効にしたい場合は、@aws-cdk/core:automaticL1Traitsフィーチャーフラグをfalseに設定します。

L1 CloudFormationリソース定義の更新 (#36923, #36997, #37031)

最新のAWS CloudFormationリソース仕様に基づいてL1コンストラクトが更新されました。

バグ修正

aws-cdk-lib: peer dependency conflictを解決するためにcloud-assembly-schemaを更新 (#36953)

cloud-assembly-schemaパッケージのバージョンが更新され、依存関係の競合が解決されました。

aws-cdk-lib: CVEスキャナーをトリガーするajvのバージョンをアップグレード (#37022)

ajvパッケージがバージョン8.18.0にアップグレードされました。このバージョンはReDoS攻撃に対する脆弱性が修正されています。

CDK自体には実際の脆弱性はありませんでした(入力が攻撃者によって制御されないため)が、CVEスキャナーがこの問題を検出することがありました。

EC2: 一部の隔離リージョンにVPCエンドポイント命名規則を追加 (#36794)

AWS隔離リージョンに対して正しいVPCエンドポイントプレフィックスが追加されました:

  • us-iso-east-1, us-iso-west-1: gov.ic.c2s
  • us-isob-east-1, us-isob-west-1: gov.sgov.sc2s
  • us-isof-south-1, us-isof-east-1: gov.ic.hci.csp

これにより、隔離リージョンでのVPCエンドポイント作成時に正しいサービス名が使用されます。

RDS: 非推奨バージョンのマークと新しいエンジンバージョンの追加 (#36937)

RDSエンジンバージョンクラスが更新され、AWSでサポートされなくなったバージョンに@deprecatedタグが追加されました。また、新しく利用可能になったバージョンが追加されました。

追加された新バージョンの例:

  • MySQL: VER_8_0_45, VER_8_4_8
  • PostgreSQL: 各メジャーバージョンの最新マイナーバージョン
  • Aurora MySQL: VER_3_04_6, VER_3_10_3

非推奨としてマークされたバージョン: AWS RDS APIで利用できなくなったバージョンが非推奨としてマークされています。IDEでこれらのバージョンを使用すると警告が表示されます。

import * as rds from 'aws-cdk-lib/aws-rds';

// 推奨: 利用可能な最新バージョンを使用
const instance = new rds.DatabaseInstance(this, 'Instance', {
  engine: rds.DatabaseInstanceEngine.postgres({
    version: rds.PostgresEngineVersion.VER_16_11,  // 最新の利用可能バージョン
  }),
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO),
  vpc,
});

Alphaモジュール (2.239.0-alpha.0)

新機能

Bedrock AgentCore: fromCodeAssetメソッドの追加 (#36472)

AgentRuntimeArtifact.fromCodeAsset()メソッドが追加され、ローカルコードアセットから直接ランタイムアーティファクトを作成できるようになりました。S3バケットの手動管理が不要になります。

import * as bedrock from '@aws-cdk/aws-bedrock-agentcore-alpha';

// 新機能: ローカルコードアセットからランタイムアーティファクトを作成
const artifact = bedrock.AgentRuntimeArtifact.fromCodeAsset('path/to/agent-code');

const runtime = new bedrock.BedrockAgentRuntime(this, 'Runtime', {
  artifact,                                    // S3への自動アップロード
  // その他の設定...
});

Bedrock AgentCore: API Gatewayターゲットタイプの追加 (#36841)

AgentCore GatewayのターゲットとしてAmazon API Gateway REST APIがサポートされました。既存のAPI GatewayをAIエージェントのツールとして公開できます。

import * as bedrock from '@aws-cdk/aws-bedrock-agentcore-alpha';
import * as apigateway from 'aws-cdk-lib/aws-apigateway';

// 既存のREST API
const api = new apigateway.RestApi(this, 'MyApi', {
  restApiName: 'my-service',
});

// 新機能: API Gatewayをターゲットとして使用
const target = bedrock.GatewayTarget.fromApiGateway(api, {
  name: 'my-api-target',
  description: 'My API Gateway target',
});

const gateway = new bedrock.Gateway(this, 'Gateway', {
  targets: [target],
});

自動付与される権限:

  • apigateway:GET: REST APIのOpenAPI定義を取得
  • execute-api:Invoke: REST APIエンドポイントの呼び出し(IAM認証時)

Mixins Preview: ECS ClusterSettingsMixinの追加 (#36796)

ECSクラスターの設定をMixinsパターンで適用できるClusterSettingsMixinが追加されました。Container Insightsの拡張モードなどを設定できます。

import * as ecs from 'aws-cdk-lib/aws-ecs';
import { ClusterSettingsMixin } from '@aws-cdk/mixins-preview';

// L1クラスターにMixinを適用
new ecs.CfnCluster(this, 'L1Cluster', { clusterName: 'test' })
  .with(new ClusterSettingsMixin([
    { name: 'containerInsights', value: 'enhanced' },  // Container Insights拡張モードを有効化
  ]));

// L2クラスターにも同様に適用可能
new ecs.Cluster(this, 'L2Cluster', { vpc, clusterName: 'test' })
  .with(new ClusterSettingsMixin([
    { name: 'containerInsights', value: 'enhanced' },
  ]));

Mixins Preview: S3 BucketBlockPublicAccessミックスインの追加 (#36905)

S3バケットのパブリックアクセスブロック設定をMixinsパターンで適用できるBucketBlockPublicAccessが追加されました。

import * as s3 from 'aws-cdk-lib/aws-s3';
import { BucketBlockPublicAccess } from '@aws-cdk/mixins-preview';

// デフォルト: BLOCK_ALL(すべてのパブリックアクセスをブロック)
new s3.CfnBucket(this, 'Bucket')
  .with(new BucketBlockPublicAccess());

// カスタム設定
new s3.CfnBucket(this, 'CustomBucket')
  .with(new BucketBlockPublicAccess(s3.BlockPublicAccess.BLOCK_ACLS));

Mixins Preview: Vended LogsのtoDestination()メソッドの追加 (#36896)

Vended Logsで事前作成されたDeliveryDestinationにログを送信できるtoDestination()メソッドが追加されました。クロスアカウントログ配信に対応しています。

import * as logs from 'aws-cdk-lib/aws-logs';
import { VendedLogs } from '@aws-cdk/mixins-preview';

// 事前作成されたDeliveryDestination
const destination = new logs.CfnDeliveryDestination(this, 'Destination', {
  name: 'my-destination',
  // 設定...
});

// 新機能: 任意のDeliveryDestinationにログを送信
const vendedLogs = new VendedLogs(this, 'VendedLogs');
vendedLogs.toDestination(destination, sourceResource);

バグ修正(破壊的変更を含む)

Redshift Alpha: デフォルトノードタイプをDC2_LARGEからRA3_LARGEに変更 (#36516)

破壊的変更: RedshiftクラスターのデフォルトノードタイプがDC2_LARGEからRA3_LARGEに変更されました。

AWSはDC2インスタンスタイプの新規作成をサポートしなくなったため、現在推奨されているRA3_LARGEがデフォルトになりました。

import * as redshift from '@aws-cdk/aws-redshift-alpha';

// 変更前: デフォルトはDC2_LARGE(現在は非サポート)
// 変更後: デフォルトはRA3_LARGE(AWS推奨)
const cluster = new redshift.Cluster(this, 'Redshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  // nodeType を指定しない場合、RA3_LARGE が使用される
});

// 明示的にノードタイプを指定する場合
const customCluster = new redshift.Cluster(this, 'CustomRedshift', {
  masterUser: {
    masterUsername: 'admin',
  },
  vpc,
  nodeType: redshift.NodeType.RA3_XLPLUS,  // 明示的に指定
});

破壊的変更

L1リソースの必須プロパティ変更

CloudFormationリソーススキーマの更新により、以下のL1リソースで必須プロパティが変更されました:

LicenseManager:

  • AWS::LicenseManager::License: Beneficiaryプロパティが必須になりました
  • AWS::LicenseManager::License: ProductSKUプロパティが必須になりました

SageMaker:

  • AWS::SageMaker::Cluster: Orchestrator.Eksプロパティがimmutable(変更不可)になりました

これらのリソースを使用している場合は、必須プロパティが設定されていることを確認してください。

まとめ

AWS CDK v2.239.0は、データベースとストリーミングの分野で大きな機能強化が行われたリリースです。

主なハイライト:

  • DynamoDBクロスアカウントレプリケーション: 異なるAWSアカウント間でのグローバルテーブルレプリケーションが可能に
  • Firehoseダイナミックパーティショニング: レコード内容に基づくS3への自動パーティショニング
  • L1リソースの権限付与改善: L1コンストラクトでもL2と同様のGrants APIが利用可能に

Alphaモジュール:

  • Bedrock AgentCoreでローカルコードアセットとAPI Gatewayターゲットをサポート
  • Mixins PreviewでECS、S3、CloudWatch Logsの新しいミックスインを追加
  • RedshiftのデフォルトノードタイプがRA3_LARGEに変更(破壊的変更)

L1リソースの必須プロパティ変更に該当する場合は、デプロイ前にコードを確認してください。