Back to Releases
v2.222.0 2025年11月4日

AWS CDK v2.222.0 リリース解説

Lambda の新ランタイムサポート、NLB のセキュリティグループデフォルト作成、Kinesis Firehose の CloudWatch Logs プロセッサーなど、多数の新機能と改善を含むリリース

apigatewayapigatewayv2bedrockcoreelasticloadbalancingv2eventskinesisfirehoselambdamskeks

概要

AWS CDK v2.222.0 は、Lambda の新ランタイムサポート(Java 25、Python 3.14)、NLB のセキュリティグループ設定のデフォルト化、Kinesis Firehose の CloudWatch Logs データプロセッサー、API Gateway の機能拡張など、多数の新機能と改善を含むリリースです。また、Bedrock AgentCore の破壊的変更も含まれています。

破壊的変更

bedrock-agentcore: Cognito 認証の型安全性向上

変更内容

RuntimeAuthorizerConfiguration.usingCognito() のシグネチャが変更され、文字列パラメータの代わりに IUserPoolIUserPoolClient のコンストラクトを受け入れるようになりました。また、複数のクライアントをサポートするようになりました。

変更前

import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';

// 文字列 ID を使用(旧方式)
const authConfig = agentcore.RuntimeAuthorizerConfiguration.usingCognito(
  'us-east-1_abc123',  // User Pool ID
  'clientId123'        // User Pool Client ID
);

変更後

import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
import * as cognito from 'aws-cdk-lib/aws-cognito';

// Cognito コンストラクトの参照を使用(新方式)
const userPool = cognito.UserPool.fromUserPoolId(this, 'UserPool', 'us-east-1_abc123');
const userPoolClient = cognito.UserPoolClient.fromUserPoolClientId(this, 'Client', 'clientId123');

// 単一クライアントの場合
const authConfig = agentcore.RuntimeAuthorizerConfiguration.usingCognito(
  userPool,
  userPoolClient
);

// 複数クライアントのサポート
const client1 = cognito.UserPoolClient.fromUserPoolClientId(this, 'Client1', 'clientId1');
const client2 = cognito.UserPoolClient.fromUserPoolClientId(this, 'Client2', 'clientId2');

const authConfig = agentcore.RuntimeAuthorizerConfiguration.usingCognito(
  userPool,
  [client1, client2]  // 複数のクライアントを配列で指定可能
);

この変更により、型安全性が向上し、CDK エコシステムとの統合が改善されました。

関連リンク

新機能

lambda: Java 25 および Python 3.14 ランタイムのサポート

概要

AWS Lambda に追加された新しいランタイムがサポートされました。

使用例

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

// Java 25 ランタイム
const javaFunction = new lambda.Function(this, 'JavaFunction', {
  runtime: lambda.Runtime.JAVA_25,  // Java 25 ランタイム
  handler: 'com.example.Handler::handleRequest',
  code: lambda.Code.fromAsset('lambda-java.jar'),
});

// Python 3.14 ランタイム
const pythonFunction = new lambda.Function(this, 'PythonFunction', {
  runtime: lambda.Runtime.PYTHON_3_14,  // Python 3.14 ランタイム
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
});

関連リンク

elasticloadbalancingv2: NLB でセキュリティグループをデフォルトで作成

概要

新しいフィーチャーフラグ @aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault が追加され、有効にすると Network Load Balancer(NLB)のセキュリティグループがデフォルトで作成されるようになりました。

背景

従来、NLB のセキュリティグループサポートは後から追加されたため、後方互換性を保つために明示的な設定が必要でした。しかし、セキュリティグループを設定した NLB には多くの利点があり、また一度作成した NLB に後からセキュリティグループを追加することはできません。そのため、フィーチャーフラグによりデフォルトでセキュリティグループを作成できるようになりました。

使用例

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

declare const vpc: ec2.IVpc;

// フィーチャーフラグが有効な場合、セキュリティグループが自動的に作成される
const nlb = new elbv2.NetworkLoadBalancer(this, 'NLB', {
  vpc,
  internetFacing: true,
  // securityGroups プロパティを指定しなくても、
  // フィーチャーフラグが有効な場合は自動的にセキュリティグループが作成される
});

// 作成されたセキュリティグループを使用して接続を管理
declare const other: ec2.IConnectable;

// NLB から他のリソースへの接続を許可
nlb.connections.allowTo(other, ec2.Port.tcp(1234));

// 他のリソースから NLB への接続を許可
other.connections.allowTo(nlb, ec2.Port.tcp(80));

フィーチャーフラグの有効化

cdk.json に以下を追加:

{
  "context": {
    "@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault": true
  }
}

関連リンク

kinesisfirehose: CloudWatch Logs 用の組み込みデータプロセッサー

概要

Kinesis Data Firehose に、CloudWatch Logs の解凍とメッセージ抽出を行う組み込みデータプロセッサーが追加されました。

追加されたプロセッサー

  1. DecompressionProcessor - CloudWatch Logs の解凍
  2. CloudWatchLogProcessor - 解凍後の CloudWatch Logs からメッセージを抽出
  3. AppendDelimiterToRecordProcessor - S3 へのデータ配信時に改行デリミタを追加

使用例

import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as logs from 'aws-cdk-lib/aws-logs';

declare const bucket: s3.IBucket;
declare const logGroup: logs.ILogGroup;

// CloudWatch Logs を S3 に配信するための Delivery Stream
const deliveryStream = new firehose.DeliveryStream(this, 'Delivery Stream', {
  deliveryStreamName: 'CloudWatchLogsDeliveryStream',
  source: new firehose.CloudWatchLogsSource({
    logGroup: logGroup,
  }),
  destinations: [
    new firehose.S3Bucket(bucket, {
      // 複数のプロセッサーを組み合わせて使用
      processors: [
        new firehose.DecompressionProcessor({
          format: firehose.CompressionFormat.GZIP,  // GZIP 圧縮を解凍
        }),
        new firehose.CloudWatchLogProcessor({
          // CloudWatch Logs のメタデータを除去してメッセージのみを抽出
          // デフォルト: true
          extractMessage: true,
        }),
        new firehose.AppendDelimiterToRecordProcessor({
          delimiter: firehose.Delimiter.NEWLINE,  // 各レコードに改行を追加
        }),
      ],
    }),
  ],
});

プロセッサーの詳細

  • DecompressionProcessor: CloudWatch Logs は通常 GZIP 圧縮されているため、解凍が必要
  • CloudWatchLogProcessor: CloudWatch Logs の JSON 構造からメッセージフィールドを抽出
  • AppendDelimiterToRecordProcessor: S3 に保存する際、各レコードを改行で区切ることで可読性を向上

注意: CloudWatchLogProcessor を使用する場合、DecompressionProcessor も必須です。

関連リンク

events-targets: Amazon Data Firehose ターゲットのサポート

概要

EventBridge のターゲットとして、Kinesis Data Firehose(現在は Amazon Data Firehose)の IDeliveryStream インターフェースを使用できるようになりました。

変更内容

従来の KinesisFirehoseStreamV2 クラスは非推奨となり、新しい FirehoseDeliveryStream クラスが追加されました。新しいクラスは、aws-kinesisfirehose モジュールの IDeliveryStream インターフェースを直接受け入れます。

使用例

import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
import * as s3 from 'aws-cdk-lib/aws-s3';

declare const bucket: s3.IBucket;

// Firehose Delivery Stream の作成
const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
  destinations: [new firehose.S3Bucket(bucket)],
});

// EventBridge Rule の作成
const rule = new events.Rule(this, 'Rule', {
  eventPattern: {
    source: ['aws.ec2'],
    detailType: ['EC2 Instance State-change Notification'],
  },
});

// Firehose Delivery Stream をターゲットとして追加
rule.addTarget(new targets.FirehoseDeliveryStream(deliveryStream, {
  // オプション: メッセージの変換
  message: events.RuleTargetInput.fromEventPath('$.detail'),
}));

関連リンク

apigateway: SpecRestApi に binaryMediaTypes プロパティを追加

概要

SpecRestApi コンストラクトに、通常の RestApi で利用可能だった binaryMediaTypes プロパティが追加されました。

使用例

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

const api = new apigateway.SpecRestApi(this, 'MyApi', {
  apiDefinition: apigateway.ApiDefinition.fromAsset('openapi.yaml'),
  // バイナリメディアタイプの指定
  binaryMediaTypes: [
    'image/png',        // PNG 画像
    'image/jpeg',       // JPEG 画像
    'application/pdf',  // PDF ファイル
    'application/octet-stream',  // バイナリデータ全般
  ],
});

このプロパティを設定することで、API Gateway はこれらのメディアタイプを Base64 エンコードされたバイナリデータとして扱います。

関連リンク

apigatewayv2: WebSocketStage で accessLogSettings をサポート

概要

WebSocketStage でアクセスログ設定がサポートされました。WebSocket 専用のデフォルトログフォーマットも追加されています。

使用例

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

declare const webSocketApi: apigatewayv2.WebSocketApi;

// CloudWatch Logs ロググループの作成
const logGroup = new logs.LogGroup(this, 'WebSocketLogs', {
  retention: logs.RetentionDays.ONE_WEEK,  // ログ保持期間: 1週間
});

// WebSocket Stage でアクセスログを有効化
const stage = new apigatewayv2.WebSocketStage(this, 'ProdStage', {
  webSocketApi,
  stageName: 'prod',
  autoDeploy: true,
  // アクセスログ設定
  accessLogSettings: {
    destinationArn: logGroup.logGroupArn,  // ログの出力先
    // WebSocket 用のデフォルトフォーマットが使用される
    // カスタムフォーマットも指定可能
    format: apigatewayv2.AccessLogFormat.custom(
      JSON.stringify({
        requestId: '$context.requestId',
        ip: '$context.identity.sourceIp',
        eventType: '$context.eventType',
        routeKey: '$context.routeKey',
        status: '$context.status',
      })
    ),
  },
});

関連リンク

core: IEnvironmentAware インターフェースの追加

概要

コンストラクトの環境(アカウント、リージョン)を取得するための IEnvironmentAware インターフェースが追加されました。

背景

従来、construct.envIResource インターフェースで宣言されていましたが、IResource は以下の不要な要件も含んでいました:

  • stack: Stack プロパティ(Stack.of(x) で代替可能)
  • applyRemovalPolicy() メソッド(このインターフェースに本来不要)

そのため、env プロパティのみを含む IEnvironmentAware インターフェースが新たに導入されました。

使用例

import { IEnvironmentAware, Stack } from 'aws-cdk-lib';

// IEnvironmentAware を実装するリソースの環境情報を取得
function logEnvironment(resource: IEnvironmentAware) {
  console.log(`Account: ${resource.env.account}`);  // アカウント ID
  console.log(`Region: ${resource.env.region}`);    // リージョン
}

// 様々なリソースで使用可能
declare const bucket: s3.IBucket;
declare const table: dynamodb.ITable;
declare const func: lambda.IFunction;

logEnvironment(bucket);  // S3 バケットの環境情報
logEnvironment(table);   // DynamoDB テーブルの環境情報
logEnvironment(func);    // Lambda 関数の環境情報

この変更により、環境情報の取得がより柔軟になり、不要な依存関係が削減されました。

関連リンク

msk: Express ブローカーのサポート

概要

Amazon MSK(Managed Streaming for Apache Kafka)で Express ブローカータイプがサポートされました。

使用例

import * as msk from '@aws-cdk/aws-msk-alpha';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

declare const vpc: ec2.IVpc;

// Express ブローカーを使用した MSK クラスター
const cluster = new msk.Cluster(this, 'Cluster', {
  clusterName: 'myCluster',
  kafkaVersion: msk.KafkaVersion.V3_5_1,
  vpc,
  // Express ブローカーの有効化
  express: true,  // Express ブローカーを使用
  // Express ブローカーでは、特定の設定に制限があります
  // - ストレージモードは自動管理
  // - より低コストでスケーラブルな運用が可能
});

Express ブローカーの特徴

  • コスト効率の向上
  • 自動スケーリング
  • 運用の簡素化
  • 一部の設定に制限あり(プロビジョンドブローカーと比較)

関連リンク

memory: Bedrock AgentCore メモリ L2 コンストラクト

概要

Amazon Bedrock AgentCore のメモリ機能に対する L2 コンストラクトが追加されました。

使用例

import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';

// マネージドメモリストレージの作成
const memory = new agentcore.Memory(this, 'AgentMemory', {
  memoryName: 'my-agent-memory',
  // メモリストレージ戦略の指定
  storageStrategy: agentcore.MemoryStorageStrategy.managed({
    // マネージド戦略: AWS が自動的にストレージを管理
    storageType: agentcore.StorageType.OPENSEARCH_SERVERLESS,  // OpenSearch Serverless を使用
  }),
});

// セルフマネージドストレージの使用
declare const collection: opensearch.CfnCollection;

const selfManagedMemory = new agentcore.Memory(this, 'SelfManagedMemory', {
  memoryName: 'self-managed-memory',
  // セルフマネージド戦略: 既存の OpenSearch コレクションを使用
  storageStrategy: agentcore.MemoryStorageStrategy.selfManaged({
    collection: collection,  // 既存の OpenSearch Serverless コレクション
  }),
});

この機能により、Bedrock エージェントのコンテキストメモリを簡単に管理できるようになりました。

関連リンク

バグ修正

dynamodb: addToResourcePolicy が効果を持たない問題を修正

DynamoDB テーブルの addToResourcePolicy メソッドが正しく動作しない問題が修正されました。

関連リンク

ecs: 空の CfnClusterCapacityProviderAssociations リソースを削除

ECS クラスターで不要な空の CfnClusterCapacityProviderAssociations リソースが作成される問題が修正されました。

関連リンク

iam: grantInvoke() で ManagedPolicy または Policy に付与できない問題を修正

Lambda 関数の grantInvoke() メソッドを使用して、ManagedPolicy または Policylambda:InvokeFunction 権限を付与できない問題が修正されました。

関連リンク

ec2: CloudWatch VPC Flow Logs で不要な PassRole ポリシーを削除

VPC Flow Logs の CloudWatch 送信先で不要な PassRole ポリシーが出力される問題が修正されました。

関連リンク

agentcore: インポートされたロールでの addToRolePolicy の問題を修正

Bedrock AgentCore のランタイムで、インポートされたロールに対して addToRolePolicy を呼び出すと、デプロイのたびにポリシーが破壊・再作成される問題が修正されました。

関連リンク

agentcore: カスタム実行ロールポリシーの権限不足を修正

Bedrock AgentCore のランタイムで、カスタム実行ロールポリシーに適切な権限が不足している問題が修正されました。

関連リンク

Go でのコンパイル失敗を修正

Go 言語でのコンパイルが失敗する問題が修正されました。

関連リンク

Alphaモジュール

eks-v2-alpha が Developer Preview に移行

@aws-cdk/aws-eks-v2-alpha モジュールが Developer Preview ステータスに移行しました。これは EKS L2 コンストラクトの次世代バージョンで、より柔軟で拡張可能な設計になっています。

注意: Alpha モジュールは安定版ではないため、本番環境での使用は推奨されません。API は予告なく変更される可能性があります。

関連リンク

bedrock-alpha: 既存および非既存ロールへの権限依存関係の適用

Bedrock Alpha モジュールで、既存のロールと新規作成されたロールの両方に対して、権限の依存関係が正しく適用されるようになりました。

関連リンク

eks-v2-alpha: Go パッケージ名からハイフンを削除

Go 言語での使用時、パッケージ名からハイフンが削除され、Go の命名規則に準拠するようになりました。

関連リンク

まとめ

AWS CDK v2.222.0 は、Lambda の新ランタイムサポート、NLB のセキュリティグループ設定の改善、Kinesis Firehose の CloudWatch Logs プロセッサー、API Gateway の機能拡張など、多数の新機能を含む大規模なリリースです。

特に注目すべき変更:

  • Lambda の新ランタイム: Java 25 と Python 3.14 がサポートされ、最新の言語機能が利用可能に
  • NLB のセキュリティグループ: フィーチャーフラグによりデフォルトで作成されるようになり、セキュリティ管理が容易に
  • Kinesis Firehose: CloudWatch Logs の処理が組み込みプロセッサーで簡素化
  • Bedrock AgentCore: 破壊的変更を含むが、型安全性が大幅に向上

Bedrock AgentCore を使用している場合は、破壊的変更に注意してマイグレーションを計画してください。その他のユーザーにとっては、多数の新機能と改善を含む推奨アップグレードです。