概要
AWS CDK v2.217.0では、CloudFormationリソース定義の更新が行われました。また、CloudFront Function、KMS Alias、Lambda Version、RDSに関する重要なバグ修正が含まれています。特に、ARN参照やリソース解決に関する問題が修正され、クロススタック参照やエクスポート時の安定性が向上しています。
新機能
L1 CloudFormationリソース定義の更新
CloudFormationの最新リソース定義が取り込まれ、新しいプロパティやリソースタイプが利用可能になりました。
これにより、最新のAWSサービスの機能をCDKから利用できるようになります。
バグ修正
CloudFront: Function ARN参照の修正
問題: CloudFront FunctionのARN参照がGetAttからRefに変更されたことで、ARNを別スタックにエクスポートする際にCloudFormationがエラーを返す問題がありました。
修正内容: L2コンストラクトの実装をオーバーライドし、以前と同じGetAtt式を返すように修正しました。
影響範囲: CloudFront Functionを使用してクロススタック参照を行っている場合、この修正により既存のスタック構成が安定します。
// CloudFront Function のクロススタック参照が安定して動作するようになりました
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
const myFunction = new cloudfront.Function(this, 'MyFunction', {
code: cloudfront.FunctionCode.fromFile({
filePath: 'function.js',
}),
runtime: cloudfront.FunctionRuntime.JS_2_0,
});
// 他のスタックにARNをエクスポートしても問題なし
new cdk.CfnOutput(this, 'FunctionArn', {
value: myFunction.functionArn,
exportName: 'MyFunctionArn',
});
関連PR: #35547
Core: gitignoreの否定パターンがサブディレクトリで正しく動作しない問題
問題: IgnoreMode.GITでアセットをバンドルする際、否定パターン(!*.htmlなど)で再インクルードすべきファイルが、ディレクトリ内にある場合に誤って除外される問題がありました。
例:
- index.html
- app/
- component.js
- index.html
- home.html
除外パターン['*', '!*.html', '!*/']を使用した場合、ルートのindex.htmlのみが含まれ、appフォルダ内のHTMLファイルが誤って除外されていました。
修正内容: completelyIgnoresロジックを更新し、ディレクトリパスのチェック時に末尾スラッシュを含めるようにしました。これにより、ディレクトリ固有の否定パターン(!*/など)が正しくマッチするようになりました。
import * as lambda from 'aws-cdk-lib/aws-lambda';
// gitignoreの否定パターンがサブディレクトリで正しく動作するようになりました
new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('my-app', {
ignoreMode: cdk.IgnoreMode.GIT,
exclude: ['*', '!*.html', '!*/'], // サブディレクトリ内のHTMLファイルも正しく含まれる
}),
});
関連PR: #35511
KMS: Alias参照が基礎となるKeyに誤って解決される問題
問題: IAliasがIKeyを継承しているため、keyRefプロパティが基礎となるKeyを参照していましたが、これは誤りでした。Alias自身を参照すべきでした。
修正内容: AliasのIKeyRef実装を修正し、基礎となるKeyではなくAlias自身のフィールドを使用するようにしました。
import * as kms from 'aws-cdk-lib/aws-kms';
import * as iam from 'aws-cdk-lib/aws-iam';
const key = new kms.Key(this, 'MyKey');
const alias = key.addAlias('alias/my-key');
// Alias参照が正しくAlias自身を指すようになりました
const policy = new iam.PolicyStatement({
actions: ['kms:Decrypt'],
resources: [alias.keyArn], // Aliasの正しいARNを参照
});
関連PR: #35545
Lambda: function.latestVersionが誤ったARNを指す問題
問題: LatestVersionのIFunctionRef実装が、バージョンのARNではなく基礎となる関数のARNを返していました。
修正内容: KMS Aliasと同様の修正を適用し、バージョン自身のARNを返すようにしました。
import * as lambda from 'aws-cdk-lib/aws-lambda';
const myFunction = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
// latestVersionが正しいバージョンARNを返すようになりました
const version = myFunction.latestVersion;
console.log(version.functionArn); // バージョンの正しいARN(例: arn:aws:lambda:region:account:function:name:1)
関連PR: #35546
RDS: DatabaseInstance.fromLookupでconnectionsが使用できない問題
問題: DatabaseInstance.fromLookup()でルックアップしたインスタンスで、ポート値が文字列として扱われていたため、connectionsインターフェースを使用してアクセス許可を設定する際に検証エラーが発生していました。CfnSecurityGroupIngressPropsはポート値を数値として要求するためです。
修正内容: fromLookupメソッドでポート文字列を数値に変換するように修正しました。
import * as rds from 'aws-cdk-lib/aws-rds';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
// ルックアップしたRDSインスタンスでconnectionsが使用できるようになりました
const instance = rds.DatabaseInstance.fromLookup(this, 'ExistingDB', {
dbInstanceIdentifier: 'my-database',
});
const vpc = ec2.Vpc.fromLookup(this, 'Vpc', { isDefault: true });
const securityGroup = new ec2.SecurityGroup(this, 'LambdaSG', { vpc });
// ポート値が正しく数値として扱われ、セキュリティグループの設定が可能に
instance.connections.allowFrom(securityGroup, ec2.Port.tcp(3306));
関連PR: #35193
リバート
DynamoDB: TableV2レプリカ暗号化でkeyArnの代わりにkeyIdを使用する変更のリバート
以前のリリースで行われた、TableV2のレプリカ暗号化でkeyArnの代わりにkeyIdを使用する変更がリバートされました。この変更により、元の動作に戻ります。
関連PR: #35568
Alphaモジュール
v2.217.0-alpha.0がリリースされました。Alphaモジュールに関する具体的な変更内容は、このリリースのリリースノートには記載されていません。
まとめ
AWS CDK v2.217.0は、主にバグ修正にフォーカスしたリリースです。特に、ARN参照とリソース解決に関する重要な問題が修正されており、CloudFront Function、KMS Alias、Lambda Version、RDSを使用している場合は、より安定した動作が期待できます。また、gitignoreの否定パターンの処理が改善され、アセットバンドリングの柔軟性が向上しました。
既存のアプリケーションへの影響は限定的ですが、上記のバグ修正により、クロススタック参照やリソースルックアップを使用している場合は、より信頼性の高い動作が保証されます。