概要
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秒の範囲で指定responseCompletionTimeoutはreadTimeout以上である必要があります- 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のバグ修正により、既存のコードの信頼性が向上しています。
詳細な変更内容については、公式リリースノートをご確認ください。