概要
AWS CDK v2.230.0では、API GatewayがLambdaレスポンスストリーミングに対応し、EventBridgeのL2インターフェースがCfnRuleでも利用可能になりました。また、alphaモジュールではImageBuilderのImagePipelineとLifecyclePolicyのL2コンストラクトが追加され、Mixinsプレビューモジュールでは47リソース向けのログ配信機能が実装されました。
新機能
API Gateway: レスポンスストリーミングのサポート
API Gatewayで、Lambda統合を使用したレスポンスストリーミング機能がサポートされました。この機能により、クライアントにレスポンスペイロードを段階的にストリーミングすることで、REST APIの応答性を大幅に向上できます。
主な変更点:
IntegrationOptionsにresponseTransferModeプロパティを追加- Lambda統合でストリーミング用のURI(
/response-streaming-invocations)を自動生成
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import * as lambda from 'aws-cdk-lib/aws-lambda';
// レスポンスストリーミングを有効化したLambda関数
const streamingFunction = new lambda.Function(this, 'StreamingFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// API Gatewayでストリーミング統合を設定
const api = new apigateway.RestApi(this, 'StreamingApi', {
restApiName: 'Streaming API',
});
api.root.addMethod('GET', new apigateway.LambdaIntegration(streamingFunction, {
// レスポンスストリーミングを有効化
responseTransferMode: apigateway.ResponseTransferMode.STREAM,
}));
この機能により、大きなペイロードの生成や処理時間の長いAPIでも、クライアントが最初のバイトを早く受信できるようになります。Lambda統合では、URIが自動的に2021-11-15/functions/${functionArn}/response-streaming-invocationsに設定されます。
参考: Building Responsive APIs with Amazon API Gateway Response Streaming
PR: #36155
EventBridge: L2のEventPatternがCfnRuleで利用可能に
L2のEventPatternインターフェースが、L1のCfnRuleクラスでも正しく解釈されるようになりました。これまで、L2とL1でイベントパターンの記述方法が異なり(特にdetailTypeとdetail-typeの違い)、混乱を招いていましたが、このアップデートで統一されました。
import * as events from 'aws-cdk-lib/aws-events';
// L2のEventPatternインターフェースを使用
const eventPattern: events.EventPattern = {
source: ['aws.ec2'],
detailType: ['EC2 Instance State-change Notification'], // L2形式(キャメルケース)
detail: {
state: ['running'],
},
};
// L1のCfnRuleでもL2のEventPatternを直接使用可能
new events.CfnRule(this, 'CfnRule', {
eventPattern: eventPattern, // detailType が自動的に detail-type に変換される
targets: [
{
arn: 'arn:aws:lambda:us-east-1:123456789012:function:MyFunction',
id: 'Target1',
},
],
});
この変更により、L1とL2の両方で同じイベントパターンオブジェクトを再利用でき、コードの一貫性が向上します。内部的に、CDKがdetailTypeをdetail-typeに自動変換するため、開発者はL2の型安全なインターフェースを使用できます。
PR: #36191
CloudFormation リソース定義の更新
L1コンストラクトのCloudFormationリソース定義が最新版に更新されました。
Alphaモジュール (2.230.0-alpha.0)
ImageBuilder: Image Pipeline L2コンストラクトの追加
EC2 Image BuilderのImage Pipelineを作成するための新しいL2コンストラクトが追加されました。この高レベルコンストラクトにより、AMIやコンテナイメージのビルド・配布パイプラインを簡単に構築できます。
import * as imagebuilder from '@aws-cdk/aws-imagebuilder-alpha';
import * as events from 'aws-cdk-lib/aws-events';
import * as cdk from 'aws-cdk-lib';
const imagePipeline = new imagebuilder.ImagePipeline(this, 'ImagePipeline-AMI', {
// パイプライン名と説明
imagePipelineName: 'test-image-pipeline',
description: 'this is an image pipeline description.',
// イメージレシピ(ビルド設定)
recipe: imageRecipe,
// インフラストラクチャ設定(ビルド環境)
infrastructureConfiguration,
// 配布設定(AMI配布先リージョンなど)
distributionConfiguration: amiDistributionConfiguration,
// パイプラインを有効化
enabled: true,
// 実行ロール
executionRole,
// スケジュール設定
schedule: {
expression: events.Schedule.expression('cron(0 7 ? * mon *)'), // 毎週月曜7:00に実行
timezone: cdk.TimeZone.PST8PDT, // タイムゾーン
startCondition: imagebuilder.ScheduleStartCondition.EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE, // 依存関係の更新時にも実行
autoDisableFailureCount: 5, // 5回連続失敗で自動無効化
},
// ワークフロー(ビルドプロセス)
workflows: [{
workflow: imagebuilder.AwsManagedWorkflow.buildImage(this, 'BuildImage')
}],
// ログ設定
imageLogGroup, // イメージビルドログ
imagePipelineLogGroup, // パイプライン実行ログ
// その他のオプション
enhancedImageMetadataEnabled: true, // 拡張メタデータを有効化
imageTestsEnabled: false, // イメージテストを無効化
imageScanningEnabled: false, // 脆弱性スキャンを無効化
});
主なプロパティ:
recipe: イメージレシピ(ベースイメージとコンポーネントの定義)infrastructureConfiguration: ビルド環境の設定distributionConfiguration: イメージ配布先の設定schedule: 自動実行スケジュール(cron式、タイムゾーン、開始条件)workflows: ビルドとテストのワークフローenhancedImageMetadataEnabled: イメージのメタデータ収集を有効化imageTestsEnabled: ビルド後の自動テストを有効化imageScanningEnabled: 脆弱性スキャンを有効化
PR: #36153
ImageBuilder: Lifecycle Policy L2コンストラクトの追加
EC2 Image Builderで作成したイメージのライフサイクル管理を行うための新しいL2コンストラクトが追加されました。段階的な非推奨化・無効化・削除ポリシーを設定できます。
import * as imagebuilder from '@aws-cdk/aws-imagebuilder-alpha';
import { Duration } from 'aws-cdk-lib';
const graduatedPolicy = new imagebuilder.LifecyclePolicy(this, 'GraduatedPolicy', {
// ポリシーの対象リソースタイプ
resourceType: imagebuilder.LifecyclePolicyResourceType.AMI_IMAGE,
// 段階的なライフサイクルルール
details: [
{
// ステージ1: 30日後に非推奨化
action: {
type: imagebuilder.LifecyclePolicyActionType.DEPRECATE, // 非推奨マークを付与
includeAmis: true, // AMIに適用
},
filter: {
age: Duration.days(30), // 作成から30日経過
retainAtLeast: 5, // 最新5つは保持
}
},
{
// ステージ2: 60日後に無効化
action: {
type: imagebuilder.LifecyclePolicyActionType.DISABLE, // AMIを無効化
includeAmis: true, // AMIに適用
},
filter: {
age: Duration.days(60), // 作成から60日経過
retainAtLeast: 3, // 最新3つは保持
}
},
{
// ステージ3: 90日後に削除
action: {
type: imagebuilder.LifecyclePolicyActionType.DELETE, // 完全削除
includeAmis: true, // AMIを削除
includeSnapshots: true, // EBSスナップショットも削除
},
filter: {
age: Duration.days(90), // 作成から90日経過
retainAtLeast: 1, // 最新1つは保持
}
}
],
// リソース選択条件
resourceSelection: {
tags: { Environment: 'production' }, // タグでフィルタリング
}
});
主なプロパティ:
resourceType: ポリシーの対象(AMI、コンテナイメージなど)details: 段階的なアクションルールの配列action.type: アクションタイプ(DEPRECATE、DISABLE、DELETE)action.includeAmis: AMIに適用するかaction.includeSnapshots: スナップショットも削除するかfilter.age: リソースの経過日数filter.retainAtLeast: 最低保持数
resourceSelection: タグによるリソースのフィルタリング
このポリシーにより、古いイメージを自動的にクリーンアップし、ストレージコストを削減できます。
PR: #36152
Mixins Preview: 47リソース向けログ配信機能の追加
@aws-cdk/mixins-previewモジュールで、47のリソースに対するログ配信(LogDelivery)Mixinが追加されました。この機能により、CloudFront、VPC、ELBなどのAWSサービスから、S3、CloudWatch Logs、Kinesis Firehose、X-Rayへのログ配信を簡単に設定できます。
import '@aws-cdk/mixins-preview/with';
import * as cloudfrontMixins from '@aws-cdk/mixins-preview/aws_cloudfront/mixins';
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as logs from 'aws-cdk-lib/aws-logs';
import * as s3 from 'aws-cdk-lib/aws-s3';
// CloudFrontディストリビューションを作成
declare const bucket: s3.Bucket;
const distribution = new cloudfront.Distribution(this, 'Distribution', {
defaultBehavior: {
origin: origins.S3BucketOrigin.withOriginAccessControl(bucket),
},
});
// CloudWatch Logsへのログ配信
const logGroup = new logs.LogGroup(this, 'DeliveryLogGroup');
distribution
.with(cloudfrontMixins.CfnDistributionLogsMixin.CONNECTION_LOGS.toLogGroup(logGroup));
// S3へのログ配信
const logBucket = new s3.Bucket(this, 'LogBucket');
distribution
.with(cloudfrontMixins.CfnDistributionLogsMixin.CONNECTION_LOGS.toS3Bucket(logBucket, {
prefix: 'cloudfront-logs/', // ログのプレフィックス
permissionsVersion: 'V2', // S3バケットポリシーのバージョン
}));
サポートされる配信先:
- CloudWatch Logs: ログをCloudWatch Logsに配信(自動的にリソースポリシーを設定)
- S3: ログをS3バケットに配信(バケットポリシーを自動設定、V1/V2権限対応)
- Kinesis Firehose: ログをFirehoseに配信(LogDeliveryタグを自動追加)
- X-Ray: トレースデータをX-Rayに配信(リソースポリシーを自動設定)
対応サービス(一部):
- CloudFront
- VPC Flow Logs
- Application Load Balancer
- Network Load Balancer
- API Gateway
- その他42サービス
この機能により、手動でのIAM権限設定やリソースポリシー設定が不要になり、ログ配信の設定が大幅に簡素化されます。
Mixins Preview: EventBridgeイベントパターン生成ヘルパー(26サービス対応)
@aws-cdk/mixins-previewモジュールで、26のAWSサービス向けにEventBridgeイベントパターンを生成するヘルパークラスが追加されました。この機能により、リソースから直接、型安全なイベントパターンを生成できます。
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
import { BucketEvents } from '@aws-cdk/mixins-preview/aws_s3/events';
// S3バケットを作成
const bucket = new s3.Bucket(this, 'Bucket');
// バケットイベントのヘルパーを取得
const bucketEvents = BucketEvents.fromBucket(bucket);
// Lambda関数をターゲットに設定
declare const fn: lambda.Function;
// S3オブジェクト作成イベントのルールを作成
new events.Rule(this, 'Rule', {
eventPattern: bucketEvents.objectCreatedPattern({
// イベント詳細のフィルタリング(型安全)
object: {
key: ['uploads/*'], // キーのプレフィックスでフィルタ
},
}),
targets: [new targets.LambdaFunction(fn)],
});
主な特徴:
- 型安全: リソース固有のイベント詳細が型定義されている
- リソース参照: リソースから直接イベントパターンを生成(
bucketEvents.fromBucket(bucket)) - 自動設定:
sourceやdetailTypeが自動的に設定される - リソースID自動補完: イベントパターンにリソースIDが自動的に含まれる
対応サービス(26サービス):
- S3
- EC2
- Lambda
- DynamoDB
- RDS
- その他21サービス
この機能により、EventBridgeルールの作成が簡単になり、タイポや設定ミスを防げます。
PR: #36121
Bedrock Agent Core (Alpha): ランタイム権限の改善
Bedrock Agent Coreのalphaモジュールで、grantInvokeXXXメソッドの権限付与が改善されました。ランタイム呼び出しに必要なリソース権限が正しく設定されるようになります。
PR: #35864
バグ修正
ECS: Cluster.grantTaskProtection メソッドのARN生成不具合を修正
Cluster.grantTaskProtectionメソッドで生成されるARNが誤っていた問題を修正しました。これにより、ECSタスク保護機能のIAM権限が正しく付与されるようになります。
影響範囲: ECSクラスターでタスク保護機能を使用している場合
PR: #36207
ECS Patterns: フィーチャーフラグ未設定時のターゲットグループID変更問題を修正
ecs-patternsモジュールで、特定のフィーチャーフラグを設定していない場合にターゲットグループIDが予期せず変更される問題を修正しました。これにより、既存スタックの更新時に不要なリソース置き換えが発生しなくなります。
影響範囲: ecs-patternsモジュールのロードバランサーパターンを使用している場合
PR: #36199
EventBridge Scheduler: ScheduleGroup.grant* メソッドのARN生成不具合を修正
ScheduleGroup.grant*メソッドで生成されるARNが誤っていた問題を修正しました。これにより、EventBridge Schedulerの権限付与が正しく機能するようになります。
影響範囲: EventBridge Schedulerでスケジュールグループの権限を付与している場合
PR: #36175
Mixins Preview: AutoDeleteObjects Mixin のファイル参照エラーを修正
AutoDeleteObjects Mixinで、カスタムリソースハンドラーのファイルが見つからないエラーが発生していた問題を修正しました。
PR: #36188
Mixins Preview: LogDelivery設定時のリソースポリシー重複エラーを修正
LogDeliveryを設定する際に、「ResourcePolicy with this name already exists」エラーが発生していた問題を修正しました。
PR: #36195
Mixins Preview: S3LogsDeliveryProps.permissionsVersion の型エラーを修正
S3LogsDeliveryProps.permissionsVersionプロパティで文字列リテラル型が使用できなかった問題を修正しました。
PR: #36197
まとめ
AWS CDK v2.230.0は、API GatewayのレスポンスストリーミングサポートやEventBridgeの型安全性向上など、開発者体験を大幅に向上させる機能を提供します。また、alphaモジュールでは、ImageBuilderのL2コンストラクトが拡充され、インフラストラクチャコードでのイメージビルドパイプラインの構築が容易になりました。
Mixinsプレビューモジュールでは、47リソース向けのログ配信機能と26サービス向けのEventBridgeイベントパターン生成機能が追加され、AWSサービスの統合がさらに簡素化されました。
バグ修正では、ECS、EventBridge Scheduler、Mixinsモジュールの権限管理やARN生成の問題が解決され、より安定した運用が可能になります。
これらの新機能とバグ修正により、AWS CDKを使用したインフラストラクチャ開発がより効率的かつ安全になります。ぜひ最新バージョンにアップグレードして、新機能をお試しください。