Back to Releases
v2.176.0 2025年1月15日

AWS CDK v2.176.0 リリース解説

API Gateway WebSocket統合の強化、ECS Container Insightsの拡張可観測性サポート、AppConfig環境の削除保護機能、EventBridge Schedulerのユニバーサルターゲット対応など、複数のサービスに重要な機能追加が行われました。

apigatewaycodebuildecsappconfigscheduler

概要

AWS CDK v2.176.0では、複数のサービスに重要な機能追加が行われました。主な変更点として、API Gateway WebSocketのモック統合のカスタマイズ機能、ECS Container Insightsの拡張可観測性サポート、AppConfig環境の削除保護機能、そしてEventBridge Schedulerのユニバーサルターゲット対応(Alpha)が含まれています。また、CodeBuildの最新ビルドイメージの追加やRDSの不具合修正も実施されました。

新機能

API Gateway v2: WebSocketMockIntegration のプロパティ対応

WebSocket APIのモック統合で、リクエストテンプレートとテンプレート選択式が設定可能になりました。これまで他の統合タイプでは利用できていた機能が、モック統合でも利用できるようになります。

主な変更点:

  • WebSocketMockIntegrationProps インターフェースの追加
  • requestTemplates プロパティ: リクエストペイロードに適用するVelocityテンプレートのマップ
  • templateSelectionExpression プロパティ: 統合のテンプレート選択式

使用例:

import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
import { WebSocketMockIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations';

// WebSocket API with Mock Integration
const webSocketApi = new apigatewayv2.WebSocketApi(this, 'MyWebSocketApi');

// モック統合の設定
const mockIntegration = new WebSocketMockIntegration('MockIntegration', {
  // リクエストテンプレート: コンテンツタイプごとにVelocityテンプレートを定義
  requestTemplates: {
    'application/json': JSON.stringify({
      statusCode: 200,
      message: 'Mock response'
    })
  },
  // テンプレート選択式: どのテンプレートを使用するかを決定
  templateSelectionExpression: '$request.body.action'
});

// ルートに統合を追加
webSocketApi.addRoute('mock', {
  integration: mockIntegration,
});

関連PR: #30622


CodeBuild: 新しいビルドイメージの追加

CodeBuildで利用可能な最新のビルドイメージが追加されました。AWS SDKのListCuratedEnvironmentImages APIと同期し、CDKから最新のイメージを使用できるようになります。

変更内容:

  • Linux ARM アーキテクチャ向けの新しいビルドイメージを追加
  • AWS が提供する最新のキュレート済み環境イメージに対応

使用例:

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

const project = new codebuild.Project(this, 'MyProject', {
  buildSpec: codebuild.BuildSpec.fromObject({
    version: '0.2',
    phases: {
      build: {
        commands: ['echo "Building..."']
      }
    }
  }),
  // 最新のビルドイメージを使用
  environment: {
    buildImage: codebuild.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
    computeType: codebuild.ComputeType.SMALL
  }
});

関連PR: #32525


ECS: Container Insights の拡張可観測性サポート

ECSクラスターでContainer Insightsの拡張可観測性(Enhanced Observability)が設定できるようになりました。この機能により、より詳細なメトリクスとログデータを収集し、コンテナのパフォーマンスとトラブルシューティングを改善できます。

主な変更点:

  • ContainerInsights enumに ENHANCED オプションを追加
  • 新しい containerInsightsV2 プロパティの追加
  • 既存の containerInsights プロパティは非推奨(deprecated)となり、containerInsightsV2 の使用を推奨

使用例:

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

const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 2 });

// 拡張可観測性を有効にしたECSクラスター
const cluster = new ecs.Cluster(this, 'MyCluster', {
  vpc,
  // 拡張可観測性を有効化(推奨)
  containerInsightsV2: ecs.ContainerInsights.ENHANCED,
});

// 従来の方法(非推奨)
const clusterOld = new ecs.Cluster(this, 'MyClusterOld', {
  vpc,
  containerInsights: true, // deprecated
});

ContainerInsights の設定オプション:

  • DISABLED: Container Insightsを無効化
  • ENABLED: 基本的なContainer Insightsを有効化
  • ENHANCED: 拡張可観測性を有効化(新機能)

関連PR: #32622


AppConfig: 環境の削除保護機能

AppConfig環境に削除保護機能が追加されました。誤って重要な環境を削除することを防ぐことができます。

主な変更点:

  • DeletionProtectionCheck enumの追加
  • EnvironmentOptions および EnvironmentPropsdeletionProtectionCheck プロパティを追加

DeletionProtectionCheck の設定オプション:

  • ACCOUNT_DEFAULT: アカウントレベルの削除保護設定を使用(デフォルト)
  • APPLY: 削除保護チェックを強制実行(アカウント設定に関係なく)
  • BYPASS: 削除保護をバイパスして削除を許可

使用例:

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

const app = new appconfig.Application(this, 'MyApp', {
  applicationName: 'MyApplication',
});

// 削除保護を有効にした環境
const prodEnvironment = new appconfig.Environment(this, 'ProdEnvironment', {
  application: app,
  environmentName: 'production',
  // 削除保護を強制的に適用(アカウント設定に関係なく)
  deletionProtectionCheck: appconfig.DeletionProtectionCheck.APPLY,
});

// 開発環境では削除保護をバイパス
const devEnvironment = new appconfig.Environment(this, 'DevEnvironment', {
  application: app,
  environmentName: 'development',
  // 削除保護をバイパス(開発環境の頻繁な作り直しを許可)
  deletionProtectionCheck: appconfig.DeletionProtectionCheck.BYPASS,
});

// addEnvironment メソッドでも使用可能
app.addEnvironment('staging', {
  // アカウントレベルの設定を使用(デフォルト)
  deletionProtectionCheck: appconfig.DeletionProtectionCheck.ACCOUNT_DEFAULT,
});

関連PR: #32737


Alpha モジュール (2.176.0-alpha.0)

EventBridge Scheduler: ユニバーサルターゲット対応

EventBridge Schedulerのユニバーサルターゲット機能がAlphaモジュールに追加されました。これにより、幅広いAWS APIをスケジュールのターゲットとして呼び出すことができます。

主な機能:

  • Universal クラスの追加: 任意のAWS APIをターゲットとして設定可能
  • サービス名(小文字)とアクション名(camelCase)の検証
  • 読み取り専用APIアクション(GET、Describe、Listなど)の自動除外
  • IAMポリシーステートメントのカスタマイズ対応

使用例:

import * as scheduler from '@aws-cdk/aws-scheduler-alpha';
import { Universal } from '@aws-cdk/aws-scheduler-targets-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';

// DynamoDBのPutItem APIを定期的に実行するスケジュール
const schedule = new scheduler.Schedule(this, 'MySchedule', {
  schedule: scheduler.ScheduleExpression.rate(Duration.hours(1)),
  target: new Universal({
    // サービス名(小文字必須)
    service: 'dynamodb',
    // アクション名(camelCase必須)
    action: 'putItem',
    // IAMポリシーをカスタマイズ(オプション)
    policyStatements: [
      new iam.PolicyStatement({
        actions: ['dynamodb:PutItem'],
        resources: ['arn:aws:dynamodb:region:account:table/MyTable'],
      }),
    ],
    // ターゲットに渡すパラメータ
    input: scheduler.ScheduleTargetInput.fromObject({
      TableName: 'MyTable',
      Item: {
        id: { S: 'scheduled-item' },
        timestamp: { N: '$.scheduledTime' }
      }
    }),
  }),
});

// S3のCopyObject APIを使用した例
const s3CopySchedule = new scheduler.Schedule(this, 'S3CopySchedule', {
  schedule: scheduler.ScheduleExpression.cron({ minute: '0', hour: '2' }),
  target: new Universal({
    service: 's3',           // サービス名(小文字)
    action: 'copyObject',    // アクション名(camelCase)
    policyStatements: [
      new iam.PolicyStatement({
        actions: ['s3:GetObject', 's3:PutObject'],
        resources: ['arn:aws:s3:::my-bucket/*'],
      }),
    ],
    input: scheduler.ScheduleTargetInput.fromObject({
      Bucket: 'my-bucket',
      CopySource: '/source-bucket/source-key',
      Key: 'destination-key'
    }),
  }),
});

制限事項:

  • サービス名は小文字である必要があります
  • アクション名はcamelCaseである必要があります
  • 読み取り専用APIアクション(get、describe、list、selectなど)はサポートされていません

関連PR: #32341


MSK: クラスター名のバリデーション修正

MSK(Amazon Managed Streaming for Apache Kafka)のClusterクラスにおけるclusterNameのバリデーションロジックが修正されました。

関連PR: #32792


バグ修正

CLI: “no stack found in the main cloud assembly” エラーの修正

CDK CLIで特定の状況下で「メインクラウドアセンブリにスタックが見つかりません」というエラーが発生していた問題が修正されました。

関連PR: #32839


Core: 集約エラーのフォーマット修正

aws-cdk での集約エラーの正しいフォーマットが適用されるようになりました。複数のエラーが発生した際の出力が読みやすくなります。

関連PR: #32817


Elastic Load Balancing v2: IPv6インバウンドトラフィックの問題修正

デュアルスタック(IPv4/IPv6)でパブリックIPv4アドレスを持たないALBが、IPv6インバウンドトラフィックを正しく許可しない問題が修正されました。この修正はフィーチャーフラグの下で提供されます。

影響範囲:

  • デュアルスタックALB
  • パブリックIPv4アドレスなしの構成
  • IPv6インバウンドトラフィック

関連PR: #32765


RDS: プロパティ名のスペルミス修正

RDSのclusterScailabilityTypeプロパティのスペルミスが修正され、正しいclusterScalabilityTypeに変更されました。

関連PR: #32825


RDS: MySQL 8.4.3 バージョン定義の修正

MySQL 8.4.3のバージョン定義が正しく設定されていなかった問題が修正されました。

関連PR: #32934


その他の変更

L1 CloudFormation リソース定義の更新

L1(CloudFormation)リソース定義が最新のCloudFormation仕様に更新されました。

関連PR: #32847


Revert: PRLinterのCodecov失敗時の動作変更

PRLinterがCodecovの失敗時にエラーとする変更がrevertされました。

関連PR: #32867


まとめ

AWS CDK v2.176.0は、複数のサービスに重要な機能追加と品質改善をもたらすリリースです。特に注目すべき点は以下の通りです:

  1. ECS Container Insightsの拡張可観測性: より詳細なメトリクスとログでコンテナの可観測性が向上
  2. AppConfig削除保護: 本番環境の誤削除を防ぐ重要な安全機能
  3. EventBridge Schedulerのユニバーサルターゲット(Alpha): 柔軟なスケジューリング機能の大幅な拡張
  4. API Gateway WebSocket統合の強化: より柔軟なモック統合の実装が可能に

既存のアプリケーションへの影響は最小限で、新機能は段階的に導入できます。特に、ECSを使用している場合はcontainerInsightsV2への移行を検討することをお勧めします。また、EventBridge Schedulerのユニバーサルターゲット機能は現在Alphaモジュールですが、強力な機能なので積極的に試してみる価値があります。

詳細な変更内容については、GitHub Releaseをご確認ください。