Back to Releases
v2.196.0 2025年5月16日

AWS CDK v2.196.0 リリース解説

API Gateway v2のDualStackサポート、Step Functionsの機能拡張、ECS PatternsのヘルスチェックGracePeriod対応など、複数のサービスで新機能が追加されました。

apigatewayv2elasticloadbalancingv2route53s3-tablessesstepfunctionsecs-patternssyntheticsrdsmskpipes

概要

AWS CDK v2.196.0 では、API Gateway v2のDualStackドメイン名対応、ALBのLambdaターゲットグループでのマルチバリューヘッダー対応、Route 53のCIDRルーティング設定、Step Functionsの機能拡張など、複数のサービスで新機能が追加されました。また、多くのモジュールでエラーハンドリングが改善され、型付きのValidationErrorがスローされるようになりました。

新機能

API Gateway v2: Dualstackドメイン名のサポート

API Gateway v2のドメイン名で、IPv4とIPv6の両方をサポートするDualStack構成が設定可能になりました。

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

const certificate = acm.Certificate.fromCertificateArn(
  this,
  'Certificate',
  'arn:aws:acm:us-east-1:123456789012:certificate/xxxxx'
);

const domainName = new apigatewayv2.DomainName(this, 'DomainName', {
  domainName: 'api.example.com',
  certificate: certificate,
  // Dualstack (IPv4 + IPv6) を有効化
  ipAddressType: apigatewayv2.IpAddressType.DUALSTACK,
});

主なプロパティ:

  • ipAddressType: IP アドレスタイプを指定(IPV4DUALSTACK

Elastic Load Balancing v2: Lambdaターゲットグループのマルチバリューヘッダー対応

ALBのLambdaターゲットグループで、マルチバリューヘッダーを有効化できるようになりました。この機能により、同じヘッダー名で複数の値を持つHTTPヘッダーをLambda関数に渡すことができます。

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

const fn = lambda.Function.fromFunctionArn(
  this,
  'Function',
  'arn:aws:lambda:us-east-1:123456789012:function:my-function'
);

const targetGroup = new elbv2.ApplicationTargetGroup(this, 'TargetGroup', {
  vpc: vpc,
  // Lambdaターゲットグループでマルチバリューヘッダーを有効化
  multiValueHeadersEnabled: true,
  targets: [new targets.LambdaTarget(fn)],
});

const listener = lb.addListener('Listener', {
  port: 80,
  defaultAction: elbv2.ListenerAction.forward([targetGroup]),
});

主なプロパティ:

  • multiValueHeadersEnabled: マルチバリューヘッダーを有効化(デフォルト: false

Route 53: CIDRルーティング設定のサポート

Route 53のレコードセットで、IPベースのルーティングを設定するためのcidrRoutingConfigプロパティが追加されました。特定のIPアドレス範囲からのトラフィックを指定したエンドポイントにルーティングできます。

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

const hostedZone = route53.HostedZone.fromLookup(this, 'HostedZone', {
  domainName: 'example.com',
});

// CIDRルーティングの設定
new route53.RecordSet(this, 'RecordSet', {
  zone: hostedZone,
  recordName: 'app',
  recordType: route53.RecordType.A,
  target: route53.RecordTarget.fromIpAddresses('192.0.2.1'),
  // CIDR ルーティング設定
  cidrRoutingConfig: {
    collectionId: 'collection-id',      // CIDR コレクション ID
    locationName: 'location-name',      // ロケーション名
  },
});

主なプロパティ:

  • cidrRoutingConfig.collectionId: Route 53 CIDR コレクション ID
  • cidrRoutingConfig.locationName: CIDR ロケーション名

S3 Tables: TableBucketのKMS暗号化サポート

S3 TablesのTableBucketで、KMSキーを使用したサーバーサイド暗号化がサポートされるようになりました。

import * as s3tables from '@aws-cdk/aws-s3tables-alpha';
import * as kms from 'aws-cdk-lib/aws-kms';
import * as iam from 'aws-cdk-lib/aws-iam';

// ユーザー定義のKMSキーを使用
const key = new kms.Key(this, 'UserKey', {});
const encryptedBucket = new s3tables.TableBucket(this, 'EncryptedTableBucket', {
  tableBucketName: 'table-bucket-1',
  encryption: s3tables.TableBucketEncryption.KMS,  // KMS暗号化を指定
  encryptionKey: key,                               // カスタムKMSキー
});

// grantRead で KMS キーへの復号化権限も自動付与
encryptedBucket.grantRead(
  new iam.AccountPrincipal('123456789012'),
  '*'
);

// KMSキーを自動作成する場合
const encryptedBucketAuto = new s3tables.TableBucket(this, 'EncryptedTableBucketAuto', {
  tableBucketName: 'table-bucket-2',
  encryption: s3tables.TableBucketEncryption.KMS,  // キーを指定しないと自動作成
});

// S3マネージド暗号化を使用(デフォルト)
const encryptedBucketDefault = new s3tables.TableBucket(this, 'EncryptedTableBucketDefault', {
  tableBucketName: 'table-bucket-3',
  encryption: s3tables.TableBucketEncryption.S3_MANAGED,
});

主なプロパティ:

  • encryption: 暗号化タイプ(S3_MANAGED または KMS
  • encryptionKey: KMS暗号化を使用する場合のカスタムKMSキー(省略時は自動作成)

付与される権限:

  • grantRead: kms:Decrypt 権限が自動的に付与されます
  • grantWrite: kms:Decrypt, kms:GenerateDataKey* 権限が自動的に付与されます

SES: カスタムトラッキングドメインのHTTPSポリシー設定

SESのConfiguration Setで、カスタムトラッキングドメインのHTTPSポリシーを設定できるようになりました。

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

const configSet = new ses.ConfigurationSet(this, 'ConfigSet', {
  customTrackingRedirectDomain: 'track.example.com',
  // カスタムトラッキングドメインの HTTPS ポリシー
  customTrackingHttpsPolicy: ses.HttpsPolicy.REQUIRE,  // HTTPS必須
});

主なプロパティ:

  • customTrackingHttpsPolicy: HTTPSポリシー(REQUIRE または OPTIONAL

Step Functions: DistributedMapのResultWriterでJSONPath/JSONataバケット対応

Step FunctionsのDistributedMapで、ResultWriterのS3バケット指定にJSONPathやJSONataを使用できるようになりました。実行時の入力データから動的にバケット名を決定できます。

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

const resultBucket = s3.Bucket.fromBucketName(
  this,
  'ResultBucket',
  'my-result-bucket'
);

const distributedMap = new sfn.DistributedMap(this, 'DistributedMap', {
  itemsPath: '$.items',
  resultWriter: new sfn.ResultWriter({
    // JSONPath を使用して実行時にバケット名を決定
    bucket: sfn.TaskInput.fromJsonPathAt('$.bucketName').value,
    prefix: 'results',
  }),
});

注意事項:

  • JSONPath/JSONataを使用する場合、以下のS3権限にワイルドカード(*)が必要です:
    • s3:PutObject
    • s3:GetObject
    • s3:ListMultipartUploadParts
    • s3:AbortMultipartUpload

Step Functions: Parallelステートへのパラメータ追加

Step FunctionsのParallelステートで、parametersプロパティがサポートされ、並列実行される各ブランチに渡すデータを変換できるようになりました。

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

const parallel = new sfn.Parallel(this, 'ParallelState', {
  // Parallel ステートに渡すパラメータを設定
  parameters: {
    'ExecutionId.$': '$$.Execution.Id',   // 実行IDを追加
    'InputData.$': '$.data',              // 入力データを変換
    'Timestamp.$': '$$.State.EnteredTime', // タイムスタンプを追加
  },
});

parallel.branch(
  new sfn.Pass(this, 'Branch1')
);
parallel.branch(
  new sfn.Pass(this, 'Branch2')
);

主なプロパティ:

  • parameters: 各ブランチに渡すパラメータ(JSONPath対応)

ECS Patterns: QueueProcessingFargateServiceのヘルスチェックGracePeriod対応

ECS PatternsのQueueProcessingFargateServiceで、ヘルスチェックのGracePeriodを設定できるようになりました。デプロイメントサーキットブレーカーを使用する際に有用です。

import * as ecsPatterns from 'aws-cdk-lib/aws-ecs-patterns';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import { Duration } from 'aws-cdk-lib';

const queueService = new ecsPatterns.QueueProcessingFargateService(this, 'Service', {
  image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
  // ヘルスチェックの Grace Period を設定
  healthCheckGracePeriod: Duration.seconds(60),  // 60秒間はヘルスチェック失敗を許容
  circuitBreaker: { rollback: true },            // サーキットブレーカーと併用
});

主なプロパティ:

  • healthCheckGracePeriod: ヘルスチェックの猶予期間(Duration

CloudWatch Synthetics: Python 5.0 および 5.1 ランタイムのサポート

CloudWatch SyntheticsのCanaryで、Python Selenium 5.0および5.1ランタイムがサポートされました。

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

const canary50 = new synthetics.Canary(this, 'Canary50', {
  canaryName: 'my-canary-50',
  // Python Selenium 5.0 ランタイム
  runtime: synthetics.Runtime.SYNTHETICS_PYTHON_SELENIUM_5_0,
  test: synthetics.Test.custom({
    handler: 'index.handler',
    code: synthetics.Code.fromAsset('canary'),
  }),
  schedule: synthetics.Schedule.rate(Duration.minutes(5)),
});

const canary51 = new synthetics.Canary(this, 'Canary51', {
  canaryName: 'my-canary-51',
  // Python Selenium 5.1 ランタイム
  runtime: synthetics.Runtime.SYNTHETICS_PYTHON_SELENIUM_5_1,
  test: synthetics.Test.custom({
    handler: 'index.handler',
    code: synthetics.Code.fromAsset('canary'),
  }),
  schedule: synthetics.Schedule.rate(Duration.minutes(5)),
});

サポートされるランタイム:

  • Runtime.SYNTHETICS_PYTHON_SELENIUM_5_0
  • Runtime.SYNTHETICS_PYTHON_SELENIUM_5_1

RDS: 新しいAurora MySQLバージョンのサポート

Aurora MySQLの新しいバージョンが追加されました。

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

const cluster = new rds.DatabaseCluster(this, 'Cluster', {
  engine: rds.DatabaseClusterEngine.auroraMysql({
    // 新しくサポートされたバージョン
    version: rds.AuroraMysqlEngineVersion.VER_2_11_6,
    // version: rds.AuroraMysqlEngineVersion.VER_2_12_5,
    // version: rds.AuroraMysqlEngineVersion.VER_3_04_4,
  }),
  instanceProps: {
    vpc,
  },
});

追加されたバージョン:

  • Aurora MySQL 2.11.6
  • Aurora MySQL 2.12.5
  • Aurora MySQL 3.04.4

エラーハンドリングの改善

以下のモジュールで、型付きのValidationErrorがスローされるようになりました:

  • ECS
  • EKS
  • Elasticsearch
  • EventBridge Targets
  • Global Accelerator
  • KMS
  • OpenSearch Service
  • Scheduler
  • Service Discovery
  • SNS Subscriptions
  • Step Functions

これにより、エラーハンドリングがより型安全になり、エディタでのコード補完も改善されます。

Alphaモジュール

MSK: Kafka 3.9.x および 3.9.x Kraft のサポート

MSK Alphaモジュールで、Kafka 3.9.xバージョンとKraftモード(ZooKeeper不要)がサポートされました。

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

// Kafka 3.9.x (ZooKeeper モード)
const cluster39 = new msk.Cluster(this, 'Cluster39', {
  clusterName: 'my-cluster',
  kafkaVersion: msk.KafkaVersion.V3_9_0,
  vpc,
});

// Kafka 3.9.x Kraft モード(ZooKeeper 不要)
const cluster39Kraft = new msk.Cluster(this, 'Cluster39Kraft', {
  clusterName: 'my-cluster-kraft',
  kafkaVersion: msk.KafkaVersion.V3_9_0_KRAFT,
  vpc,
});

追加されたバージョン:

  • KafkaVersion.V3_9_0: Kafka 3.9.x (ZooKeeper モード)
  • KafkaVersion.V3_9_0_KRAFT: Kafka 3.9.x Kraft モード

EventBridge Pipes Targets: SNSターゲットのサポート

EventBridge Pipes TargetsでSNSがサポートされました。DynamoDB StreamsやSQSなどのソースから直接SNSトピックにメッセージを送信できます。

import * as pipes from '@aws-cdk/aws-pipes-alpha';
import * as targets from '@aws-cdk/aws-pipes-targets-alpha';
import * as sources from '@aws-cdk/aws-pipes-sources-alpha';
import * as sqs from 'aws-cdk-lib/aws-sqs';
import * as sns from 'aws-cdk-lib/aws-sns';

const sourceQueue = new sqs.Queue(this, 'SourceQueue');
const targetTopic = new sns.Topic(this, 'TargetTopic');

// EventBridge Pipes で SQS から SNS へ
new pipes.Pipe(this, 'Pipe', {
  source: new sources.SqsSource(sourceQueue),
  // SNS ターゲット
  target: new targets.SnsTarget(targetTopic, {
    inputTransformation: pipes.InputTransformation.fromObject({
      message: pipes.DynamicInput.fromEventPath('$.body'),
    }),
  }),
});

主なプロパティ:

  • inputTransformation: SNSに送信するメッセージの変換ルール

S3 Tables: カスタマーマネージドKMSキーによるサーバーサイド暗号化(Alpha)

S3 Tables Alphaモジュールでも、カスタマーマネージドKMSキーによるサーバーサイド暗号化がサポートされました(Stable版の機能と同様)。

バグ修正

CloudWatch Actions: Lambda権限の一意なプレフィックスID使用

CloudWatch AlarmのLambdaアクションで、Lambda権限に一意なプレフィックスIDが使用されるようになり、権限の競合が回避されます。

EKS: クラスター名の長さ制限チェック

EKSクラスター名が100文字の制限を超える場合、適切なエラーメッセージが表示されるようになりました。

S3: Block Public Access のデフォルト設定変更(フィーチャーフラグ)

フィーチャーフラグ配下で、S3バケットのblockPublicAccessがデフォルトで有効(すべてのパブリックアクセスをブロック)になりました。

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

// フィーチャーフラグが有効な場合、デフォルトでパブリックアクセスがブロックされる
const bucket = new s3.Bucket(this, 'Bucket', {
  // blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL, // デフォルト
});

// パブリックアクセスを許可する場合は明示的に設定
const publicBucket = new s3.Bucket(this, 'PublicBucket', {
  blockPublicAccess: new s3.BlockPublicAccess({
    blockPublicAcls: false,
    blockPublicPolicy: false,
    ignorePublicAcls: false,
    restrictPublicBuckets: false,
  }),
});

破壊的変更(実験的機能)

CloudFormation: L1リソースの更新

一部のL1リソースで、CloudFormationリソース定義の更新により破壊的変更が発生しています。各モジュールの詳細を確認してください。

Logs: DeliveryDestinationPolicyの型変更

AWS::Logs::DeliveryDestinationリソースのDeliveryDestinationPolicyプロパティの型が、JSONからDestinationPolicy型に変更されました。

まとめ

AWS CDK v2.196.0 は、API Gateway v2、Elastic Load Balancing、Route 53、Step Functions、ECS Patternsなど、複数のサービスで新機能が追加された充実したリリースとなりました。特に、API Gateway v2のDualStackサポート、ALBのマルチバリューヘッダー対応、Route 53のCIDRルーティング設定は、より柔軟なインフラ構築を可能にします。

また、多くのモジュールで型付きのValidationErrorがスローされるようになり、エラーハンドリングの改善も図られています。S3のBlock Public Accessがデフォルトで有効になる変更(フィーチャーフラグ配下)は、セキュリティ向上に貢献します。

Alphaモジュールでは、MSKのKafka 3.9.xサポートやEventBridge PipesのSNSターゲット対応など、新しいAWSサービス機能がいち早く利用可能になっています。

既存のCDKアプリケーションをアップグレードする際は、破壊的変更(特にL1リソースの更新)に注意し、十分なテストを実施してください。