Back to Releases
v2.189.1 2025年4月14日

AWS CDK v2.189.1 リリース解説

Aspect適用時の優先度に関する重要なバグ修正を含むパッチリリース

coreaspect

概要

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 Group
  • aws-backup: Backup Selection
  • aws-ec2: EC2 Instance
  • aws-ecs: ECS Cluster
  • aws-iam: IAM Role, Permissions Boundary
  • aws-servicecatalog: Portfolio
  • aws-servicecatalogappregistry-alpha: Application Associator
  • core: Stack, Stage, Removal Policy
  • custom-resources: Custom Resource Config

移行ガイド:

  1. 既存の動作を維持したい場合: 何もする必要はありません。v2.189.1はデフォルトでv2.172.0以前の動作に戻ります。

  2. 新しい優先度システムを使用したい場合: cdk.jsonに以下の設定を追加してください:

{
  "context": {
    "@aws-cdk/core:aspectPrioritiesMutating": true
  }
}
  1. カスタム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(デフォルト)
  }
);

関連リソース:

Alpha モジュール

v2.189.1-alpha.0では、特に変更はありません。

まとめ

v2.189.1は、Aspect優先度に関する重要なバグ修正を含むパッチリリースです。v2.172.0で導入された変更により既存コードの動作が変わってしまった問題を修正し、機能フラグによって新旧の動作を選択できるようになりました。

既存のCDKアプリケーションでカスタムAspectを使用している場合、特にIAM PermissionsBoundaryやリソースのタグ付けなどを行っている場合は、この修正により動作が元に戻ることに注意してください。新しい優先度システムを使用したい場合は、@aws-cdk/core:aspectPrioritiesMutating機能フラグを有効にすることを検討してください。