Back to Releases
v2.216.0 2025年9月22日

AWS CDK v2.216.0 リリース解説

WebSocket APIのスキーマ検証無効化、CloudFrontのレスポンス完了タイムアウト設定、ALB/NLBターゲットグループのヘルスチェック属性、EventBridgeのロギング設定、Route53のHTTPS/SVCBレコードサポートなど、多数の機能追加が実施されました。

apigatewayv2cloudfrontelasticloadbalancingv2eventsroute53stepfunctionskmssecretsmanager

概要

AWS CDK v2.216.0では、API Gateway WebSocketのスキーマ検証制御、CloudFrontのレスポンスタイムアウト設定、ロードバランサーのヘルスチェック詳細制御、EventBridgeのロギング機能、Route53のHTTPS/SVCBレコードサポート、EMRのEBS設定拡張など、幅広いサービスで重要な機能追加が行われました。また、KMSとSecrets Managerでの重要なバグ修正も含まれています。

新機能

API Gateway v2: WebSocket APIのスキーマ検証無効化オプション

WebSocket APIで、リクエストのスキーマ検証を無効化するオプションdisableSchemaValidationが追加されました。これにより、スキーマ検証をスキップしてパフォーマンスを向上させたり、柔軟なメッセージフォーマットを許可できます。

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

const webSocketApi = new apigatewayv2.WebSocketApi(this, 'MyWebSocketApi', {
  apiName: 'MyWebSocketApi',
  // スキーマ検証を無効化(デフォルト: false)
  disableSchemaValidation: true,
});

この機能は以下のユースケースで有用です:

  • スキーマ検証のオーバーヘッドを削減してパフォーマンスを向上
  • 動的なメッセージフォーマットを扱う場合
  • アプリケーション側で独自の検証ロジックを実装している場合

CloudFront Origins: レスポンス完了タイムアウト設定

CloudFrontのオリジン設定で、レスポンス完了タイムアウト(responseCompletionTimeout)を指定できるようになりました。これは、CloudFrontがオリジンからレスポンス全体を受信するまで待機する最大時間を制御します。

import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
import * as cdk from 'aws-cdk-lib';

const distribution = new cloudfront.Distribution(this, 'MyDistribution', {
  defaultBehavior: {
    origin: new origins.HttpOrigin('example.com', {
      // リードタイムアウト(デフォルト: 30秒)
      readTimeout: cdk.Duration.seconds(30),
      // レスポンス完了タイムアウト(1-3600秒の範囲)
      responseCompletionTimeout: cdk.Duration.seconds(300),
    }),
  },
});

Lambda Function URLsでも同様に設定可能です:

import * as lambda from 'aws-cdk-lib/aws-lambda';
import { FunctionUrlOrigin } from 'aws-cdk-lib/aws-cloudfront-origins';

declare const fn: lambda.Function;

const origin = new FunctionUrlOrigin(fn, {
  readTimeout: cdk.Duration.seconds(30),
  // responseCompletionTimeout は readTimeout 以上である必要があります
  responseCompletionTimeout: cdk.Duration.seconds(60),
});

重要な制約:

  • responseCompletionTimeoutは1秒から3600秒の範囲で指定
  • responseCompletionTimeoutreadTimeout以上である必要があります
  • Load BalancerやREST APIオリジンでも同じ制約が適用されます

この機能により、大容量ファイルのダウンロードや時間のかかるAPI応答に対応できます。

Elastic Load Balancing v2: ターゲットグループのヘルスチェック属性

ALBおよびNLBのターゲットグループで、詳細なヘルスチェック動作を制御する4つの属性が追加されました:

import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

declare const vpc: ec2.Vpc;

const targetGroup = new elbv2.ApplicationTargetGroup(this, 'MyTargetGroup', {
  vpc,
  port: 80,
  protocol: elbv2.ApplicationProtocol.HTTP,

  // Unhealthy State Routing: 最小ヘルシーターゲット設定
  unhealthyStateRoutingMinimumHealthyTargetsPercentage: 50,  // パーセンテージ指定
  unhealthyStateRoutingMinimumHealthyTargetsCount: 2,         // カウント指定

  // DNS Failover: 最小ヘルシーターゲット設定
  dnsFailoverMinimumHealthyTargetsPercentage: 70,            // パーセンテージ指定
  dnsFailoverMinimumHealthyTargetsCount: 3,                   // カウント指定
});

NLBでも同様に設定可能です:

const nlbTargetGroup = new elbv2.NetworkTargetGroup(this, 'MyNlbTargetGroup', {
  vpc,
  port: 80,
  protocol: elbv2.Protocol.TCP,

  // NLBでも同じヘルスチェック属性を使用可能
  unhealthyStateRoutingMinimumHealthyTargetsPercentage: 60,
  dnsFailoverMinimumHealthyTargetsCount: 1,
});

各属性の説明:

  • unhealthyStateRoutingMinimumHealthyTargetsPercentage: 非正常状態ルーティングの最小ヘルシーターゲット割合(0-100%)
  • unhealthyStateRoutingMinimumHealthyTargetsCount: 非正常状態ルーティングの最小ヘルシーターゲット数
  • dnsFailoverMinimumHealthyTargetsPercentage: DNSフェイルオーバーの最小ヘルシーターゲット割合(0-100%)
  • dnsFailoverMinimumHealthyTargetsCount: DNSフェイルオーバーの最小ヘルシーターゲット数

これらの属性により、ヘルシーターゲットが少ない場合でも、利用可能なターゲットにトラフィックをルーティングできます。

EventBridge: イベントバスのロギング設定

EventBridgeのイベントバスで、イベント処理の詳細なログ記録が可能になりました。ログレベルと詳細度を制御できます。

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

const eventBus = new events.EventBus(this, 'MyEventBus', {
  eventBusName: 'MyEventBus',

  // ロギング設定
  logConfig: {
    // ログレベル(OFF, ERROR, INFO, TRACE)
    level: events.Level.INFO,
    // イベント詳細の記録(NONE, FULL)
    includeDetail: events.IncludeDetail.FULL,
  },
});

ログレベルの選択肢:

  • Level.OFF: ログを記録しない(デフォルト)
  • Level.ERROR: エラー関連のログのみ記録
  • Level.INFO: エラーと主要な処理ステップを記録
  • Level.TRACE: すべての処理ステップを詳細に記録

詳細度の選択肢:

  • IncludeDetail.NONE: 詳細情報を含めない(デフォルト)
  • IncludeDetail.FULL: イベントとターゲットリクエストの完全な詳細を含める

この機能により、トラブルシューティングとデバッグが容易になります:

  • イベント処理の問題を迅速に特定
  • ターゲット送信の詳細なトレース
  • 本番環境でのエラー監視

Route53: HTTPS/SVCBレコードクラスの追加

Route53で、HTTPSおよびSVCBリソースレコードを型安全に作成できる新しいクラスが追加されました。これらのレコードは、サービスバインディングとHTTPS接続の最適化をDNSレベルで提供します。

HTTPSレコード(Alias Mode)

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

declare const zone: route53.IHostedZone;

// Alias Mode: 別のサービスへのエイリアス(priority = 0)
new route53.HttpsRecord(this, 'HttpsAlias', {
  zone,
  recordName: 'example.com',
  // ターゲットサービスを指定
  values: [route53.HttpsRecordValue.alias('service.example.com')],
});

HTTPSレコード(Service Mode)

// Service Mode: 具体的なサービスパラメータを指定(priority >= 1)
new route53.HttpsRecord(this, 'HttpsService', {
  zone,
  recordName: 'example.com',
  values: [
    route53.HttpsRecordValue.service({
      // 優先度(デフォルト: 1)
      priority: 1,
      // ターゲット名(デフォルト: '.')
      targetName: '.',
      // ALPN(Application-Layer Protocol Negotiation)プロトコル
      alpn: [route53.Alpn.H3, route53.Alpn.H2],
      // ポート番号
      port: 443,
      // IPv4ヒント(接続最適化用)
      ipv4hint: ['192.0.2.1', '192.0.2.2'],
      // IPv6ヒント
      ipv6hint: ['2001:db8::1', '2001:db8::2'],
      // 必須パラメータの指定
      mandatory: ['alpn', 'port'],
    }),
  ],
});

CloudFront Distributionへのエイリアス

import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as targets from 'aws-cdk-lib/aws-route53-targets';

declare const distribution: cloudfront.IDistribution;

// CloudFrontディストリビューションへのHTTPSエイリアス
new route53.HttpsRecord(this, 'CloudFrontHttps', {
  zone,
  recordName: 'cdn.example.com',
  // CloudFrontターゲットを使用
  target: route53.RecordTarget.fromAlias(
    new targets.CloudFrontTarget(distribution)
  ),
});

SVCBレコード

SVCBレコードは、HTTPSレコードと同じフォーマットを使用します:

// SVCBレコードの作成(HTTPS以外のサービス用)
new route53.SvcbRecord(this, 'SvcbRecord', {
  zone,
  recordName: '_service._tcp.example.com',
  values: [
    route53.SvcbRecordValue.service({
      priority: 1,
      targetName: 'service.example.com',
      port: 8080,
    }),
  ],
});

これらのレコードにより、以下が可能になります:

  • HTTP/3(QUIC)への自動アップグレード指示
  • 接続パラメータのDNSレベルでの配信
  • CloudFrontなどのCDNとの最適化された統合

Step Functions Tasks: EMR Create Clusterの拡張設定

EMRクラスター作成タスクで、EBSルートボリュームの詳細設定とマネージドスケーリングポリシーのサポートが追加されました。

import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
import * as cdk from 'aws-cdk-lib';

const emrCreateCluster = new tasks.EmrCreateCluster(this, 'CreateCluster', {
  instances: {
    instanceFleets: [
      {
        instanceFleetType: tasks.InstanceRoleType.MASTER,
        instanceTypeConfigs: [
          {
            instanceType: 'm5.xlarge',
            // EBSルートボリュームIOPS(gp3/io1/io2用)
            ebsRootVolumeIops: 3000,
            // EBSルートボリュームスループット(gp3用、125-1000 MiB/s)
            ebsRootVolumeThroughput: 125,
          },
        ],
      },
    ],
  },

  // マネージドスケーリングポリシー
  managedScalingPolicy: {
    computeLimits: {
      // ユニットタイプ(Instances, InstanceFleetUnits, VCPU)
      unitType: tasks.ComputeLimitsUnitType.INSTANCES,
      // 最小容量
      minimumCapacityUnits: 1,
      // 最大容量
      maximumCapacityUnits: 10,
      // 最大OnDemand容量
      maximumOnDemandCapacityUnits: 5,
      // 最大コア容量
      maximumCoreCapacityUnits: 8,
    },
  },

  name: 'MyEMRCluster',
  releaseLabel: 'emr-6.10.0',
});

新しいプロパティの説明:

  • ebsRootVolumeIops: EBSルートボリュームのIOPS(gp3/io1/io2タイプで指定可能)
  • ebsRootVolumeThroughput: EBSルートボリュームのスループット(gp3タイプで125-1000 MiB/s)
  • managedScalingPolicy: EMRマネージドスケーリングポリシー
    • unitType: スケーリング単位(インスタンス数、フリートユニット、vCPU)
    • minimumCapacityUnits: 最小容量
    • maximumCapacityUnits: 最大容量
    • maximumOnDemandCapacityUnits: 最大オンデマンド容量
    • maximumCoreCapacityUnits: 最大コア容量

この拡張により、以下が実現できます:

  • gp3ボリュームを使用した高性能でコスト効率の良いストレージ構成
  • EMRクラスターの自動スケーリングによるコスト最適化
  • ワークロードに応じた動的なリソース調整

バグ修正

CloudFormation Include: AWS::NoValue型検証エラーの修正

非文字列プロパティに対してAWS::NoValueを使用した際の型検証エラーが修正されました。これにより、条件付きリソース作成がより柔軟に行えるようになりました。

KMS: エイリアスからターゲットキーへのアクセス問題の修正

Alias.fromAliasName()でインポートしたKMSエイリアスで、aliasTargetKeyプロパティにアクセスできなかった問題が修正されました。

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

// エイリアス名からインポート
const alias = kms.Alias.fromAliasName(this, 'ImportedAlias', 'alias/my-key');

// ターゲットキーへのアクセスが可能に
const targetKey = alias.aliasTargetKey;

Secrets Manager: ローテーションLambdaのPythonバージョン更新

SecretRotationApplicationで作成されるLambda関数のランタイムが、EOL(End of Life)となったPython 3.9からPython 3.12に更新されました。これにより、セキュリティパッチとパフォーマンス改善が適用されます。

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

declare const secret: secretsmanager.Secret;
declare const dbInstance: rds.DatabaseInstance;

// ローテーションLambdaは自動的にPython 3.12を使用
secret.addRotationSchedule('RotationSchedule', {
  automaticallyAfter: cdk.Duration.days(30),
  hostedRotation: secretsmanager.HostedRotation.mysqlSingleUser(),
});

Secrets Manager: シークレット変換の修正

シークレット値の変換処理に関する問題が修正されました。

Kinesis Analytics: 非推奨警告の追加

aws-kinesisanalyticsパッケージからKinesis Analytics V2を使用することが非推奨となりました。代わりにaws-kinesisanalyticsv2パッケージの使用が推奨されます。

移行方法:

// 非推奨(aws-kinesisanalytics)
import * as kinesisanalytics from 'aws-cdk-lib/aws-kinesisanalytics';

// 推奨(aws-kinesisanalyticsv2)
import * as kinesisanalyticsv2 from 'aws-cdk-lib/aws-kinesisanalyticsv2';

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

このリリースでは、Alphaモジュールに関する特記事項はありません。

まとめ

AWS CDK v2.216.0では、幅広いAWSサービスで実用的な機能追加が行われました。特にAPI Gateway WebSocketのスキーマ検証制御、CloudFrontのタイムアウト設定、ロードバランサーのヘルスチェック詳細制御、EventBridgeのロギング機能は、本番環境での柔軟性と可観測性を大幅に向上させます。

Route53のHTTPS/SVCBレコードサポートにより、HTTP/3への移行やCDN統合がより簡単になり、EMRの拡張設定によりビッグデータワークロードの最適化が可能になりました。

また、KMSとSecrets Managerのバグ修正により、既存のコードの信頼性が向上しています。

詳細な変更内容については、公式リリースノートをご確認ください。