概要
AWS CDK v2.244.0では、ECSサービスにforceNewDeployment()メソッドが追加され、タスク定義を変更せずに新しいデプロイをトリガーできるようになりました。また、RDSのParameterGroupを独立したリソースとして明示的に作成できるforInstance()/forCluster()静的メソッドが追加されています。さらに、CDKで発生する全エラーにエラーコードが付与され、Helm v4への対応、AspectsとMixins間の変換ユーティリティの導入など、多岐にわたる改善が含まれています。
新機能
ECS: forceNewDeployment メソッドの追加 (#35726)
BaseServiceクラス(FargateService、Ec2Serviceなどの基底クラス)にforceNewDeployment()メソッドが追加されました。サービス定義に変更がなくてもECSで新しいデプロイをトリガーできるため、同じタグの最新コンテナイメージを取り込みたい場合などに便利です。
メソッドシグネチャ:
public forceNewDeployment(nonce?: string): void
| パラメータ | 型 | 説明 |
|---|---|---|
nonce | string (オプション) | 新しいデプロイを発火させる一意の文字列(1〜255文字)。未指定時はタイムスタンプ(ISO 8601形式)が自動生成される |
重要な注意事項:
nonceを指定しない場合、毎回new Date().toISOString()が生成されるため、cdk synthするたびにテンプレートが変わり、cdk deployするたびに新デプロイが発火します- 再デプロイのタイミングを制御したい場合は、安定したnonce(イメージダイジェストやバージョン文字列など)を渡してください
- デプロイメントコントローラーが
ECSの場合のみ利用可能(CODE_DEPLOYやEXTERNALではValidationErrorがスローされます)
使用例:
import * as ecs from 'aws-cdk-lib/aws-ecs';
declare const cluster: ecs.Cluster;
declare const taskDefinition: ecs.TaskDefinition;
const service = new ecs.FargateService(this, 'Service', {
cluster,
taskDefinition,
});
// パターン1: nonceを指定しない(毎回のデプロイで新デプロイをトリガー)
service.forceNewDeployment();
// パターン2: 安定したnonceを指定(意図したタイミングでのみ再デプロイ)
service.forceNewDeployment('my-custom-nonce-v2');
// パターン3: イメージダイジェストをnonceとして使う実用パターン
declare const imageDigest: string;
service.forceNewDeployment(imageDigest); // イメージが変わったときだけ再デプロイ
内部的には、以下のCloudFormationプロパティが生成されます:
{
"ForceNewDeployment": {
"EnableForceNewDeployment": true,
"ForceNewDeploymentNonce": "<指定したnonce、またはISO 8601タイムスタンプ>"
}
}
RDS: 独立したParameterGroupの作成サポート (#37165)
ParameterGroupクラスに、インスタンス/クラスターにバインドされていない独立した(standalone)パラメータグループを明示的に作成する2つの静的ファクトリメソッドが追加されました。
従来、ParameterGroupは遅延生成パターン(lazy creation)を採用しており、bindToInstance()/bindToCluster()が呼ばれる(もしくはDatabaseInstance/DatabaseClusterに渡される)まで実際のCloudFormationリソースは生成されませんでした。そのため、単独でパラメータグループだけを作成したいユースケースに対応できませんでした。
新しい静的メソッド:
| メソッド | 生成されるリソース | 用途 |
|---|---|---|
ParameterGroup.forInstance(scope, id, props) | AWS::RDS::DBParameterGroup | DBインスタンス用の独立したパラメータグループ |
ParameterGroup.forCluster(scope, id, props) | AWS::RDS::DBClusterParameterGroup | DBクラスター用の独立したパラメータグループ |
ParameterGroupPropsの主なプロパティ(既存):
| プロパティ | 型 | 説明 |
|---|---|---|
engine | IEngine | 対象のデータベースエンジン(必須) |
description | string | パラメータグループの説明文 |
parameters | { [key: string]: string } | パラメータのキーと値のマップ |
name | string | パラメータグループ名(未指定時はCloudFormationが生成) |
removalPolicy | RemovalPolicy | スタック削除時の挙動 |
使用例(インスタンス用):
import * as rds from 'aws-cdk-lib/aws-rds';
const instanceParameterGroup = rds.ParameterGroup.forInstance(this, 'InstanceParameterGroup', {
engine: rds.DatabaseInstanceEngine.mysql({
version: rds.MysqlEngineVersion.VER_8_0_35, // 対象エンジンとバージョン
}),
description: 'Parameter group for MySQL', // 説明文
parameters: {
max_connections: '150', // 最大接続数
slow_query_log: '1', // スロークエリログを有効化
},
name: 'my-instance-parameter-group', // パラメータグループ名(省略可)
});
使用例(クラスター用):
const clusterParameterGroup = rds.ParameterGroup.forCluster(this, 'ClusterParameterGroup', {
engine: rds.DatabaseClusterEngine.auroraMysql({
version: rds.AuroraMysqlEngineVersion.VER_3_04_0, // Aurora MySQLエンジンバージョン
}),
description: 'Parameter group for Aurora MySQL',
parameters: {
aurora_parallel_query: '1', // Auroraのパラレルクエリを有効化
},
});
CodeBuild: macOS 26 ランナーのサポート (#37240)
MacBuildImageに macOS 26(aws/codebuild/macos-arm-base:26)が追加されました。CodeBuildがmacOS base:26イメージをサポートしたことに対応した変更です。
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
const fleet = new codebuild.Fleet(this, 'MacOsFleet', {
computeType: codebuild.FleetComputeType.MEDIUM,
environmentType: codebuild.EnvironmentType.MAC_ARM,
baseCapacity: 1,
});
new codebuild.Project(this, 'Project', {
source: codebuild.Source.gitHub({
owner: 'my-org',
repo: 'my-repo',
}),
environment: {
buildImage: codebuild.MacBuildImage.BASE_26, // 新規: macOS 26 ランナー
fleet,
},
});
利用可能なMacBuildImage定数:
| 定数 | 対応イメージ |
|---|---|
MacBuildImage.BASE_14 | aws/codebuild/macos-arm-base:14 |
MacBuildImage.BASE_15 | aws/codebuild/macos-arm-base:15 |
MacBuildImage.BASE_26 | aws/codebuild/macos-arm-base:26(新規追加) |
Mixins: Aspects と Mixins 間の変換ヘルパー (#37235)
aws-cdk-lib/coreにShimsクラスが追加され、AspectsとMixinsを相互に変換できるようになりました。両者はビジターパターンの実装ですが、Mixinsは即時適用(命令的)、Aspectsはsynthesisフェーズで適用(宣言的)という違いがあります。既存のAspectをMixinとして再利用したい場合などに有用です。
API:
| メソッド | 用途 | 挙動 |
|---|---|---|
Shims.asMixin(aspect) | AspectをMixinに変換 | supports()フィルタが無いため、全てのconstructに適用される |
Shims.asAspect(mixin) | MixinをAspectに変換 | MixinのMixin.supports()でフィルタされる(サポートされないconstructは静かにスキップ) |
使用例:
import { Aspects, Mixins, Shims } from 'aws-cdk-lib';
// 既存のAspectをMixinとして即時適用する
const versioningMixin = Shims.asMixin(new EnableBucketVersioning());
Mixins.of(scope).apply(versioningMixin);
// 既存のMixinをAspectとしてsynthesisフェーズまで適用を遅延する
const publicAccessAspect = Shims.asAspect(new BucketBlockPublicAccess());
Aspects.of(scope).add(publicAccessAspect);
spec2cdk: Grantsクラスに actions() メソッドの自動生成 (#36987)
<Resource>Grantsクラス(SNSのTopicGrantsなど)に、任意のアクションを付与できる汎用メソッドactions()が自動生成されるようになりました。grants.jsonで定義された具体的なメソッド(publish、subscribeなど)に加えて、ユーザーが任意の権限を付与できる逃げ道が提供されます。
メソッドシグネチャ:
// 通常のリソース
public actions(grantee: iam.IGrantable, actions: Array<string>, options: PermissionsOptions): iam.Grant;
// 暗号化可能なリソース(KMSキーを持つ)
public actions(grantee: iam.IGrantable, actions: Array<string>, options: EncryptedPermissionsOptions): iam.Grant;
オプションの型定義:
export interface PermissionsOptions {
/**
* 権限を付与するリソースのARN。
* @default - 対象リソースのARN
*/
readonly resourceArns?: Array<string>;
}
export interface EncryptedPermissionsOptions extends PermissionsOptions {
/**
* 付与するKMSキーのアクション。
* @default - KMSキーへの権限は付与されない
*/
readonly keyActions?: Array<string>;
}
使用例:
import * as sns from 'aws-cdk-lib/aws-sns';
import * as iam from 'aws-cdk-lib/aws-iam';
declare const topic: sns.Topic;
declare const role: iam.Role;
// SNS Topicに対して任意のアクションを付与
topic.grants.actions(role, ['sns:Publish', 'sns:ListSubscriptions'], {
keyActions: ['kms:Decrypt', 'kms:GenerateDataKey*'], // KMSキーに必要な操作
});
L1 CloudFormation リソース定義の更新 (#37260)
最新のAWS CloudFormation リソース仕様に基づいてL1コンストラクトが更新されました。主な変更点:
- Bedrock AgentCore:
Evaluator、OnlineEvaluationConfig、PolicyEngineにARNテンプレートを追加 - DevOpsAgent:
ServiceリソースにARNテンプレートを追加 - ECR:
ECRImageAction・ECRReferrerActionイベントにlast-activated-at、target-storage-classプロパティを追加 - NetworkFirewall: 3つの新イベント(
FirewallAttachmentStatusChanged、FirewallConfigurationChanged、FirewallTransitGatewayAttachmentStatusChanged)を追加 - DirectoryService:
MicrosoftADのARNテンプレートを修正 - Pinpoint:
InAppTemplateのARNテンプレートを/SMSから/VOICEに修正 - RAM:
PermissionのARNテンプレートからリージョン部分を削除(RAMはグローバルサービス)
バグ修正
EKS: Helm v4 互換性のための OCI チャート取り扱いの修正 (#37142)
kubectl-v35にバンドルされた Helm v4 でLocateChartの挙動が変わり、--repo指定時にローカルのチャートパスチェックがスキップされるようになりました(Helm v3ではローカルパスが優先されていた)。
修正前の問題:
OCIチャートをローカルに取得した後、CDKハンドラがhelm upgradeにローカルチャートパスと--repo/--versionの両方を渡していたため、Helm v4で以下のエラーが発生していました:
failed to perform FetchReference on source: invalid reference
修正内容:
v1・v2両方のHelmハンドラで、OCIチャートをローカルにプルした後にrepositoryとversionをクリアするように変更しました。これにより、helm upgradeにはローカルチャートパスのみが渡され、Helm v3/v4の両方で正しく動作します。
修正後の使い方(ユーザー側のコードに変更は不要):
import * as eks from 'aws-cdk-lib/aws-eks';
declare const cluster: eks.Cluster;
// OCIチャートからのHelmインストールが Helm v4 でも正しく動作するようになった
cluster.addHelmChart('MyChart', {
chart: 'my-chart',
repository: 'oci://public.ecr.aws/my-org/charts', // OCIリポジトリ
version: '1.2.3',
namespace: 'default',
});
また、EKSがKubernetes 1.33以降でAL2 AMIサポートを打ち切ったことに伴い、integテストもAL2023への移行・k8s 1.32ピン留めが行われています。
aws-cdk-lib / core: 全エラーにエラーコードを付与 (#36934、#37270)
CDKで発生するすべての検証エラーおよびエラーアノテーションに、一意のエラーコード(例: @aws-cdk/aws-ec2:... のような識別子)が付与されるようになりました。これにより、エラー発生時の検索・トラブルシューティング・ナレッジベース化が容易になります。
#36934: すべてのValidationError等にエラーコードを追加#37270:Annotations.addError()/addWarning()等のエラーアノテーションにもエラーコードを追加
エラーコードは意図的に抑制不可(suppressできない)仕様となっており、ユーザーが頻繁に遭遇するエラーを追跡して改善につなげる目的があります。ユーザー側のコード変更は不要です。
Alphaモジュール (2.244.0-alpha.0)
Bug Fixes
kinesisanalytics-flink-alpha: 非推奨のFlinkランタイムを@deprecatedとしてマーク (#37155)
Amazon Managed Service for Apache Flinkで廃止された(もしくは廃止予定の)Flinkランタイムバージョンに@deprecatedタグが付与されました。
非推奨化されたランタイム:
| ランタイム | 状況 |
|---|---|
Runtime.FLINK_1_6 | 2025年2月にサポート終了 |
Runtime.FLINK_1_8 | 2025年7月にサポート終了 |
Runtime.FLINK_1_11 | 2025年2月にサポート終了 |
Runtime.FLINK_1_13 | 2025年10月16日にサポート終了 |
これらを使用しているコードでは@deprecated警告がIDEに表示されます。現在サポートされているランタイム(FLINK_1_15、FLINK_1_18、FLINK_1_19、FLINK_1_20)への移行が推奨されます。
修正後の正しい使い方:
import * as flink from '@aws-cdk/aws-kinesisanalytics-flink-alpha';
new flink.Application(this, 'MyApplication', {
runtime: flink.Runtime.FLINK_1_20, // 最新のサポート対象バージョンを使用
code: flink.ApplicationCode.fromAsset('./my-app.jar'),
});
まとめ
AWS CDK v2.244.0は、運用性を向上させる新APIの追加と基盤整備が主な内容です。
主なポイント:
- ECS
forceNewDeployment(): 長年の要望(#27762)に応える形で、タスク定義を変えずにサービスの再デプロイをトリガーできるようになりました。ただし、nonceを指定しないと毎デプロイで発火するため注意が必要です - RDS
ParameterGroup.forInstance()/forCluster(): #9741で要望されていた独立したパラメータグループ作成が正式サポートされました - 全エラーにエラーコード: トラブルシューティング・ナレッジ共有がしやすくなりました
- Helm v4 対応: EKSクラスターでOCI由来のHelmチャートを使用している場合、v4環境でも正しく動作するようになりました
- Mixins × Aspects の相互変換: 既存のAspectをMixinとして再利用(またはその逆)が
Shimsで簡単に行えるようになりました