Back to Releases
v2.238.0 2026年2月9日

AWS CDK v2.238.0 リリース解説

ネストされたスタックでのテンプレートインデント抑制、Firehoseフローログ送信先、EKS構成要素のRemoval Policy対応、Glueパーティションプロジェクションの型安全な設定などが追加されました。

coreec2eksglueeventsiambedrock-agentcore

概要

AWS CDK v2.238.0では、ネストされたスタックでテンプレートインデント抑制が可能になり、CloudFormationテンプレートサイズの削減が容易になりました。EC2モジュールではVPCフローログの送信先としてFirehoseがサポートされ、EKSモジュールでは全構成要素にRemoval Policyが追加されるとともに、新しいアクセスエントリタイプ(EC2、HYBRID_LINUX、HYPERPOD_LINUX)がサポートされました。また、Glue Alphaモジュールでは型安全なパーティションプロジェクション設定が導入されています。

新機能

Core: ネストされたスタックでインデント抑制が可能に (#35122)

ネストされたスタックでsuppressTemplateIndentationプロパティが利用可能になりました。これにより、CloudFormationテンプレートのサイズを削減し、テンプレートサイズの制限(1MB)に近いスタックでも余裕を持たせることができます。

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

const app = new cdk.App();
const parentStack = new cdk.Stack(app, 'ParentStack');

// ネストされたスタックでインデント抑制を有効化
const nestedStack = new cdk.NestedStack(parentStack, 'NestedStack', {
  // 新機能: テンプレートのインデントを抑制してサイズを削減
  suppressTemplateIndentation: true,  // true に設定するとJSON出力時のインデントが省略される
});

この機能は、親スタックのsuppressTemplateIndentationとは独立して設定できます。

EC2: VPCフローログの送信先としてFirehoseをサポート (#36278)

VPCフローログの送信先として、Amazon Data Firehose(旧Kinesis Data Firehose)のデリバリーストリームを指定できるようになりました。クロスアカウント配信のためのIAMロール指定もサポートされています。

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

const vpc = new ec2.Vpc(this, 'Vpc');

// Firehoseデリバリーストリームを作成
const bucket = new s3.Bucket(this, 'FlowLogsBucket');
const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
  destination: new firehose.destinations.S3Bucket(bucket),
});

// VPCフローログをFirehoseに送信
vpc.addFlowLog('FlowLogToFirehose', {
  // 新機能: Firehoseを送信先として指定
  destination: ec2.FlowLogDestination.toFirehose(deliveryStream),
});

// クロスアカウント配信の場合はIAMロールを指定
const crossAccountRole = new iam.Role(this, 'CrossAccountRole', {
  assumedBy: new iam.ServicePrincipal('vpc-flow-logs.amazonaws.com'),
});

vpc.addFlowLog('FlowLogCrossAccount', {
  // クロスアカウント配信用にIAMロールを指定
  destination: ec2.FlowLogDestination.toFirehose(
    deliveryStream,
    crossAccountRole,  // オプション: クロスアカウント配信時に必要
  ),
});

注意: 既存のtoKinesisDataFirehoseDestination()メソッドは非推奨となり、新しいtoFirehose()メソッドの使用が推奨されます。

EKS: 全構成要素にRemoval Policyを追加 (#35835)

EKSモジュールの全ての構成要素でRemoval Policyを指定できるようになりました。これにより、スタック削除時のリソースの振る舞いを細かく制御できます。特に、EKS v1からeks-v2-alphaへの移行時にRETAINポリシーを設定してリソースを保持し、その後インポートする際に有用です。

対象となる構成要素:

  • AccessEntry
  • ServiceAccount
  • FargateProfile
  • AlbController
  • KubernetesManifest
  • KubernetesPatch
  • KubernetesObjectValue
  • ManagedNodeGroup
  • HelmChart
  • Addon
import * as cdk from 'aws-cdk-lib';
import * as eks from 'aws-cdk-lib/aws-eks';

const cluster = new eks.Cluster(this, 'Cluster', {
  version: eks.KubernetesVersion.V1_31,
});

// AccessEntryにRemoval Policyを設定
new eks.AccessEntry(this, 'AccessEntry', {
  cluster,
  principal: 'arn:aws:iam::123456789012:role/MyRole',
  accessPolicies: [eks.AccessPolicy.fromAccessPolicyName('AmazonEKSClusterAdminPolicy', {
    accessScopeType: eks.AccessScopeType.CLUSTER,
  })],
  // 新機能: Removal Policyを指定
  removalPolicy: cdk.RemovalPolicy.RETAIN,  // スタック削除時にリソースを保持
});

// HelmChartにRemoval Policyを設定
cluster.addHelmChart('NginxIngress', {
  chart: 'ingress-nginx',
  repository: 'https://kubernetes.github.io/ingress-nginx',
  namespace: 'ingress-nginx',
  // 新機能: Removal Policyを指定
  removalPolicy: cdk.RemovalPolicy.DESTROY,  // スタック削除時にリソースを削除
});

// ManagedNodeGroupにRemoval Policyを設定
cluster.addNodegroupCapacity('NodeGroup', {
  instanceTypes: [new ec2.InstanceType('m5.large')],
  minSize: 1,
  maxSize: 3,
  // 新機能: Removal Policyを指定
  removalPolicy: cdk.RemovalPolicy.RETAIN,  // スタック削除時にノードグループを保持
});

EKS: EC2、HYBRID_LINUX、HYPERPOD_LINUXアクセスエントリタイプのサポート (#36350)

EKSアクセスエントリに3つの新しいタイプが追加されました。これにより、EKS Auto Mode、EKS Hybrid Nodes、Amazon SageMaker HyperPodなど、様々なノードタイプでのアクセス設定が可能になりました。

新しいアクセスエントリタイプ:

  • EC2: EKS Auto Modeのノードロール用
  • HYBRID_LINUX: EKS Hybrid Nodes用
  • HYPERPOD_LINUX: Amazon SageMaker HyperPod用
import * as eks from 'aws-cdk-lib/aws-eks';
import * as iam from 'aws-cdk-lib/aws-iam';

const cluster = new eks.Cluster(this, 'Cluster', {
  version: eks.KubernetesVersion.V1_31,
});

// EKS Auto Mode用のノードロール
const autoModeNodeRole = new iam.Role(this, 'AutoModeNodeRole', {
  assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
});

// 新機能: EC2タイプのアクセスエントリを作成
// EKS Auto Modeのカスタムノードロールに使用
new eks.AccessEntry(this, 'AutoModeAccess', {
  cluster,
  principal: autoModeNodeRole.roleArn,
  accessEntryType: eks.AccessEntryType.EC2,  // EKS Auto Mode用
  accessPolicies: [
    eks.AccessPolicy.fromAccessPolicyName('AmazonEKSClusterAdminPolicy', {
      accessScopeType: eks.AccessScopeType.CLUSTER,
    }),
  ],
});

// Hybrid Nodes用のアクセスエントリ
const hybridNodeRole = new iam.Role(this, 'HybridNodeRole', {
  assumedBy: new iam.ServicePrincipal('ssm.amazonaws.com'),
});

new eks.AccessEntry(this, 'HybridNodeAccess', {
  cluster,
  principal: hybridNodeRole.roleArn,
  accessEntryType: eks.AccessEntryType.HYBRID_LINUX,  // EKS Hybrid Nodes用
  accessPolicies: [],
});

// grantAccess()メソッドでもアクセスエントリタイプを指定可能
cluster.grantAccess('NodeRoleAccess', autoModeNodeRole.roleArn, [
  eks.AccessPolicy.fromAccessPolicyName('AmazonEKSClusterAdminPolicy', {
    accessScopeType: eks.AccessScopeType.CLUSTER,
  }),
], eks.AccessEntryType.EC2);  // 第4引数でアクセスエントリタイプを指定

Glue: 型安全なパーティションプロジェクション設定 (#35660)

Glueテーブルのパーティションプロジェクション設定が型安全なファクトリーメソッドパターンで再設計されました。これまで文字列ベースだった設定がTypeScriptの型システムで検証されるようになり、設定ミスをコンパイル時に検出できます。

利用可能なファクトリーメソッド:

  • PartitionProjectionConfiguration.integer(): INTEGER型プロジェクション
  • PartitionProjectionConfiguration.date(): DATE型プロジェクション
  • PartitionProjectionConfiguration.enum(): ENUM型プロジェクション
  • PartitionProjectionConfiguration.injected(): INJECTED型プロジェクション
import * as glue from '@aws-cdk/aws-glue-alpha';
import * as s3 from 'aws-cdk-lib/aws-s3';

const database = new glue.Database(this, 'Database', {
  databaseName: 'my_database',
});

const bucket = new s3.Bucket(this, 'DataBucket');

// 型安全なパーティションプロジェクション設定を持つテーブル
const table = new glue.S3Table(this, 'Table', {
  database,
  tableName: 'my_table',
  bucket,
  columns: [
    { name: 'id', type: glue.Schema.STRING },
    { name: 'value', type: glue.Schema.DOUBLE },
  ],
  dataFormat: glue.DataFormat.PARQUET,

  // 新機能: 型安全なパーティションプロジェクション設定
  partitionKeys: [
    { name: 'year', type: glue.Schema.STRING },
    { name: 'month', type: glue.Schema.STRING },
    { name: 'region', type: glue.Schema.STRING },
  ],
  enablePartitionProjection: true,
  partitionProjectionConfiguration: {
    // INTEGER型: 数値範囲でパーティションを生成
    year: glue.PartitionProjectionConfiguration.integer({
      range: {
        min: 2020,           // 最小値
        max: 2030,           // 最大値
      },
      interval: 1,           // 増分(デフォルト: 1)
    }),

    // DATE型: 日付範囲でパーティションを生成
    month: glue.PartitionProjectionConfiguration.date({
      range: {
        min: '2020-01-01',   // 開始日
        max: 'NOW',          // 終了日(NOWで現在日時)
      },
      format: 'yyyy-MM',     // 日付フォーマット
      interval: 1,           // 増分
      intervalUnit: glue.PartitionProjectionIntervalUnit.MONTHS,  // 増分の単位
    }),

    // ENUM型: 固定値のリストでパーティションを生成
    region: glue.PartitionProjectionConfiguration.enum({
      values: [              // 許可される値のリスト
        'us-east-1',
        'us-west-2',
        'ap-northeast-1',
        'eu-west-1',
      ],
    }),
  },

  // パーティションパスのパターン
  partitionProjectionStorageLocationTemplate:
    's3://my-bucket/data/year=${year}/month=${month}/region=${region}/',
});

// INJECTED型: 実行時に値が注入されるパーティション
const injectedTable = new glue.S3Table(this, 'InjectedTable', {
  database,
  tableName: 'injected_table',
  bucket,
  columns: [
    { name: 'data', type: glue.Schema.STRING },
  ],
  dataFormat: glue.DataFormat.JSON,
  partitionKeys: [
    { name: 'tenant_id', type: glue.Schema.STRING },
  ],
  enablePartitionProjection: true,
  partitionProjectionConfiguration: {
    // INJECTED型: クエリ実行時にWHERE句で指定される値を使用
    tenant_id: glue.PartitionProjectionConfiguration.injected(),
  },
});

L1 CloudFormationリソース定義の更新 (#36834)

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

バグ修正

Core: JavaでCloudFormation組み込み関数トークンが正しく検出されない問題を修正 (#36843)

v2.237.1で修正された同じ問題のバックポートです。jsii-pacmakのバージョンが更新され、JavaでFn::Ifなどの条件式を文字列連結した際にトークンとして正しく認識されるようになりました。

Events: Match.anyOf()で生の文字列をサポート (#36908)

Match.anyOf()メソッドが生の文字列を引数として受け付けるようになりました。v2.237.0で導入されたリグレッションにより、Match.anyOf("string1", "string2")のような呼び出しがエラーになっていた問題が修正されました。

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

// 修正後: 生の文字列を直接指定可能
const rule = new events.Rule(this, 'Rule', {
  eventPattern: {
    source: ['aws.ec2'],
    detailType: events.Match.anyOf('EC2 Instance State-change Notification', 'EC2 Spot Instance Interruption'),
    detail: {
      state: events.Match.anyOf('running', 'stopped', 'terminated'),
    },
  },
});

// 他のMatchメソッドの結果との混合も可能
const mixedRule = new events.Rule(this, 'MixedRule', {
  eventPattern: {
    detail: {
      status: events.Match.anyOf(
        'active',                          // 生の文字列
        events.Match.prefix('pending-'),   // Matchメソッドの結果
      ),
    },
  },
});

IAM: IOidcProviderのopenIdConnectProviderArnとopenIdConnectProviderIssuerの非推奨を解除 (#36859)

IOidcProviderインターフェースのopenIdConnectProviderArnopenIdConnectProviderIssuerプロパティが誤って非推奨とマークされていた問題が修正されました。これらのプロパティは引き続き使用可能で、EKSコンストラクトとOidcProviderNativeで警告なく使用できます。

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

新機能

EKS v2 Alpha: bootstrapSelfManagedAddonsのサポート (#36740)

EKS v2 AlphaモジュールでbootstrapSelfManagedAddonsプロパティがサポートされました。EKS v1で利用可能だったこの機能がv2でも使えるようになりました。

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

// セルフマネージドアドオンのブートストラップを無効化
const cluster = new eks.Cluster(this, 'Cluster', {
  version: eks.KubernetesVersion.V1_31,
  // 新機能: セルフマネージドアドオンのブートストラップを制御
  bootstrapSelfManagedAddons: false,  // デフォルト: true
});

bootstrapSelfManagedAddonsfalseに設定すると、クラスター作成時にkube-proxy、CoreDNS、VPC CNIなどのデフォルトアドオンがインストールされません。代わりにEKSマネージドアドオンを使用する場合に有用です。

EKS v2 Alpha: EKS Hybrid Nodesのサポート (#36749)

EKS v2 Alphaモジュールで、オンプレミスノードをEKSクラスターに接続するためのHybrid Nodes設定がサポートされました。

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

// EKS Hybrid Nodesを使用するクラスター
const cluster = new eks.Cluster(this, 'HybridCluster', {
  version: eks.KubernetesVersion.V1_31,

  // 新機能: リモートノードネットワーク設定
  remoteNodeNetworks: [
    {
      cidrs: ['10.100.0.0/16'],  // オンプレミスノードのCIDR範囲
    },
  ],

  // 新機能: リモートPodネットワーク設定(オプション)
  remotePodNetworks: [
    {
      cidrs: ['10.200.0.0/16'],  // オンプレミスPodのCIDR範囲
    },
  ],
});

注意: ノードCIDRとPod CIDRは重複してはいけません。バリデーションにより重複がある場合はエラーになります。

バグ修正

EKS v2 Alpha: kubectl ProviderとHandler関数で同じVPC設定を使用するよう修正 (#36735)

kubectl Provider関数とHandler関数が同じVPC設定を使用するようになりました。これまでProvider関数のVPC設定がHandler関数と異なる場合があり、接続の問題が発生する可能性がありました。

IVS Alpha: 統合テストにリージョン制約を追加 (#36851)

IVS Alphaモジュールの統合テストで、サポートされるリージョンの制約が追加されました。

Mixins Preview: Mixinが順序通りに適用されるよう修正 (#36847, #36877)

Mixins Previewモジュールで、Mixinが定義された順序通りに適用されるようになりました。MixinApplicatorでも同様の修正が行われています。

破壊的変更

Bedrock AgentCore: インターフェース拡張に新しいプロパティ実装が必要 (#36803)

@aws-cdk/aws-bedrock-agentcore-alphaモジュールの複数のインターフェースに新しい必須プロパティが追加されました。これらのインターフェースを実装している場合は、対応するゲッターを追加する必要があります。

影響を受けるインターフェース:

  • IGateway: gatewayRefゲッターが必要
  • IGatewayTarget: gatewayTargetRefゲッターが必要
  • IMemory: memoryRefゲッターが必要
  • IBedrockAgentRuntime: runtimeRefゲッターが必要
  • IRuntimeEndpoint: runtimeEndpointRefゲッターが必要
  • IBrowserCustom: browserCustomRefゲッターが必要
  • ICodeInterpreterCustom: codeInterpreterCustomRefゲッターが必要

まとめ

AWS CDK v2.238.0は、多くの新機能と改善が含まれたリリースです。

主なハイライト:

  • ネストされたスタックでのインデント抑制: テンプレートサイズ削減が容易に
  • Firehoseフローログ送信先: VPCフローログをFirehoseに直接送信可能
  • EKS Removal Policy: 全EKS構成要素でスタック削除時の振る舞いを制御可能
  • EKSアクセスエントリタイプ拡張: Auto Mode、Hybrid Nodes、HyperPodに対応
  • Glue型安全パーティションプロジェクション: 設定ミスをコンパイル時に検出

Alphaモジュールでは、EKS v2 Alphaが大幅に強化され、bootstrapSelfManagedAddonsとHybrid Nodesのサポートが追加されました。

Bedrock AgentCore Alphaモジュールを使用している場合は、破壊的変更に注意してインターフェースの実装を更新してください。