AWS CDK v2.197.0 がリリースされました。このバージョンでは、CloudWatchの異常検知アラーム機能の正式サポート、カスタムリソースのランタイム更新、アセットバンドリングに関する重要なバグ修正が含まれています。
新機能
CloudWatch: 異常検知アラーム (#31232)
CloudWatchで、機械学習を活用した異常検知アラームが正式にサポートされました。この機能により、固定の閾値ではなく、メトリクスの通常の動作パターンから自動的に学習した動的な閾値でアラームを設定できます。
長年の懸案事項 (#10540) が解決され、異常検知バンドを使用した範囲ベースの比較演算子を使用するアラームが、デプロイ時に次のようなエラーで失敗する問題が修正されました:
ComparisonOperators for ranges require ThresholdMetricId to be set
(Service: AmazonCloudWatch; Status Code: 400; Error Code: ValidationError)
AnomalyDetectionAlarm クラス
新しい AnomalyDetectionAlarm クラスを使用すると、異常検知アラームを簡単に作成できます。このクラスは、異常検知バンドの設定とアラームの正しい構成を自動的に処理します。
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
import { Duration } from 'aws-cdk-lib';
// 監視対象のメトリクスを作成
const metric = new cloudwatch.Metric({
namespace: 'AWS/EC2',
metricName: 'CPUUtilization',
statistic: 'Average',
period: Duration.minutes(5),
});
// 異常検知アラームを作成
const alarm = new cloudwatch.AnomalyDetectionAlarm(this, 'AnomalyAlarm', {
metric: metric,
evaluationPeriods: 1,
// 標準偏差の数(デフォルト: 2)
stdDevs: 2,
// 比較演算子: バンドの外側、または上下いずれか一方
// デフォルト: LESS_THAN_LOWER_OR_GREATER_THAN_UPPER_THRESHOLD
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_LOWER_OR_GREATER_THAN_UPPER_THRESHOLD,
alarmDescription: 'メトリクスが予測バンドの外側にある場合にアラーム',
});
異常検知の比較演算子
異常検知アラームを作成する際は、以下のいずれかの比較演算子を使用する必要があります:
LESS_THAN_LOWER_OR_GREATER_THAN_UPPER_THRESHOLD- メトリクスがバンドの外側(上下いずれか)にある場合にアラームGREATER_THAN_UPPER_THRESHOLD- メトリクスがバンドの上側を超えた場合のみアラームLESS_THAN_LOWER_THRESHOLD- メトリクスがバンドの下側を下回った場合のみアラーム
Metric.anomalyDetectionFor() ヘルパーメソッド
既存のメトリクスから異常検知バンドを作成するための新しいヘルパーメソッドも追加されました。
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
import { Duration } from 'aws-cdk-lib';
const cpuMetric = new cloudwatch.Metric({
namespace: 'AWS/EC2',
metricName: 'CPUUtilization',
statistic: 'Average',
period: Duration.minutes(5),
});
// 異常検知バンドを作成
// ANOMALY_DETECTION_BAND() 関数を使用したMathExpressionラッパーを自動生成
const anomalyBand = cloudwatch.Metric.anomalyDetectionFor({
metric: cpuMetric,
stdDevs: 3, // 標準偏差を3に設定(より厳密な検知)
});
// 従来のアラームクラスでも使用可能
const alarm = new cloudwatch.Alarm(this, 'CustomAnomalyAlarm', {
metric: anomalyBand,
threshold: cloudwatch.Alarm.ANOMALY_DETECTION_NO_THRESHOLD,
evaluationPeriods: 2,
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_LOWER_THRESHOLD,
});
バリデーションの強化
通常のアラーム演算子と異常検知メトリクスを混在させないよう、適切なバリデーションが追加されました。誤った構成を防ぎ、デプロイエラーを未然に防ぎます。
カスタムリソース: Node.js 22ランタイムへの更新 (#34319)
カスタムリソースのデフォルトランタイムが、商用リージョン、中国リージョン、米国政府リージョンでNode.js 22に更新されました。
背景
Node.js 20は現在メンテナンスフェーズにあり、2026年4月30日にEOL(End of Life)を迎える予定です(Node.js リリーススケジュール)。これに伴い、CDKのカスタムリソースが最新のランタイムを使用するように更新されました。
変更内容
LATEST_NODE_RUNTIME_MAP が以下のリージョンで nodejs22.x に更新されました:
- 商用リージョン(AWS Standard)
- 中国リージョン(AWS China)
- 米国政府リージョン(AWS GovCloud)
注意: 分離リージョン(AWS Secret、AWS Top Secret)では、nodejs22.x がまだ利用できないため、引き続き nodejs18.x を使用します。
影響
この変更は既存のカスタムリソースに自動的に適用されます。特別な対応は不要ですが、カスタムリソースハンドラーがNode.js 22と互換性があることを確認してください。
import * as cdk from 'aws-cdk-lib';
import * as cr from 'aws-cdk-lib/custom-resources';
import * as lambda from 'aws-cdk-lib/aws-lambda';
// カスタムリソースプロバイダーは自動的にNode.js 22を使用
const provider = new cr.Provider(this, 'MyProvider', {
onEventHandler: new lambda.Function(this, 'OnEvent', {
runtime: lambda.Runtime.NODEJS_20_X, // ハンドラー自体は任意のランタイムを使用可能
handler: 'index.onEvent',
code: lambda.Code.fromAsset('lambda'),
}),
});
const customResource = new cdk.CustomResource(this, 'MyCustomResource', {
serviceToken: provider.serviceToken,
properties: {
key: 'value',
},
});
L1 CloudFormation リソース定義の更新 (#34497)
CloudFormationの最新リソース定義に対応し、新しいサービスとプロパティがCDKで利用可能になりました。
バグ修正
アセットバンドリング時の platform プロパティが無視される問題を修正 (#33865)
BundlingOptions の platform プロパティが、アセットバンドリング時に無視される問題が修正されました。これにより、異なるアーキテクチャ向けのアセットを正しくビルドできるようになりました。
問題
BundlingOptions の platform プロパティがドキュメントには記載されているものの、実際には AssetBundlingBindMount と AssetBundlingVolumeCopy でDockerコマンドのオプションとして渡されていませんでした。
修正内容
AssetBundlingBindMount.run() と AssetBundlingVolumeCopy.run() に platform: this.options.platform が追加され、Dockerに正しくプラットフォーム指定が渡されるようになりました。
使用例
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as cdk from 'aws-cdk-lib';
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda', {
bundling: {
image: lambda.Runtime.NODEJS_20_X.bundlingImage,
command: [
'bash', '-c',
'npm install && cp -r . /asset-output/',
],
// 修正: platform プロパティが正しく適用される
platform: 'linux/arm64', // ARM64アーキテクチャ向けにビルド
},
}),
architecture: lambda.Architecture.ARM_64,
});
この修正により、以下のシナリオで正しくビルドできるようになります:
- x86マシンでARM64向けのLambda関数をビルド
- ARM64マシンでx86_64向けのアセットをビルド
- マルチアーキテクチャ対応のアプリケーション開発
Lambda NodejsFunction: entry プロパティなしでのインスタンス化の不具合を修正 (#34498)
NodejsFunction を entry プロパティなしでインスタンス化すると失敗する問題が修正されました。
問題
entry プロパティが省略された場合、CDKは自動的にスタックファイルと同じ名前の .ts または .js ファイルを検索しますが、この処理が正しく動作していませんでした。
修正内容
自動ファイル検出ロジックが改善され、entry プロパティを省略した場合でも正しく動作するようになりました。
使用例
import * as lambda from 'aws-cdk-lib/aws-lambda-nodejs';
// entry プロパティを省略した場合、同じディレクトリの同名ファイルを自動検出
// 例: MyStack.ts の場合、MyStack.handler.ts または MyStack.handler.js を検索
const fn = new lambda.NodejsFunction(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
// entry プロパティは省略可能
});
// 明示的に指定することも可能(推奨)
const fn2 = new lambda.NodejsFunction(this, 'MyFunction2', {
runtime: lambda.Runtime.NODEJS_20_X,
entry: 'lambda/my-function.ts', // 明示的に指定
handler: 'handler',
});
Alphaモジュール
v2.197.0-alpha.0 では、特別な変更はありません。
まとめ
AWS CDK v2.197.0 は、CloudWatchの異常検知アラーム機能の正式サポートにより、より高度な監視とアラート設定が可能になりました。機械学習を活用した動的な閾値により、固定閾値では検出が難しい異常なパターンを自動的に検知できます。
カスタムリソースのNode.js 22ランタイムへの更新により、最新のNode.js機能とセキュリティアップデートが利用可能になります。Node.js 20のEOLを見据えた準備として、早めのアップグレードを推奨します。
アセットバンドリングの platform プロパティ修正により、クロスアーキテクチャビルドが正しく動作するようになり、ARM64とx86_64の両方のアーキテクチャを対象とした開発がより容易になりました。
破壊的変更はありませんので、安心してアップグレードできます。