概要
AWS CDK v2.176.0では、複数のサービスに重要な機能追加が行われました。主な変更点として、API Gateway WebSocketのモック統合のカスタマイズ機能、ECS Container Insightsの拡張可観測性サポート、AppConfig環境の削除保護機能、そしてEventBridge Schedulerのユニバーサルターゲット対応(Alpha)が含まれています。また、CodeBuildの最新ビルドイメージの追加やRDSの不具合修正も実施されました。
新機能
API Gateway v2: WebSocketMockIntegration のプロパティ対応
WebSocket APIのモック統合で、リクエストテンプレートとテンプレート選択式が設定可能になりました。これまで他の統合タイプでは利用できていた機能が、モック統合でも利用できるようになります。
主な変更点:
WebSocketMockIntegrationPropsインターフェースの追加requestTemplatesプロパティ: リクエストペイロードに適用するVelocityテンプレートのマップtemplateSelectionExpressionプロパティ: 統合のテンプレート選択式
使用例:
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
import { WebSocketMockIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations';
// WebSocket API with Mock Integration
const webSocketApi = new apigatewayv2.WebSocketApi(this, 'MyWebSocketApi');
// モック統合の設定
const mockIntegration = new WebSocketMockIntegration('MockIntegration', {
// リクエストテンプレート: コンテンツタイプごとにVelocityテンプレートを定義
requestTemplates: {
'application/json': JSON.stringify({
statusCode: 200,
message: 'Mock response'
})
},
// テンプレート選択式: どのテンプレートを使用するかを決定
templateSelectionExpression: '$request.body.action'
});
// ルートに統合を追加
webSocketApi.addRoute('mock', {
integration: mockIntegration,
});
関連PR: #30622
CodeBuild: 新しいビルドイメージの追加
CodeBuildで利用可能な最新のビルドイメージが追加されました。AWS SDKのListCuratedEnvironmentImages APIと同期し、CDKから最新のイメージを使用できるようになります。
変更内容:
- Linux ARM アーキテクチャ向けの新しいビルドイメージを追加
- AWS が提供する最新のキュレート済み環境イメージに対応
使用例:
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
const project = new codebuild.Project(this, 'MyProject', {
buildSpec: codebuild.BuildSpec.fromObject({
version: '0.2',
phases: {
build: {
commands: ['echo "Building..."']
}
}
}),
// 最新のビルドイメージを使用
environment: {
buildImage: codebuild.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
computeType: codebuild.ComputeType.SMALL
}
});
関連PR: #32525
ECS: Container Insights の拡張可観測性サポート
ECSクラスターでContainer Insightsの拡張可観測性(Enhanced Observability)が設定できるようになりました。この機能により、より詳細なメトリクスとログデータを収集し、コンテナのパフォーマンスとトラブルシューティングを改善できます。
主な変更点:
ContainerInsightsenumにENHANCEDオプションを追加- 新しい
containerInsightsV2プロパティの追加 - 既存の
containerInsightsプロパティは非推奨(deprecated)となり、containerInsightsV2の使用を推奨
使用例:
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 2 });
// 拡張可観測性を有効にしたECSクラスター
const cluster = new ecs.Cluster(this, 'MyCluster', {
vpc,
// 拡張可観測性を有効化(推奨)
containerInsightsV2: ecs.ContainerInsights.ENHANCED,
});
// 従来の方法(非推奨)
const clusterOld = new ecs.Cluster(this, 'MyClusterOld', {
vpc,
containerInsights: true, // deprecated
});
ContainerInsights の設定オプション:
DISABLED: Container Insightsを無効化ENABLED: 基本的なContainer Insightsを有効化ENHANCED: 拡張可観測性を有効化(新機能)
関連PR: #32622
AppConfig: 環境の削除保護機能
AppConfig環境に削除保護機能が追加されました。誤って重要な環境を削除することを防ぐことができます。
主な変更点:
DeletionProtectionCheckenumの追加EnvironmentOptionsおよびEnvironmentPropsにdeletionProtectionCheckプロパティを追加
DeletionProtectionCheck の設定オプション:
ACCOUNT_DEFAULT: アカウントレベルの削除保護設定を使用(デフォルト)APPLY: 削除保護チェックを強制実行(アカウント設定に関係なく)BYPASS: 削除保護をバイパスして削除を許可
使用例:
import * as appconfig from 'aws-cdk-lib/aws-appconfig';
const app = new appconfig.Application(this, 'MyApp', {
applicationName: 'MyApplication',
});
// 削除保護を有効にした環境
const prodEnvironment = new appconfig.Environment(this, 'ProdEnvironment', {
application: app,
environmentName: 'production',
// 削除保護を強制的に適用(アカウント設定に関係なく)
deletionProtectionCheck: appconfig.DeletionProtectionCheck.APPLY,
});
// 開発環境では削除保護をバイパス
const devEnvironment = new appconfig.Environment(this, 'DevEnvironment', {
application: app,
environmentName: 'development',
// 削除保護をバイパス(開発環境の頻繁な作り直しを許可)
deletionProtectionCheck: appconfig.DeletionProtectionCheck.BYPASS,
});
// addEnvironment メソッドでも使用可能
app.addEnvironment('staging', {
// アカウントレベルの設定を使用(デフォルト)
deletionProtectionCheck: appconfig.DeletionProtectionCheck.ACCOUNT_DEFAULT,
});
関連PR: #32737
Alpha モジュール (2.176.0-alpha.0)
EventBridge Scheduler: ユニバーサルターゲット対応
EventBridge Schedulerのユニバーサルターゲット機能がAlphaモジュールに追加されました。これにより、幅広いAWS APIをスケジュールのターゲットとして呼び出すことができます。
主な機能:
Universalクラスの追加: 任意のAWS APIをターゲットとして設定可能- サービス名(小文字)とアクション名(camelCase)の検証
- 読み取り専用APIアクション(GET、Describe、Listなど)の自動除外
- IAMポリシーステートメントのカスタマイズ対応
使用例:
import * as scheduler from '@aws-cdk/aws-scheduler-alpha';
import { Universal } from '@aws-cdk/aws-scheduler-targets-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
// DynamoDBのPutItem APIを定期的に実行するスケジュール
const schedule = new scheduler.Schedule(this, 'MySchedule', {
schedule: scheduler.ScheduleExpression.rate(Duration.hours(1)),
target: new Universal({
// サービス名(小文字必須)
service: 'dynamodb',
// アクション名(camelCase必須)
action: 'putItem',
// IAMポリシーをカスタマイズ(オプション)
policyStatements: [
new iam.PolicyStatement({
actions: ['dynamodb:PutItem'],
resources: ['arn:aws:dynamodb:region:account:table/MyTable'],
}),
],
// ターゲットに渡すパラメータ
input: scheduler.ScheduleTargetInput.fromObject({
TableName: 'MyTable',
Item: {
id: { S: 'scheduled-item' },
timestamp: { N: '$.scheduledTime' }
}
}),
}),
});
// S3のCopyObject APIを使用した例
const s3CopySchedule = new scheduler.Schedule(this, 'S3CopySchedule', {
schedule: scheduler.ScheduleExpression.cron({ minute: '0', hour: '2' }),
target: new Universal({
service: 's3', // サービス名(小文字)
action: 'copyObject', // アクション名(camelCase)
policyStatements: [
new iam.PolicyStatement({
actions: ['s3:GetObject', 's3:PutObject'],
resources: ['arn:aws:s3:::my-bucket/*'],
}),
],
input: scheduler.ScheduleTargetInput.fromObject({
Bucket: 'my-bucket',
CopySource: '/source-bucket/source-key',
Key: 'destination-key'
}),
}),
});
制限事項:
- サービス名は小文字である必要があります
- アクション名はcamelCaseである必要があります
- 読み取り専用APIアクション(get、describe、list、selectなど)はサポートされていません
関連PR: #32341
MSK: クラスター名のバリデーション修正
MSK(Amazon Managed Streaming for Apache Kafka)のClusterクラスにおけるclusterNameのバリデーションロジックが修正されました。
関連PR: #32792
バグ修正
CLI: “no stack found in the main cloud assembly” エラーの修正
CDK CLIで特定の状況下で「メインクラウドアセンブリにスタックが見つかりません」というエラーが発生していた問題が修正されました。
関連PR: #32839
Core: 集約エラーのフォーマット修正
aws-cdk での集約エラーの正しいフォーマットが適用されるようになりました。複数のエラーが発生した際の出力が読みやすくなります。
関連PR: #32817
Elastic Load Balancing v2: IPv6インバウンドトラフィックの問題修正
デュアルスタック(IPv4/IPv6)でパブリックIPv4アドレスを持たないALBが、IPv6インバウンドトラフィックを正しく許可しない問題が修正されました。この修正はフィーチャーフラグの下で提供されます。
影響範囲:
- デュアルスタックALB
- パブリックIPv4アドレスなしの構成
- IPv6インバウンドトラフィック
関連PR: #32765
RDS: プロパティ名のスペルミス修正
RDSのclusterScailabilityTypeプロパティのスペルミスが修正され、正しいclusterScalabilityTypeに変更されました。
関連PR: #32825
RDS: MySQL 8.4.3 バージョン定義の修正
MySQL 8.4.3のバージョン定義が正しく設定されていなかった問題が修正されました。
関連PR: #32934
その他の変更
L1 CloudFormation リソース定義の更新
L1(CloudFormation)リソース定義が最新のCloudFormation仕様に更新されました。
関連PR: #32847
Revert: PRLinterのCodecov失敗時の動作変更
PRLinterがCodecovの失敗時にエラーとする変更がrevertされました。
関連PR: #32867
まとめ
AWS CDK v2.176.0は、複数のサービスに重要な機能追加と品質改善をもたらすリリースです。特に注目すべき点は以下の通りです:
- ECS Container Insightsの拡張可観測性: より詳細なメトリクスとログでコンテナの可観測性が向上
- AppConfig削除保護: 本番環境の誤削除を防ぐ重要な安全機能
- EventBridge Schedulerのユニバーサルターゲット(Alpha): 柔軟なスケジューリング機能の大幅な拡張
- API Gateway WebSocket統合の強化: より柔軟なモック統合の実装が可能に
既存のアプリケーションへの影響は最小限で、新機能は段階的に導入できます。特に、ECSを使用している場合はcontainerInsightsV2への移行を検討することをお勧めします。また、EventBridge Schedulerのユニバーサルターゲット機能は現在Alphaモジュールですが、強力な機能なので積極的に試してみる価値があります。
詳細な変更内容については、GitHub Releaseをご確認ください。