概要
AWS CDK v2.204.0では、API Gateway V2でステージ変数がサポートされ、HTTP APIとWebSocket APIで環境ごとの設定を柔軟に管理できるようになりました。CloudWatch Metricsにはidとvisibleプロパティが追加され、メトリクスの識別や表示制御がより簡単になりました。また、lambda-python-alphaモジュールでは高速なパッケージマネージャーuvのサポートが追加されています。
新機能
API Gateway V2: ステージ変数のサポート
HTTP APIとWebSocket APIで**ステージ変数(Stage Variables)**がサポートされました。ステージ変数を使用することで、環境ごとに異なる設定値を管理でき、同じAPIを異なる環境(開発、ステージング、本番など)で柔軟に使用できます。
主な機能
- HttpStageとWebSocketStageに
stageVariablesプロパティを追加 - ステージごとに異なる設定値(エンドポイントURL、バージョン番号など)を定義可能
- Lambda統合やHTTP統合でステージ変数を参照可能
HTTP APIでの使用例
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
import * as integrations from 'aws-cdk-lib/aws-apigatewayv2-integrations';
const httpApi = new apigatewayv2.HttpApi(this, 'HttpApi');
// ステージ変数を使用してステージを定義
const prodStage = new apigatewayv2.HttpStage(this, 'ProdStage', {
httpApi,
stageName: 'prod',
// ステージ変数の定義
stageVariables: {
environment: 'production', // 環境識別子
backendUrl: 'https://api.prod.example.com', // バックエンドURL
version: 'v1', // APIバージョン
maxRetries: '3', // 最大リトライ回数
},
});
const devStage = new apigatewayv2.HttpStage(this, 'DevStage', {
httpApi,
stageName: 'dev',
stageVariables: {
environment: 'development',
backendUrl: 'https://api.dev.example.com',
version: 'v1-beta',
maxRetries: '1',
},
});
WebSocket APIでの使用例
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
const webSocketApi = new apigatewayv2.WebSocketApi(this, 'WebSocketApi', {
// WebSocket API設定
});
// WebSocket APIのステージ変数
const wsStage = new apigatewayv2.WebSocketStage(this, 'WsStage', {
webSocketApi,
stageName: 'prod',
// WebSocket接続設定をステージ変数で管理
stageVariables: {
connectionTimeout: '300', // 接続タイムアウト(秒)
messageRetention: '7200', // メッセージ保持時間(秒)
lambdaAlias: 'prod', // Lambda関数のエイリアス
},
});
CloudWatch: Metricにidとvisibleプロパティを追加
CloudWatch Metricsに**idプロパティとvisible**プロパティが追加されました。これにより、ダッシュボードやアラームでメトリクスをより柔軟に制御できるようになります。
主な機能
- id: メトリクスに一意の識別子を割り当て(デフォルト: 自動生成)
- visible: メトリクスの表示/非表示を制御(デフォルト: true)
- Math Expression(計算式メトリクス)で非表示メトリクスを参照可能
使用例: 計算式で中間メトリクスを非表示にする
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
// メトリクス1: 表示(visible: true、デフォルト)
const metric1 = new cloudwatch.Metric({
namespace: 'MyApp',
metricName: 'Requests',
id: 'm1', // メトリクスID
statistic: 'Sum',
period: Duration.minutes(5),
});
// メトリクス2: 非表示(計算用)
const metric2 = new cloudwatch.Metric({
namespace: 'MyApp',
metricName: 'Errors',
id: 'm2', // メトリクスID
statistic: 'Sum',
period: Duration.minutes(5),
visible: false, // ダッシュボードで非表示
});
// Math Expressionで非表示メトリクスを使用
const errorRate = new cloudwatch.MathExpression({
expression: 'm2 / m1 * 100', // エラー率を計算
usingMetrics: {
m1: metric1,
m2: metric2, // 非表示だが計算には使用
},
label: 'Error Rate (%)',
});
// ダッシュボードに追加(errorRateのみ表示)
const dashboard = new cloudwatch.Dashboard(this, 'Dashboard', {
dashboardName: 'MyAppDashboard',
});
dashboard.addWidgets(
new cloudwatch.GraphWidget({
title: 'Error Rate',
left: [errorRate], // 計算結果のみ表示
// metric2は非表示だが計算に使用される
})
);
使用例: 複数メトリクスの識別
// 複数メトリクスに明示的なIDを割り当て
const cpuMetric = new cloudwatch.Metric({
namespace: 'AWS/EC2',
metricName: 'CPUUtilization',
id: 'cpu_metric', // 明示的なID
dimensionsMap: {
InstanceId: 'i-1234567890abcdef0',
},
});
const memoryMetric = new cloudwatch.Metric({
namespace: 'CWAgent',
metricName: 'mem_used_percent',
id: 'memory_metric', // 明示的なID
dimensionsMap: {
InstanceId: 'i-1234567890abcdef0',
},
visible: true, // 表示(デフォルト)
});
Feature Flagsの Cloud Assembly への報告
Feature Flags(機能フラグ)の情報がCloud Assemblyに含まれるようになりました。これにより、デプロイ時にどのフラグが有効化されているかをより明確に追跡できます。
Region Info: eusc-de リージョンのサポート追加
新しいAWSリージョンeusc-de(欧州ソブリンクラウド - ドイツ)のサポートが追加されました。
関連PR: #34860
Alphaモジュール (2.204.0-alpha.0)
lambda-python-alpha: uvによる依存関係管理のサポート
Python Lambda関数の依存関係管理でuv(高速Pythonパッケージマネージャー)がサポートされました。uvはRustで実装されており、pipやpoetryよりも大幅に高速な依存関係のインストールが可能です。
主な機能
uv.lockファイルの自動検出: プロジェクトにuv.lockが存在する場合、uvを使用して依存関係をインストールuv pip syncによる高速インストール: 従来のpip installよりも高速に依存関係を解決- 既存のpipenv、poetry、requirements.txtと共存可能
使用例
import * as lambda from 'aws-cdk-lib/aws-lambda';
import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha';
// uv.lockを使用したPython Lambda関数
const uvFunction = new PythonFunction(this, 'UvFunction', {
entry: 'lambda-handler-uv', // uv.lockを含むディレクトリ
runtime: lambda.Runtime.PYTHON_3_12,
index: 'index.py',
handler: 'handler',
// uv.lockが存在する場合、自動的にuvを使用
});
プロジェクト構成例
lambda-handler-uv/
├── index.py # Lambda関数のコード
├── pyproject.toml # プロジェクト設定
└── uv.lock # uvによる依存関係ロックファイル
pyproject.toml の例
[project]
name = "my-lambda-function"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"requests>=2.31.0",
"boto3>=1.34.0",
]
依存関係の優先順位
PythonFunctionは以下の順序で依存関係管理ツールを検出します:
- Pipenv:
PipfileとPipfile.lock - Poetry:
pyproject.tomlとpoetry.lock - uv:
pyproject.tomlとuv.lock(新規追加) - pip:
requirements.txt
関連Issue: #31238, #32413 関連PR: #33880
バグ修正
ECR Assets: .dockerignoreのネストされた除外処理の修正
.dockerignoreファイルでネストされた除外パターンが正しく処理されない問題が修正されました。これにより、Dockerイメージビルド時のファイル除外がより正確に動作します。
影響範囲: ECR Assetsを使用したDockerイメージのビルド
CLI 2.1017.0/2.1018.0との互換性問題の修正
CLI バージョン 2.1017.0 および 2.1018.0 で「Invalid Assembly Manifest」エラーが発生する問題が修正されました。
影響範囲: CDK CLI v2.1017.0-2.1018.0を使用している場合
まとめ
AWS CDK v2.204.0は、API Gateway V2とCloudWatchの機能強化により、より柔軟なアプリケーション設定とメトリクス管理を実現しています。特に:
- API Gateway V2のステージ変数により、環境ごとの設定管理が容易に
- CloudWatch Metricsのidとvisibleプロパティにより、複雑な計算式やダッシュボード設計が簡素化
- lambda-python-alphaのuvサポートにより、Python Lambda関数の依存関係インストールが高速化
また、重要なバグ修正により、Dockerイメージビルドとツールチェーンの安定性が向上しています。
詳細については、公式リリースノートをご確認ください。