概要
AWS CDK v2.192.0 では、API Gateway の SpecRestApi に mode プロパティが追加され、OpenAPI 定義のマージ動作を制御できるようになりました。また、EventBridge Rule で IAM ロールを直接指定できるようになり、IAM Role を実際の AWS アカウントから検索してインポートする fromLookup() メソッドが追加されました。さらに、SES EmailIdentity を ARN からインポートする機能が追加され、Alpha モジュールとして Application Signals の L2 コンストラクトが導入されました。
新機能
API Gateway: SpecRestApi に mode プロパティを追加
SpecRestApi コンストラクトに mode プロパティが追加され、OpenAPI 仕様のマージ動作を制御できるようになりました。このプロパティは、既存の API に対して OpenAPI 定義をどのように適用するかを指定します。
設定可能な値:
RestApiMode.MERGE: 既存の API 定義とマージします(デフォルト)RestApiMode.OVERWRITE: 既存の API 定義を完全に上書きします
import * as apigateway from 'aws-cdk-lib/aws-apigateway';
import * as s3 from 'aws-cdk-lib/aws-s3';
const bucket = new s3.Bucket(this, 'MyBucket');
const apiDefinition = apigateway.ApiDefinition.fromBucket(
bucket,
'openapi-spec.yaml'
);
const api = new apigateway.SpecRestApi(this, 'MySpecRestApi', {
apiDefinition: apiDefinition,
// 新機能: mode プロパティで OpenAPI 定義のマージ動作を制御
mode: apigateway.RestApiMode.OVERWRITE, // 既存の定義を完全に上書き
});
この機能により、継続的デプロイメントや API の更新時に、既存の設定を保持するか完全に置き換えるかを明示的に制御できます。
関連PR: #34198
EventBridge: Rule で IAM ロールをサポート
EventBridge の Rule コンストラクトに role プロパティが追加され、ルールが使用する IAM ロールを直接指定できるようになりました。これまでは、ターゲットごとにロールを設定する必要がありましたが、ルールレベルでロールを指定できるようになったことで、より柔軟な権限管理が可能になります。
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as lambda from 'aws-cdk-lib/aws-lambda';
const fn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromInline('exports.handler = async () => {}'),
});
// カスタムロールを作成
const ruleRole = new iam.Role(this, 'RuleRole', {
assumedBy: new iam.ServicePrincipal('events.amazonaws.com'),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchEventsFullAccess'),
],
});
// 新機能: Rule に role プロパティを指定
const rule = new events.Rule(this, 'MyRule', {
schedule: events.Schedule.rate(Duration.minutes(5)),
role: ruleRole, // ルールレベルで IAM ロールを指定
});
rule.addTarget(new targets.LambdaFunction(fn));
この機能により、複数のターゲットに対して共通のロールを使用したり、組織のセキュリティポリシーに従って特定のロールを強制したりすることが容易になります。
IAM: Role.fromLookup() メソッドを追加
IAM Role に fromLookup() メソッドが追加され、実際の AWS アカウントに存在するロールを検索してインポートできるようになりました。この機能は、CloudFormation スタック外で作成されたロールを参照する場合や、ロールの存在を検証したい場合に便利です。
import * as iam from 'aws-cdk-lib/aws-iam';
// 新機能: 既存の IAM ロールを検索してインポート
const existingRole = iam.Role.fromLookup(this, 'ExistingRole', {
// ロール名で検索
roleName: 'MyExistingRole',
});
// インポートしたロールを他のリソースで使用
const bucket = new s3.Bucket(this, 'MyBucket', {
// インポートしたロールに権限を付与
});
bucket.grantRead(existingRole);
この機能は、新しい Context Provider を使用して実装されており、CDK の合成時に実際の AWS アカウントに問い合わせてロール情報を取得します。指定したロールが存在しない場合はエラーが発生するため、デプロイ前に依存関係の問題を検出できます。
注意事項:
- この機能を使用するには、CDK 実行時に AWS アカウントへのアクセス権限が必要です
- ロール情報はコンテキストにキャッシュされます
RDS: SQL Server エンジンバージョンの追加
RDS で新しい SQL Server エンジンバージョンのサポートが追加されました:
- SQL Server 2019: 15.00.4430.1.v1
- SQL Server 2022: 16.00.4185.3.v1
import * as rds from 'aws-cdk-lib/aws-rds';
const instance = new rds.DatabaseInstance(this, 'Instance', {
engine: rds.DatabaseInstanceEngine.sqlServerSe({
version: rds.SqlServerEngineVersion.VER_15_00_4430_1_V1, // 新バージョン
}),
instanceType: ec2.InstanceType.of(
ec2.InstanceClass.BURSTABLE3,
ec2.InstanceSize.MEDIUM
),
vpc,
});
関連PR: #34175
SES: EmailIdentity.fromEmailIdentityArn() を追加
SES の EmailIdentity に fromEmailIdentityArn() メソッドが追加され、ARN から既存のメールアイデンティティをインポートできるようになりました。これにより、他の CDK スタックで作成されたメールアイデンティティや、CDK 外で作成されたリソースを参照できます。
import * as ses from 'aws-cdk-lib/aws-ses';
// 新機能: ARN から既存の EmailIdentity をインポート
const emailIdentity = ses.EmailIdentity.fromEmailIdentityArn(
this,
'ImportedEmailIdentity',
'arn:aws:ses:us-east-1:123456789012:identity/example.com'
);
// インポートした EmailIdentity を使用して設定セットを作成
const configSet = new ses.ConfigurationSet(this, 'ConfigSet', {
// 設定セットの設定...
});
この機能により、クロススタック参照やマルチリージョン構成で一貫した方法でメールアイデンティティを管理できます。
Alpha モジュール
Application Signals: L2 コンストラクトの導入
AWS CloudWatch Application Signals の L2 コンストラクトが Alpha モジュールとして追加されました。Application Signals は、分散アプリケーションのパフォーマンスとヘルスメトリクスを自動的に収集・可視化するサービスです。
この新しいモジュール (@aws-cdk/aws-applicationsignals-alpha) は、ECS タスクで Application Signals を簡単に有効化するための抽象化を提供します。
主な機能:
- ECS 統合: ECS タスク定義に Application Signals の計装を自動的に追加
- 複数のデプロイモード: Sidecar、Daemon、Replica モードをサポート
- マルチ言語対応: Java、Python、Node.js、.NET の自動計装をサポート
- CloudWatch Agent 統合: メトリクスとトレースを CloudWatch に送信するエージェントの自動設定
import * as applicationsignals from '@aws-cdk/aws-applicationsignals-alpha';
import * as ecs from 'aws-cdk-lib/aws-ecs';
const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef');
const container = taskDefinition.addContainer('app', {
image: ecs.ContainerImage.fromRegistry('my-java-app'),
// アプリケーションコンテナの設定...
});
// 新機能 (Alpha): Application Signals を ECS タスクで有効化
applicationsignals.enableApplicationSignalsForEcs(this, {
taskDefinition,
// Java アプリケーションの自動計装を有効化
instrumentation: applicationsignals.EcsInstrumentation.java({
runtime: applicationsignals.JavaRuntime.JAVA_17,
}),
// CloudWatch Agent を Sidecar として実行
agentMode: applicationsignals.AgentMode.SIDECAR,
});
Python アプリケーションの例:
// Python アプリケーションの計装
applicationsignals.enableApplicationSignalsForEcs(this, {
taskDefinition,
instrumentation: applicationsignals.EcsInstrumentation.python({
runtime: applicationsignals.PythonRuntime.PYTHON_3_11,
}),
agentMode: applicationsignals.AgentMode.DAEMON,
});
Node.js アプリケーションの例:
// Node.js アプリケーションの計装
applicationsignals.enableApplicationSignalsForEcs(this, {
taskDefinition,
instrumentation: applicationsignals.EcsInstrumentation.nodejs({
runtime: applicationsignals.NodeRuntime.NODEJS_20,
}),
agentMode: applicationsignals.AgentMode.SIDECAR,
});
この Alpha モジュールを使用することで、手動で計装コードを追加したり、CloudWatch Agent を設定したりする必要がなくなり、Application Signals の有効化が大幅に簡素化されます。
注意事項:
- これは Alpha モジュールのため、API が変更される可能性があります
- 使用するには、パッケージを個別にインストールする必要があります:
npm install @aws-cdk/aws-applicationsignals-alpha
関連PR: #32931 RFC: aws-cdk-rfcs#672
バグ修正
EKS: aws-node-termination-handler チャートバージョンの更新
EKS クラスターで使用される aws-node-termination-handler Helm チャートのバージョンが更新されました。この修正により、最新のセキュリティパッチと機能改善が適用されます。
影響範囲:
- EKS クラスターでスポットインスタンスを使用している場合
aws-node-termination-handlerを有効化している場合
この更新は、ノードの適切な終了処理を改善し、ワークロードの中断を最小限に抑えます。
関連PR: #34218
まとめ
AWS CDK v2.192.0 は、複数のモジュールにわたって実用的な機能改善を提供しています。特に、IAM Role の fromLookup() メソッドは、既存のインフラストラクチャとの統合を大幅に簡素化します。API Gateway の mode プロパティと EventBridge Rule のロールサポートにより、より柔軟な API 管理とイベント駆動アーキテクチャの構築が可能になります。
Alpha モジュールとして追加された Application Signals の L2 コンストラクトは、マイクロサービスアーキテクチャのオブザーバビリティを向上させる重要な一歩です。本番環境での使用を検討する前に、Alpha 版としての制限事項を確認することをお勧めします。
RDS の SQL Server 最新バージョンサポートと SES の ARN インポート機能により、より多くのユースケースで CDK を活用できるようになりました。EKS のバグ修正も、本番環境でスポットインスタンスを使用する際の安定性向上に寄与します。