概要
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インターフェースのopenIdConnectProviderArnとopenIdConnectProviderIssuerプロパティが誤って非推奨とマークされていた問題が修正されました。これらのプロパティは引き続き使用可能で、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
});
bootstrapSelfManagedAddonsをfalseに設定すると、クラスター作成時に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モジュールを使用している場合は、破壊的変更に注意してインターフェースの実装を更新してください。