概要
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_256、aws: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のバリデーションルールが適用されます
- トークン値の場合はバリデーションがスキップされます(デプロイ時に検証)
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)のtransitionDateとtransitionAfterのバリデーションが追加されました。
修正内容:
transitionDateとtransitionAfterのどちらか一方のみを指定する必要があります- 両方指定した場合、または両方未指定の場合は合成時にエラーになります
- これまではデプロイ時にエラーとなっていましたが、合成時に検出できるようになりました
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
BucketDeploymentでSource.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,
});
移行方法:
KinesisDataFirehosePutRecordのインポートをFirehosePutRecordに変更- コンストラクタ呼び出しも
FirehosePutRecordに変更 - その他のプロパティや動作は変更なし
理由: 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のリリースページをご確認ください。