概要
AWS CDK v2.220.0 では、AWS Batch でデフォルトインスタンスクラスのサポート、Kinesis ストリームでのシャードレベルメトリクス、Lambda Function URL のデュアル認証対応、EKS クラスタの削除ポリシーサポートなど、多数の新機能が追加されました。また、L1 リソース定義の更新に伴う破壊的変更も含まれています。
破壊的変更
このリリースでは、L1 リソースの自動生成により、CloudFormation のリソーススキーマに合わせた以下の破壊的変更が含まれています:
- aws-neptune:
AWS::Neptune::EventSubscriptionのSnsTopicArnプロパティが必須になりました - aws-neptune:
AWS::Neptune::EventSubscriptionのId属性が削除されました - aws-servicecatalog:
AWS::ServiceCatalog::PortfolioShareのId属性が削除されました - aws-lex:
AWS::Lex::ResourcePolicyのResourceArnプロパティが変更不可(immutable)になりました
これらの変更は CloudFormation の実際の状態をより正確に反映するためのものです。
新機能
AWS Batch: デフォルトインスタンスクラスのサポート
AWS Batch の EC2 マネージド型コンピュート環境で、デフォルトインスタンスクラスがサポートされました。これに伴い、useOptimalInstanceClasses プロパティは非推奨となりました。
AWS は 2025 年 11 月初旬に optimal の動作を変更する予定です。新しいデフォルトインスタンスクラスを使用することで、より柔軟なインスタンスタイプの選択が可能になります。
import * as batch from 'aws-cdk-lib/aws-batch';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'Vpc');
const computeEnvironment = new batch.ManagedEc2EcsComputeEnvironment(this, 'ComputeEnv', {
vpc,
// デフォルトインスタンスクラスを使用(推奨)
// useOptimalInstanceClasses は非推奨になりました
});
Kinesis: シャードレベルメトリクス
Kinesis ストリームでシャードレベルのメトリクスを有効化できるようになりました。これにより、個々のシャードのパフォーマンスを詳細に監視できます。
import * as kinesis from 'aws-cdk-lib/aws-kinesis';
const stream = new kinesis.Stream(this, 'MyStream', {
streamName: 'my-stream',
// シャードレベルメトリクスを有効化
shardLevelMetrics: [
kinesis.ShardLevelMetrics.INCOMING_BYTES, // 受信バイト数
kinesis.ShardLevelMetrics.INCOMING_RECORDS, // 受信レコード数
kinesis.ShardLevelMetrics.OUTGOING_BYTES, // 送信バイト数
kinesis.ShardLevelMetrics.OUTGOING_RECORDS, // 送信レコード数
kinesis.ShardLevelMetrics.WRITE_PROVISIONED_THROUGHPUT_EXCEEDED, // 書き込みスループット超過
kinesis.ShardLevelMetrics.READ_PROVISIONED_THROUGHPUT_EXCEEDED, // 読み取りスループット超過
kinesis.ShardLevelMetrics.ITERATOR_AGE_MILLISECONDS, // イテレーター経過時間
],
});
Lambda: Function URL のデュアル認証対応
Lambda Function URL でデュアル認証がサポートされました。これは Lambda 側の破壊的変更に対応するもので、Function URL 経由での呼び出しには lambda:InvokeFunction と lambda:InvokeFunctionUrl の両方の権限が必要になります。
CDK では、以下の変更により既存のコードが引き続き動作するようになっています:
import * as lambda from 'aws-cdk-lib/aws-lambda';
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// Function URL を作成(デュアル認証が自動的に適用されます)
const fnUrl = fn.addFunctionUrl({
authType: lambda.FunctionUrlAuthType.NONE,
});
// grantInvokeUrl はデュアル認証を付与します
// lambda:InvokeFunctionUrl に加えて、lambda:InvokeFunction (条件付き) も付与されます
// 条件: lambda:InvokedViaFunctionUrl = true
// この権限は Function URL 経由の呼び出しのみを許可し、直接呼び出しは許可しません
fnUrl.grantInvokeUrl(someRole);
新しい条件キー lambda:InvokedViaFunctionUrl により、Function URL 経由の呼び出しのみを許可する細かい権限制御が可能になります。
Amplify: ビルドコンピュートタイプのサポート
Amplify Hosting でカスタマイズ可能なビルドインスタンスがサポートされました。
import * as amplify from 'aws-cdk-lib/aws-amplify';
const app = new amplify.App(this, 'MyApp', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: 'my-org',
repository: 'my-repo',
oauthToken: cdk.SecretValue.secretsManager('github-token'),
}),
// ビルドコンピュートタイプを指定
buildComputeType: amplify.BuildComputeType.LARGE, // SMALL (デフォルト) または LARGE
});
CloudFront Origins: Lambda Function URL の IP アドレスタイプ
Lambda Function URL をオリジンとして使用する際に、IP アドレスタイプを設定できるようになりました。IPv4、IPv6、デュアルスタックから選択できます。
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
import * as lambda from 'aws-cdk-lib/aws-lambda';
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
const fnUrl = fn.addFunctionUrl({
authType: lambda.FunctionUrlAuthType.NONE,
});
const distribution = new cloudfront.Distribution(this, 'Distribution', {
defaultBehavior: {
origin: new origins.FunctionUrlOrigin(fnUrl, {
// IP アドレスタイプを指定
ipAddressType: origins.OriginIpAddressType.DUALSTACK, // IPV4、IPV6、DUALSTACK から選択
// デフォルト: IPV4
}),
},
});
EC2: Bedrock AgentCore の VPC エンドポイント
Amazon Bedrock AgentCore の VPC エンドポイントが追加されました(2025 年 9 月 25 日に発表)。
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'Vpc');
// Bedrock AgentCore VPC エンドポイント
new ec2.InterfaceVpcEndpoint(this, 'BedrockAgentCore', {
vpc,
service: ec2.InterfaceVpcEndpointAwsService.BEDROCK_AGENTCORE,
});
// Bedrock AgentCore Gateway VPC エンドポイント
new ec2.InterfaceVpcEndpoint(this, 'BedrockAgentCoreGateway', {
vpc,
service: ec2.InterfaceVpcEndpointAwsService.BEDROCK_AGENTCORE_GATEWAY,
});
EC2: Client VPN の自動再接続設定
Client VPN エンドポイントで、セッションタイムアウト時の自動再接続を制御できるようになりました。
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const endpoint = new ec2.ClientVpnEndpoint(this, 'Endpoint', {
vpc,
serverCertificateArn: 'arn:aws:acm:...',
clientCidrBlock: '10.0.0.0/16',
// セッションタイムアウト時に自動再接続するか
disconnectOnSessionTimeout: false, // false: 自動再接続する(デフォルト)、true: 切断する
});
EKS: クラスタの削除ポリシーサポート
EKS クラスタに削除ポリシーを設定できるようになりました。これにより、スタック削除時のクラスタと関連リソースの動作を制御できます。
import * as eks from 'aws-cdk-lib/aws-eks';
import * as cdk from 'aws-cdk-lib';
const cluster = new eks.Cluster(this, 'Cluster', {
version: eks.KubernetesVersion.V1_30,
// 削除ポリシーを設定
removalPolicy: cdk.RemovalPolicy.RETAIN, // スタック削除時にクラスタを保持
// removalPolicy: cdk.RemovalPolicy.DESTROY, // スタック削除時にクラスタも削除
});
この削除ポリシーは、EKS クラスタ本体、IAM ロール、ノードグループ、セキュリティグループ、VPC リソース、カスタムリソースなど、クラスタによって作成されるすべての CloudFormation リソースに適用されます。
CloudWatch Logs: 変換済みログのメトリクスフィルタ
メトリクスフィルタで変換済みログに対してフィルタを適用できるようになりました。
import * as logs from 'aws-cdk-lib/aws-logs';
const logGroup = new logs.LogGroup(this, 'LogGroup');
const metricFilter = new logs.MetricFilter(this, 'MetricFilter', {
logGroup,
filterPattern: logs.FilterPattern.literal('[...]'),
metricNamespace: 'MyApp',
metricName: 'ErrorCount',
// 変換済みログに対してメトリクスフィルタを適用
applyOnTransformedLogs: true, // デフォルト: false
});
OpenSearch: OpenSearch 3.1 エンジンバージョン
OpenSearch 3.1 エンジンバージョンがサポートされました。
import * as opensearch from 'aws-cdk-lib/aws-opensearchservice';
const domain = new opensearch.Domain(this, 'Domain', {
version: opensearch.EngineVersion.OPENSEARCH_3_1, // OpenSearch 3.1
capacity: {
dataNodes: 2,
dataNodeInstanceType: 'r6g.large.search',
},
});
Route53: Private Hosted Zone の属性からのインポート
PrivateHostedZone に fromPrivateHostedZoneAttributes メソッドが追加されました。これは PublicHostedZone と同様の機能です。
import * as route53 from 'aws-cdk-lib/aws-route53';
// Private Hosted Zone を属性からインポート
const hostedZone = route53.PrivateHostedZone.fromPrivateHostedZoneAttributes(
this,
'HostedZone',
{
hostedZoneId: 'Z1234567890ABC',
zoneName: 'internal.example.com',
},
);
// zoneName プロパティを参照可能
console.log(hostedZone.zoneName);
Synthetics: Puppeteer 11 以降でのルートレベルスクリプト
Synthetics Canary で、Puppeteer 11.0 以降のランタイムを使用する場合、ルートディレクトリにスクリプトファイルを配置できるようになりました。
従来の構造(引き続きサポート):
Canary/
nodejs/
node_modules/
index.js
新しい構造(Puppeteer 11.0 以降):
Canary/
index.js
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
const canary = new synthetics.Canary(this, 'Canary', {
runtime: synthetics.Runtime.SYNTHETICS_NODEJS_PUPPETEER_11_0,
test: synthetics.Test.custom({
// index.js をルートディレクトリに配置可能
handler: 'index.handler',
code: synthetics.Code.fromAsset('canary'),
}),
schedule: synthetics.Schedule.rate(cdk.Duration.minutes(5)),
});
バグ修正
CloudWatch: AnomalyDetectionAlarm のメトリクス期間
AnomalyDetectionAlarm でメトリクスの期間が正しく反映されない問題が修正されました。
ECS: マネージドインスタンスのタスク定義検証
ECS マネージドインスタンス向けのタスク定義の検証が更新されました。
Lambda (Node.js): Bun を 1.2.23 にアップデート
ARM64 サポートのため、aws-lambda-nodejs で使用される Bun が 1.2.23 にアップデートされました。
S3: BucketPolicy.fromCfnBucketPolicy の合成エラー
BucketPolicy.fromCfnBucketPolicy() で発生していた合成エラーが修正されました。
S3 Tables: 読み取りアクセスロールの権限
S3 Tables のテーブルバケット読み取りアクセスロールで、s3tables:ListNamespaces の権限が誤っていた問題が修正されました。
Alpha モジュール
Amplify (Alpha): 空の customResponseHeaders 配列の処理
@aws-cdk/aws-amplify-alpha モジュールで、空の customResponseHeaders 配列を正しく処理できるようになりました。
まとめ
AWS CDK v2.220.0 は、AWS Batch のデフォルトインスタンスクラス、Kinesis のシャードレベルメトリクス、Lambda Function URL のデュアル認証など、多数の新機能を提供します。特に、EKS クラスタの削除ポリシーサポートは、本番環境での運用において重要な機能です。
L1 リソースの破壊的変更については、Neptune、ServiceCatalog、Lex を使用している場合は、アップグレード前に影響を確認することをお勧めします。
詳細については、リリースノートをご確認ください。