Back to Releases
v2.194.0 2025年5月2日

AWS CDK v2.194.0 リリース解説

L1 CloudFormationリソース定義の大規模更新と、EventBridgeモジュールにおけるエラーハンドリングの改善が含まれるリリース

cloudfrontecrrdseventbridgeapigatewayappsync

概要

AWS CDK v2.194.0では、L1 CloudFormationリソース定義の大規模な更新が行われ、CloudFront、ECR、RDS、API Gatewayなど多数のAWSサービスで新しいリソースやプロパティが追加されました。また、EventBridgeモジュールでは、型安全性を向上させるためにValidationErrorsが導入され、エラーハンドリングが改善されています。

新機能

L1 CloudFormationリソース定義の更新 (#34278)

このリリースでは、@aws-cdk/aws-service-spec の最新変更に基づき、多数のL1 CloudFormationリソースが更新されました。主な変更点は以下の通りです:

CloudFront: 新しいリソースの追加

AWS::CloudFront::ConnectionGroup

CloudFrontに新しい接続グループリソースが追加されました。このリソースは、CloudFrontディストリビューションの接続設定を管理するために使用されます。

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

// ConnectionGroupの作成例(L1コンストラクト)
const connectionGroup = new cloudfront.CfnConnectionGroup(this, 'ConnectionGroup', {
  name: 'my-connection-group',              // 接続グループ名(必須、変更不可)
  enabled: true,                            // 接続グループを有効化
  ipv6Enabled: true,                        // IPv6サポートを有効化
  anycastIpListId: 'anycast-ip-list-id',   // AnycastIPリストID(オプション)
  tags: [{                                  // タグ(オプション)
    key: 'Environment',
    value: 'Production',
  }],
});

// 接続グループのIDとARNを参照
const connectionGroupId = connectionGroup.attrId;
const connectionGroupArn = connectionGroup.attrArn;

主要な属性:

  • id: 接続グループのID
  • arn: 接続グループのARN
  • routingEndpoint: ルーティングエンドポイント
  • status: 接続グループのステータス
  • isDefault: デフォルト接続グループかどうか
AWS::CloudFront::DistributionTenant

CloudFrontディストリビューションのテナント設定を管理する新しいリソースです。マルチテナント環境でディストリビューションをカスタマイズする際に使用します。

// DistributionTenantの作成例(L1コンストラクト)
const distributionTenant = new cloudfront.CfnDistributionTenant(this, 'Tenant', {
  distributionId: 'E1234EXAMPLE',           // 関連付けるディストリビューションID(必須)
  name: 'tenant-name',                      // テナント名(必須、変更不可)
  enabled: true,                            // テナントを有効化
  domains: [                                // ドメイン名のリスト(必須)
    'example.com',
    'www.example.com',
  ],
  connectionGroupId: connectionGroup.attrId, // 接続グループID(オプション)
  customizations: {                         // カスタマイズ設定(オプション)
    certificate: {
      arn: 'arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012',
    },
    webAcl: {
      action: 'ALLOW',                      // WAF アクションタイプ
      arn: 'arn:aws:wafv2:us-east-1:123456789012:global/webacl/example/a1b2c3d4',
    },
    geoRestrictions: {
      restrictionType: 'whitelist',         // 'whitelist' または 'blacklist'
      locations: ['US', 'CA', 'GB'],        // 国コードのリスト
    },
  },
  parameters: [                             // パラメータのリスト(オプション)
    {
      name: 'param1',
      value: 'value1',
    },
  ],
  managedCertificateRequest: {              // マネージド証明書リクエスト(変更不可)
    primaryDomainName: 'example.com',
    validationTokenHost: 'validation.example.com',
    certificateTransparencyLoggingPreference: 'ENABLED',
  },
  tags: [{
    key: 'Tenant',
    value: 'Customer1',
  }],
});

// テナントの属性を参照
const tenantId = distributionTenant.attrId;
const tenantStatus = distributionTenant.attrStatus;
const domainResults = distributionTenant.attrDomainResults; // ドメイン検証結果
Distribution: 接続モードとテナント設定のサポート

既存の AWS::CloudFront::Distribution リソースに、新しい接続モードとテナント設定が追加されました。

const distribution = new cloudfront.CfnDistribution(this, 'Distribution', {
  distributionConfig: {
    enabled: true,
    // ... 他の設定 ...

    // 新機能: 接続モード
    connectionMode: 'DIRECT',               // 接続モード(オプション)

    // 新機能: テナント設定
    tenantConfig: {
      parameterDefinitions: [               // パラメータ定義(オプション)
        {
          name: 'cacheTtl',
          definition: {
            stringSchema: {
              comment: 'キャッシュTTLの設定',
              defaultValue: '3600',         // デフォルト値
              required: false,              // 必須かどうか
            },
          },
        },
      ],
    },
  },
});

ECR: レジストリスキャン設定の追加

Amazon ECRに新しいレジストリスキャン設定リソースが追加されました。

AWS::ECR::RegistryScanningConfiguration

ECRレジストリ全体のイメージスキャン設定を管理できます。

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

// レジストリスキャン設定の作成例(L1コンストラクト)
const scanningConfig = new ecr.CfnRegistryScanningConfiguration(this, 'ScanConfig', {
  scanType: 'ENHANCED',                     // スキャンタイプ(必須): 'BASIC' または 'ENHANCED'
  rules: [                                  // スキャンルール(必須)
    {
      repositoryFilters: [                  // リポジトリフィルター
        {
          filter: 'prod-*',                 // フィルターパターン(必須)
          filterType: 'WILDCARD',           // フィルタータイプ(必須): 'WILDCARD'
        },
      ],
      scanFrequency: 'SCAN_ON_PUSH',       // スキャン頻度(必須): 'SCAN_ON_PUSH', 'CONTINUOUS_SCAN', 'MANUAL'
    },
    {
      repositoryFilters: [
        {
          filter: 'test-*',
          filterType: 'WILDCARD',
        },
      ],
      scanFrequency: 'CONTINUOUS_SCAN',     // 継続的なスキャン
    },
  ],
});

// レジストリIDを参照
const registryId = scanningConfig.attrRegistryId;

RDS: Database Insights Mode の追加

Amazon RDS DBインスタンスに新しい DatabaseInsightsMode プロパティが追加されました。

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

// L2コンストラクトでの使用例は今後のバージョンでサポート予定
// L1コンストラクトでの設定例
const dbInstance = new rds.CfnDBInstance(this, 'Database', {
  engine: 'postgres',
  dbInstanceClass: 'db.t3.micro',
  allocatedStorage: '20',

  // 新機能: Database Insights Mode
  databaseInsightsMode: 'STANDARD',         // 'STANDARD' または 'ADVANCED'(オプション)

  // ... 他の設定 ...
});

// Database Insights Modeの値を参照
const insightsMode = dbInstance.attrDatabaseInsightsMode;

AppSync: Channel Namespace のハンドラー設定

AWS AppSync の Channel Namespace リソースに、新しいハンドラー設定が追加されました。

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

const channelNamespace = new appsync.CfnChannelNamespace(this, 'Namespace', {
  apiId: 'api-id',
  name: 'namespace-name',

  // 新機能: ハンドラー設定
  handlerConfigs: {
    onPublish: {                            // パブリッシュ時のハンドラー(オプション)
      behavior: 'ALLOW',                    // 'ALLOW' または 'DENY'(必須)
      integration: {
        dataSourceName: 'MyDataSource',     // データソース名(必須)
        lambdaConfig: {                     // Lambda設定(オプション)
          invokeType: 'REQUEST_RESPONSE',   // 'REQUEST_RESPONSE' または 'EVENT'(必須)
        },
      },
    },
    onSubscribe: {                          // サブスクライブ時のハンドラー(オプション)
      behavior: 'ALLOW',
      integration: {
        dataSourceName: 'MyDataSource',
        lambdaConfig: {
          invokeType: 'REQUEST_RESPONSE',
        },
      },
    },
  },
});

その他の主要な更新

  • Auto Scaling: AutoScalingGroupに autoScalingGroupARN 属性が追加されました
  • Route 53 Resolver: ResolverRuleに delegationRecord プロパティが追加されました
  • MediaPackage V2: HLS Manifestに urlEncodeChildManifest オプションが追加されました
  • Redshift Serverless: Workgroupに baseCapacitymaxCapacity 属性が追加されました

詳細なリソース定義の変更については、PR #34278を参照してください。

EventBridge: ValidationErrorsの導入 (#34316)

EventBridgeモジュール(aws-events)で、型安全なエラーハンドリングが導入されました。従来の型なしErrorの代わりに、ValidationErrorクラスを使用するようになりました。

変更内容

以下のクラスとメソッドで、エラーハンドリングが改善されています:

  • ApiDestination: API宛先の検証
  • Connection: 接続設定の検証
  • EventBus: イベントバスの検証
  • EventPattern: イベントパターンの検証
  • Input: 入力変換の検証
  • Rule: ルールの検証
  • Schedule: スケジュール式の検証

コード例

import * as events from 'aws-cdk-lib/aws-events';
import { ValidationError } from 'aws-cdk-lib/core';

// 以前: 型なしErrorがスローされていた
// 現在: ValidationErrorがスローされる

try {
  const rule = new events.Rule(this, 'Rule', {
    schedule: events.Schedule.expression('invalid-expression'),
  });
} catch (error) {
  // ValidationErrorとして型安全にキャッチ可能
  if (error instanceof ValidationError) {
    console.error('Validation failed:', error.message);
  }
}

// イベントパターンの検証
try {
  const pattern = {
    source: ['aws.ec2'],
    detailType: ['EC2 Instance State-change Notification'],
    detail: {
      state: ['running'],
    },
  };

  // 無効なパターンの場合、ValidationErrorがスローされる
  events.EventPattern.fromObject(pattern);
} catch (error) {
  if (error instanceof ValidationError) {
    // 型安全なエラーハンドリング
    console.error('Invalid event pattern:', error.message);
  }
}

利点

  1. 型安全性の向上: エラーハンドリングが型安全になり、IDEの補完やTypeScriptの型チェックが機能します
  2. コードの可読性: エラーの種類が明確になり、適切なエラーハンドリングが容易になります
  3. デバッグの改善: ValidationErrorには詳細なコンテキスト情報が含まれます

この変更は既存のコードに対して後方互換性があります。ValidationErrorはErrorを継承しているため、既存のtry-catchブロックは引き続き動作します。

詳細については、PR #34316およびIssue #32569を参照してください。

まとめ

AWS CDK v2.194.0は、L1 CloudFormationリソース定義の大規模な更新により、最新のAWSサービス機能がCDKで利用可能になりました。特に、CloudFrontの新しいリソース(ConnectionGroupとDistributionTenant)、ECRのレジストリスキャン設定、RDSのDatabase Insights Modeなどが注目に値します。

また、EventBridgeモジュールでのValidationErrorsの導入により、型安全性が向上し、より堅牢なコードを書くことができるようになりました。これらの改善により、AWS CDKはより強力で使いやすいインフラストラクチャ定義ツールとなっています。

これらの新機能を活用することで、より柔軟で保守性の高いインフラストラクチャコードを構築できます。