Back to Releases
v2.185.0 2025年3月19日

AWS CDK v2.185.0 リリース解説

S3デプロイメントのEnum追加とJSONファイルのクォート処理改善、ECS Fargate タスク定義のメモリ/CPUバリデーション追加、S3ライフサイクルルールのバリデーション強化などが含まれます。

s3ecsekslogss3-deploymentstepfunctionsscheduler

概要

AWS CDK v2.185.0では、S3デプロイメントとECSの機能強化、バグ修正が含まれています。特にS3デプロイメントでの暗号化タイプのEnum追加、ECS Fargate タスク定義のメモリ/CPU組み合わせバリデーション、JSONファイル内のクォート文字列の適切な処理、S3ライフサイクルルールの遷移設定のバリデーション強化が含まれます。

新機能

S3 Deployment: サーバーサイド暗号化タイプのEnum追加

PR #33819

BucketDeploymentで、サーバーサイド暗号化の設定にEnum型のサポートが追加されました。これにより、CloudFormationでサポートされている暗号化タイプを型安全に指定できるようになります。

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

const bucket = new s3.Bucket(this, 'MyBucket', {
  encryption: s3.BucketEncryption.S3_MANAGED, // Enum型で指定可能
});

new s3deploy.BucketDeployment(this, 'DeployWebsite', {
  sources: [s3deploy.Source.asset('./website-dist')],
  destinationBucket: bucket,
  // サーバーサイド暗号化の設定が型安全に
  serverSideEncryption: s3deploy.ServerSideEncryption.AES_256, // AES256暗号化
});

CloudFormationドキュメントで定義されている暗号化タイプ(AES_256aws:kmsなど)がEnumとして利用可能になりました。

ECS: Fargate タスク定義のメモリ/CPUバリデーション追加

PR #33608

ECS Fargate タスク定義で、メモリとCPUの組み合わせが有効かどうかを合成時にバリデーションする機能が追加されました。これにより、デプロイ前に無効な設定を検出できます。

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

// 有効な組み合わせ
const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', {
  memoryLimitMiB: 512,  // メモリ: 512 MiB
  cpu: 256,             // CPU: 0.25 vCPU (有効な組み合わせ)
});

// 無効な組み合わせ(合成時にエラー)
const invalidTaskDef = new ecs.FargateTaskDefinition(this, 'InvalidTaskDef', {
  memoryLimitMiB: 512,  // メモリ: 512 MiB
  cpu: 1024,            // CPU: 1 vCPU(この組み合わせは無効でエラーになる)
  // エラー: CPU 1024 requires memory to be at least 2048 MiB
});

バリデーション仕様:

  • Fargate互換性(FARGATE)がrequiresCompatibilitiesに含まれている場合、このバリデーションが実行されます
  • EC2互換性と併用している場合でも、Fargateのバリデーションルールが適用されます
  • トークン値の場合はバリデーションがスキップされます(デプロイ時に検証)

参考: AWS Fargate タスクサイズ

ECS: サービスマネージドボリュームのEnum追加

PR #33644

ECSのサービスマネージドボリューム設定で、Enum型のサポートが追加されました。

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

const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', {
  memoryLimitMiB: 512,
  cpu: 256,
});

// サービスマネージドボリュームの設定
// Enum型で型安全に設定可能

EKS: マネージドノードグループのEnum追加

PR #33646

EKSのマネージドノードグループ設定で、Enum型のサポートが追加されました。これにより、ノードグループの設定がより型安全になります。

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

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

// マネージドノードグループの設定でEnum型を使用可能
const nodeGroup = cluster.addNodegroupCapacity('NodeGroup', {
  instanceTypes: [new ec2.InstanceType('t3.medium')],
  minSize: 1,
  maxSize: 3,
  // Enum型で設定オプションを指定
});

CloudWatch Logs: ValidationError の導入

PR #33753

CloudWatch Logsモジュールで、型なしのErrorの代わりにValidationErrorをスローするように変更されました。これによりエラーハンドリングがより明確になります。

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

try {
  const logGroup = new logs.LogGroup(this, 'LogGroup', {
    retention: logs.RetentionDays.ONE_WEEK,
  });

  // 無効な設定をするとValidationErrorがスローされる
  new logs.MetricFilter(this, 'MetricFilter', {
    logGroup,
    metricNamespace: 'MyApp',
    metricName: 'MyMetric',
    filterPattern: logs.FilterPattern.literal(''), // 空のパターンは無効
  });
} catch (error) {
  if (error instanceof ValidationError) {
    // 型安全なエラーハンドリング
    console.error('Validation failed:', error.message);
  }
}

変更内容:

  • ErrorからValidationErrorへの変更により、バリデーションエラーを明示的に識別可能
  • データ保護ポリシー、フィールドインデックスポリシー、メトリックフィルター、サブスクリプションフィルターなど、Logsモジュール全体で統一

L1コンストラクトの更新

PR #33800

CloudFormationリソース定義が最新版に更新されました。各AWSサービスの新機能やプロパティが利用可能になります。

バグ修正

S3: ライフサイクルルールの遷移設定バリデーション追加

PR #33731

S3バケットのライフサイクルルールで、遷移設定(transition)のtransitionDatetransitionAfterのバリデーションが追加されました。

修正内容:

  • transitionDatetransitionAfterのどちらか一方のみを指定する必要があります
  • 両方指定した場合、または両方未指定の場合は合成時にエラーになります
  • これまではデプロイ時にエラーとなっていましたが、合成時に検出できるようになりました
import * as s3 from 'aws-cdk-lib/aws-s3';

const bucket = new s3.Bucket(this, 'MyBucket', {
  lifecycleRules: [
    {
      // 正しい設定: transitionAfter のみ指定
      transitions: [
        {
          storageClass: s3.StorageClass.GLACIER,
          transitionAfter: cdk.Duration.days(30), // 30日後にGlacierへ移行
        },
      ],
    },
    {
      // 正しい設定: transitionDate のみ指定
      transitions: [
        {
          storageClass: s3.StorageClass.GLACIER,
          transitionDate: new Date('2025-12-31'), // 特定の日付に移行
        },
      ],
    },
    {
      // エラー: 両方指定(合成時にエラー)
      transitions: [
        {
          storageClass: s3.StorageClass.GLACIER,
          transitionAfter: cdk.Duration.days(30),
          transitionDate: new Date('2025-12-31'), // エラー: どちらか一方のみ指定可能
        },
      ],
    },
    {
      // エラー: 両方未指定(合成時にエラー)
      transitions: [
        {
          storageClass: s3.StorageClass.GLACIER,
          // エラー: transitionAfter または transitionDate が必要
        },
      ],
    },
  ],
});

S3 Deployment: JSONファイル内のクォート文字列の適切な処理

PR #33698

BucketDeploymentSource.jsonData()を使用する際、文字列内にクォート(")が含まれる場合に正しくエスケープされるようになりました。

修正前の問題:

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

const param = ssm.StringParameter.fromStringParameterName(
  this,
  'Param',
  '/my/secret'
);

// パラメータの値が "test"with"quotes" の場合
new s3deploy.BucketDeployment(this, 'Deploy', {
  sources: [
    s3deploy.Source.jsonData('config.json', {
      secret_value: param.stringValue, // ← 修正前: 無効なJSONになっていた
    }),
  ],
  destinationBucket: bucket,
});

// 修正前の出力(無効なJSON):
// {"secret_value": "test"with"quotes"}

修正後:

// 修正後の出力(有効なJSON):
// {"secret_value": "test\"with\"quotes"}

// YAMLファイルは引き続き正常に動作
new s3deploy.BucketDeployment(this, 'DeployYaml', {
  sources: [
    s3deploy.Source.yamlData('config.yaml', {
      secret_value: param.stringValue, // YAMLは元々正常に動作
    }),
  ],
  destinationBucket: bucket,
});

// YAML出力:
// secret_value: test"with"quotes

重要な注意事項:

  • この修正により、JSONファイルのみが特別に処理されるようになりました
  • YAMLファイルや他のファイルタイプは従来通りの動作です
  • JSONファイルのクォート文字列が自動的にエスケープされます
  • 既に回避策(手動でエスケープ文字を追加)を実装している場合、二重エスケープが発生する可能性があります

Core: tree.jsonの空白文字削除

PR #33784

tree.jsonファイルから不要な空白文字が削除され、ファイルサイズが削減されました。これによりCDKアプリケーションのメタデータが軽量化されます。

Step Functions Tasks: Batch Job Queue ARNでのJsonPath/JSONataサポート

PR #33670

Step FunctionsのBatchタスクで、jobQueueArnパラメータでJsonPathまたはJSONata式がサポートされるようになりました。

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

const submitJob = new tasks.BatchSubmitJob(this, 'SubmitJob', {
  jobDefinitionArn: 'arn:aws:batch:us-east-1:123456789012:job-definition/my-job',
  jobName: 'MyJob',
  // JsonPathを使用してジョブキューARNを動的に指定可能
  jobQueueArn: sfn.JsonPath.stringAt('$.queueArn'),
  // または JSONata式を使用
  // jobQueueArn: sfn.JsonPath.jsonata('$states.format("arn:aws:batch:{}:123456789012:job-queue/{}", $region, $queueName)'),
});

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

⚠️ 破壊的変更: Scheduler Targets の名前変更

PR #33758

@aws-cdk/aws-scheduler-targets-alphaモジュールで、Kinesis Data Firehoseが Amazon Data Firehose にリブランディングされたことに伴い、クラス名が変更されました。

破壊的変更:

// 変更前(v2.184.0以前)
import { KinesisDataFirehosePutRecord } from '@aws-cdk/aws-scheduler-targets-alpha';

const target = new KinesisDataFirehosePutRecord(deliveryStream, {
  role,
});

// 変更後(v2.185.0以降)
import { FirehosePutRecord } from '@aws-cdk/aws-scheduler-targets-alpha';

const target = new FirehosePutRecord(deliveryStream, {
  role,
});

移行方法:

  1. KinesisDataFirehosePutRecordのインポートをFirehosePutRecordに変更
  2. コンストラクタ呼び出しもFirehosePutRecordに変更
  3. その他のプロパティや動作は変更なし

理由: AWSサービス名の変更(Kinesis Data Firehose → Amazon Data Firehose)に合わせて、より正確な名前に変更されました。

まとめ

AWS CDK v2.185.0では、S3デプロイメントとECSを中心とした機能強化とバグ修正が行われました。特に以下の改善が重要です:

  • S3デプロイメント: JSONファイル内のクォート文字列が正しく処理されるようになり、暗号化タイプのEnum追加で型安全性が向上
  • ECS: Fargateタスク定義のメモリ/CPU組み合わせが合成時にバリデーションされ、デプロイ前にエラーを検出可能
  • S3: ライフサイクルルールの遷移設定が合成時にバリデーションされ、設定ミスを早期発見
  • バリデーション強化: CloudWatch LogsでValidationErrorが導入され、エラーハンドリングがより明確に

Alpha モジュールでは、Scheduler TargetsのFirehose関連クラスが名前変更されているため、アップグレード時は移行が必要です。

詳細なリリースノートはGitHubのリリースページをご確認ください。