概要
AWS CDK v2.189.1は、Aspectの適用優先度に関する重要なバグ修正を含むパッチリリースです。v2.172.0で導入されたAspect優先度の変更により、暗黙的に適用されるAspectとユーザー定義のAspectの実行順序が意図せず変わってしまう問題を修正しています。
バグ修正
Aspectの優先度処理の修正
影響を受けるモジュール: @aws-cdk/core
問題の詳細:
v2.172.0で導入されたPR #32333により、CDKが自動的に適用する暗黙的なAspect(mutating Aspects)にMUTATING優先度(200)が設定されるようになりました。この変更により、ユーザーが定義したAspect(優先度DEFAULT: 500)が常に後から実行されるようになり、以下の影響が発生していました:
- v2.172.0以前: 暗黙的なAspectとユーザー定義Aspectの実行順序は、コンストラクトツリー内の配置場所に依存
- v2.172.0以降: ユーザー定義Aspectが常に最後に実行される(優先度が高いため)
この動作変更により、既存のコードで暗黙的なAspectの設定をユーザー定義Aspectで上書きしようとしていた場合、逆にユーザー定義Aspectが暗黙的なAspectを上書きしてしまう問題が発生していました。
修正内容:
v2.189.1では、v2.172.0以前の動作に戻しつつ、新しい機能フラグを導入することで、必要に応じて新しい動作を有効化できるようになりました。
{
"context": {
"@aws-cdk/core:aspectPrioritiesMutating": true
}
}
この機能フラグを有効にすると、CDKが自動的に適用するAspectにMUTATING優先度(200)が設定されます。
影響を受けるコンポーネント:
以下のコンポーネントで暗黙的に適用されるAspectが修正されました:
aws-autoscaling: Auto Scaling Groupaws-backup: Backup Selectionaws-ec2: EC2 Instanceaws-ecs: ECS Clusteraws-iam: IAM Role, Permissions Boundaryaws-servicecatalog: Portfolioaws-servicecatalogappregistry-alpha: Application Associatorcore: Stack, Stage, Removal Policycustom-resources: Custom Resource Config
移行ガイド:
-
既存の動作を維持したい場合: 何もする必要はありません。v2.189.1はデフォルトでv2.172.0以前の動作に戻ります。
-
新しい優先度システムを使用したい場合:
cdk.jsonに以下の設定を追加してください:
{
"context": {
"@aws-cdk/core:aspectPrioritiesMutating": true
}
}
- カスタムAspectに明示的な優先度を設定している場合:
- すでに
MUTATING優先度を設定している場合、この変更の影響は受けません - 機能フラグの有無に関わらず、現在の動作が維持されます
- すでに
コード例:
import * as cdk from 'aws-cdk-lib';
import * as iam from 'aws-cdk-lib/aws-iam';
import { Aspects, IAspect } from 'aws-cdk-lib';
// カスタムAspectの定義
class CustomPermissionsBoundaryAspect implements IAspect {
constructor(private readonly boundaryArn: string) {}
public visit(node: cdk.IConstruct): void {
if (node instanceof iam.Role) {
// カスタムのPermissions Boundaryを適用
PermissionsBoundary.of(node).apply(
iam.ManagedPolicy.fromManagedPolicyArn(
node,
'CustomBoundary',
this.boundaryArn
)
);
}
}
}
const app = new cdk.App({
context: {
// 新しい優先度システムを有効化(オプション)
'@aws-cdk/core:aspectPrioritiesMutating': true,
},
});
const stack = new cdk.Stack(app, 'MyStack');
// IAM Roleの作成(CDKが暗黙的にAspectを適用する可能性がある)
const role = new iam.Role(stack, 'MyRole', {
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
});
// カスタムAspectの適用
// 機能フラグが無効(デフォルト): 実行順序はツリー内の位置に依存
// 機能フラグが有効: このカスタムAspectが暗黙的なAspectより後に実行される
Aspects.of(stack).add(new CustomPermissionsBoundaryAspect('arn:aws:iam::123456789012:policy/MyBoundary'));
優先度を明示的に設定する場合:
import { Aspects, AspectPriority } from 'aws-cdk-lib';
// 優先度を明示的に設定したカスタムAspect
Aspects.of(stack).add(
new CustomPermissionsBoundaryAspect('arn:aws:iam::123456789012:policy/MyBoundary'),
{
priority: AspectPriority.MUTATING, // 優先度200(暗黙的なAspectと同じ)
}
);
// より低い優先度を設定(後で実行される)
Aspects.of(stack).add(
new CustomPermissionsBoundaryAspect('arn:aws:iam::123456789012:policy/MyBoundary'),
{
priority: AspectPriority.DEFAULT, // 優先度500(デフォルト)
}
);
関連リソース:
- PR #34132: https://github.com/aws/aws-cdk/pull/34132
- 元の変更(v2.172.0): PR #32333
Alpha モジュール
v2.189.1-alpha.0では、特に変更はありません。
まとめ
v2.189.1は、Aspect優先度に関する重要なバグ修正を含むパッチリリースです。v2.172.0で導入された変更により既存コードの動作が変わってしまった問題を修正し、機能フラグによって新旧の動作を選択できるようになりました。
既存のCDKアプリケーションでカスタムAspectを使用している場合、特にIAM PermissionsBoundaryやリソースのタグ付けなどを行っている場合は、この修正により動作が元に戻ることに注意してください。新しい優先度システムを使用したい場合は、@aws-cdk/core:aspectPrioritiesMutating機能フラグを有効にすることを検討してください。