Back to Releases
v2.178.0 2025年2月6日

AWS CDK v2.178.0 リリース解説

AppSync Events L2コンストラクト、Kinesis Firehose GA、Step Functions JSONataサポート、ECS新機能など多数の改善が含まれるリリース

appsynccloudfrontcognitodynamodbecskinesisfirehosesnsstepfunctionsbedrockrds

概要

AWS CDK v2.178.0では、AWS AppSync Events用のL2コンストラクトの追加、Kinesis FirehoseモジュールのGA昇格、Step FunctionsにおけるJSONataと変数のサポート、ECSの新機能追加など、多数の重要な機能追加が含まれています。特にAppSync EventsとStep FunctionsのJSONataサポートは、リアルタイムアプリケーションやステートマシンの実装を大幅に改善します。

新機能

AWS AppSync Events L2コンストラクト (#32505)

AWS AppSync Eventsをサポートする新しいL2コンストラクトが追加されました。リアルタイムイベント配信のためのEvent APIとChannel Namespaceを構築できます。

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

// Event APIの作成(API Keyによる認証)
const eventApi = new appsync.EventApi(this, 'MyEventApi', {
  name: 'my-event-api',
  authorizationConfig: {
    // デフォルト認証モード: API Key
    defaultAuthorization: {
      authorizationType: appsync.AuthorizationType.API_KEY,
      apiKeyConfig: {
        expires: cdk.Duration.days(365),  // API Keyの有効期限
      },
    },
  },
});

// Channel Namespaceの作成
const channelNamespace = new appsync.ChannelNamespace(this, 'MyChannelNamespace', {
  api: eventApi,
  name: 'my-namespace',
  // JavaScriptリゾルバーでチャネルの認可ロジックを定義
  code: appsync.Code.fromAsset('path/to/channel-handler.js'),
});

// IAMロールにイベント公開権限を付与
eventApi.grantPublish(myRole, 'my-namespace/*');

他の認証モード(IAM、Cognito User Pools、Lambda)もサポートされています。

Step Functions JSONataと変数のサポート (#32343)

Step Functionsで新しいクエリ言語JSONataと変数機能がサポートされました。既存のJSONPathよりもシンプルで強力な表現が可能です。

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

// JSONataを使用したPassステート
const jsonataPass = sfn.Pass.jsonata(this, 'JSONataPass', {
  outputs: {
    // JSONata式で出力を定義({% %}で囲む)
    count: '{% $states.input.count + 1 %}',           // カウントを1増やす
    message: '{% "Hello, " & $states.input.name %}',  // 文字列連結
  },
});

// 変数への代入(JSONataとJSONPathの両方で使用可能)
const assignPass = sfn.Pass.jsonata(this, 'AssignPass', {
  assign: {
    // 変数に値を代入(ステートマシン全体で共有される)
    counter: '{% $states.input.count + 1 %}',
    timestamp: '{% $now() %}',                        // 現在時刻を取得
  },
});

// 既存のJSONPathも引き続き使用可能
const jsonPathPass = sfn.Pass.jsonPath(this, 'JSONPathPass', {
  outputPath: sfn.JsonPath.stringAt('$.foo'),
});

// ステートマシンの定義
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: jsonataPass.next(assignPass),
});

Kinesis Firehose GA昇格 (#33296)

@aws-cdk/aws-kinesisfirehose-alphaモジュールが安定版に昇格し、aws-cdk-lib/aws-kinesisfirehoseとして利用可能になりました。

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

const bucket = new s3.Bucket(this, 'Bucket');

// S3へのデリバリーストリーム
const deliveryStream = new firehose.DeliveryStream(this, 'DeliveryStream', {
  destination: new firehose.S3Bucket(bucket, {
    // データ変換(オプション)
    processor: new firehose.LambdaFunctionProcessor(myFunction, {
      retries: 5,                                     // リトライ回数
    }),
    // 圧縮形式
    compression: firehose.Compression.GZIP,
    // バッファリング設定
    bufferingInterval: cdk.Duration.minutes(1),       // バッファ時間(デフォルト: 300秒)
    bufferingSize: cdk.Size.mebibytes(5),             // バッファサイズ(デフォルト: 5MB)
  }),
});

CloudFront Origin Group選択基準 (#32740)

CloudFront Distributionでオリジングループのフェイルオーバー選択基準を設定できるようになりました。

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

// オリジングループの作成
const originGroup = new origins.OriginGroup({
  primaryOrigin: new origins.S3Origin(primaryBucket),
  fallbackOrigin: new origins.S3Origin(fallbackBucket),
  fallbackStatusCodes: [500, 502, 503, 504],
  // 新機能: 選択基準の設定
  selectionCriteria: cloudfront.OriginGroupSelectionCriteria.DEFAULT,  // デフォルト動作
});

const distribution = new cloudfront.Distribution(this, 'Distribution', {
  defaultBehavior: {
    origin: originGroup,
  },
});

Cognito パスワード履歴サイズ (#33164)

Cognito User Poolでパスワードの再利用防止設定が可能になりました。

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

const userPool = new cognito.UserPool(this, 'UserPool', {
  passwordPolicy: {
    minLength: 12,
    requireLowercase: true,
    requireUppercase: true,
    requireDigits: true,
    requireSymbols: true,
    // 新機能: パスワード履歴サイズ(過去N個のパスワードの再利用を防止)
    passwordHistorySize: 5,  // 過去5個のパスワードは使用不可(デフォルト: 0)
  },
});

ECS 新機能

ExternalService Daemonスケジューリング (#32630)

ECS ExternalServiceでdaemonスケジューリング戦略がサポートされました。

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

const externalService = new ecs.ExternalService(this, 'ExternalService', {
  cluster: cluster,
  taskDefinition: taskDefinition,
  // daemonスケジューリング戦略(各ノードに1つずつタスクを配置)
  schedulingStrategy: ecs.SchedulingStrategy.DAEMON,
  // desiredCountはdaemon戦略では指定不要
});

Service Connect TLS設定 (#32605)

ECS Service ConnectでTLS暗号化が設定できるようになりました。

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

const service = new ecs.FargateService(this, 'Service', {
  cluster: cluster,
  taskDefinition: taskDefinition,
});

service.enableServiceConnect({
  services: [
    {
      portMappingName: 'api',
      // 新機能: TLS設定
      tls: {
        issuerCertificateAuthority: {
          // ACM Private CAのARN
          awsPcaAuthorityArn: 'arn:aws:acm-pca:region:account:certificate-authority/xxxx',
        },
        // クライアントTLSの設定(オプション)
        kmsKey: myKey,                                // 秘密鍵の暗号化に使用するKMSキー
        roleArn: myRole.roleArn,                      // 証明書アクセス用のIAMロール
      },
    },
  ],
});

アベイラビリティゾーン リバランシング (#32263)

ECSサービスでAZリバランシング機能が有効化できるようになりました。

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

const service = new ecs.FargateService(this, 'Service', {
  cluster: cluster,
  taskDefinition: taskDefinition,
  // 新機能: AZリバランシングの有効化
  availabilityZoneRebalancing: ecs.AvailabilityZoneRebalancing.ENABLED,  // デフォルト: DISABLED
  // 注意: 以下の条件を満たす必要があります
  // - capacityProviderStrategiesが設定されていないこと
  // - launchTypeがFARGATEであること
  // - deploymentControllerがECSであること
});

コンテナバージョン一貫性 (#32225)

ECSタスクでコンテナイメージバージョンの一貫性を制御できるようになりました。

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

const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef');

taskDefinition.addContainer('app', {
  image: ecs.ContainerImage.fromRegistry('nginx:latest'),
  // 新機能: バージョン一貫性の設定
  versionConsistency: ecs.VersionConsistency.ENABLED,  // タスク内で同じイメージバージョンを使用
  // DISABLED: タスク起動時に最新のイメージを取得(デフォルト)
  // ENABLED: 最初のコンテナと同じイメージダイジェストを使用
});

// 注意: CDKアセットからビルドしたイメージの場合、自動的にDISABLEDに設定されます
const assetImage = taskDefinition.addContainer('asset', {
  image: ecs.ContainerImage.fromAsset('./app'),
  // versionConsistencyは自動的にDISABLEDに設定される
});

SNS FIFO高スループットモード (#33056)

SNS FIFOトピックで高スループットモードがサポートされました。

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

const topic = new sns.Topic(this, 'Topic', {
  fifo: true,
  // 新機能: 高スループットモードの設定
  fifoThroughputScope: sns.FifoThroughputScope.MESSAGE_GROUP,  // メッセージグループごとに処理
  // FifoThroughputScope.TOPIC: トピックレベルでの順序保証(デフォルト、300 TPS)
  // FifoThroughputScope.MESSAGE_GROUP: メッセージグループレベルでの順序保証(より高いスループット)
  contentBasedDeduplication: true,
});

DynamoDB Point-in-Time Recovery新プロパティ (#33059)

DynamoDBで新しいPoint-in-Time Recovery設定プロパティが追加されました(既存のプロパティは非推奨)。

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

const table = new dynamodb.Table(this, 'Table', {
  partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
  // 新しいプロパティ
  pointInTimeRecovery: true,  // シンプルなboolean指定
});

// 既存のpointInTimeRecoveryは非推奨(まだ使用可能)
// pointInTimeRecovery: true

その他の新機能

  • Bedrock: Luma AI’s Ray2ビジュアルAIモデルのサポート (#33163)
  • RDS: Aurora PostgreSQL Limitless Database PostgreSQL 16.6のサポート (#33162)
  • ELBv2: mTLSのAdvertiseTrustStoreCaNamesサポート (#32678)
  • Lambda: ADOT Lambda Layers v0.115.0への更新 (#32783)
  • Custom Resource: 中国とGovCloudリージョンでのデフォルトNode.js 20ランタイム対応 (#33112)

Alphaモジュール

ec2-alpha: Developer Preview (#33230, #32956)

ec2-alphaモジュールがDeveloper Previewになり、Transit Gateway L2コンストラクトが追加されました。

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

// Transit Gatewayの作成
const tgw = new ec2.TransitGateway(this, 'TransitGateway', {
  amazonSideAsn: 64512,
  description: 'My Transit Gateway',
});

// VPCをアタッチ
tgw.attachVpc(vpc, {
  subnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
});

eks-v2-alpha: 新しいEKS v2モジュール (#33215)

新しいEKS v2 alphaモジュールが追加されました。ネイティブCFN L1クラスタリソースを使用した書き直しです。

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

const cluster = new eks.Cluster(this, 'Cluster', {
  version: eks.KubernetesVersion.V1_31,
  defaultCapacity: 2,
});

msk-alpha: ServerlessClusterサポート (#32780)

MSK ServerlessClusterのL2コンストラクトが追加されました。

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

const cluster = new msk.ServerlessCluster(this, 'ServerlessCluster', {
  clusterName: 'my-serverless-cluster',
  vpc: vpc,
});

バグ修正

  • API Gateway v2: ARN関数の不正な動作を修正 (#33100)
  • Batch: ManagedComputeEnvironmentでCFNパラメータをサポート (#32954)
  • CLI: cdk.jsonの配列引数が無視される問題を修正 (#33107)
  • Custom Resources: CloudWatchアクション用の不正なIAMプレフィックスを修正 (#33078)
  • SNS: enforceSSL有効時にトピックポリシーが作成されない問題を修正 (#31569)

破壊的変更(Alphaモジュールのみ)

ec2-alpha

  • BREAKING: IPAMクラスのoperatingRegionプロパティがoperatingRegions(複数形)にリネームされました。

ecs (Stable)

  • 非推奨化: TaskDefinitionProps.inferenceAcceleratorsプロパティとTaskDefinition.addInferenceAccelerator()メソッドが非推奨になりました。

その他の改善

  • エラーハンドリング: 複数のモジュールでエラー処理が改善され、型付きのValidationErrorがスローされるようになりました(API Gateway、Application Auto Scaling、App Mesh、AppSync、Cognito)
  • メタデータ収集: 追加のメタデータ収集機能が有効化されました(フィーチャーフラグの下)(#33232, #33292)
  • L1アップデート: CloudFormationリソース定義が最新版に更新されました (#33191, #33272)

まとめ

AWS CDK v2.178.0は、AppSync EventsやStep FunctionsのJSONataなど新しいAWSサービス機能への対応、Kinesis FirehoseのGA昇格、ECSの豊富な新機能など、多くの重要な改善を含むリリースです。特にリアルタイムイベント処理やステートマシンの実装を行う開発者にとって、大きな価値のある機能が追加されています。Alphaモジュールでも、EC2、EKS、MSKの重要な機能が追加され、今後の安定版化が期待されます。