概要
このリリースの目玉は、@aws-cdk/aws-bedrock-agentcore-alpha モジュールが stable に昇格し、aws-cdk-lib/aws-bedrockagentcore として正式にリリースされた点です。加えて、合成 (synthesis) のパフォーマンス計測機能、アセットフィンガープリンティングキャッシュの永続化、EC2 C8A インスタンスタイプのサポートが追加され、合成速度を大きく改善する複数のバグ修正も含まれています。
リリース: v2.255.0
新機能
Bedrock AgentCore モジュールが stable に昇格 (#37876)
この機能でできること:
@aws-cdk/aws-bedrock-agentcore-alphaの主要なコンストラクトが stable に昇格し、aws-cdk-lib/aws-bedrockagentcoreとして利用できるようになりました。Policyサブモジュールのみ alpha のまま残ります。それ以外のコンストラクト (Gateway, Browser, CodeInterpreter, Memory など) はすべて stable 版への移行が推奨されます。
使用例 (移行):
// Before: alpha モジュール
import * as agentcore from '@aws-cdk/aws-bedrock-agentcore-alpha';
// After: stable モジュール
import * as agentcore from 'aws-cdk-lib/aws-bedrockagentcore';
ポイント:
- alpha からの昇格に伴い、いくつかのプロパティ名やシグネチャに破壊的変更があります。詳細は本記事の「破壊的変更」セクションを参照してください。
- 当面 alpha モジュールも残りますが、新規プロジェクトでは stable 版を使用してください。
合成パフォーマンスカウンタの出力 (#37843)
この機能でできること:
- 合成処理が遅い (デフォルトで 1 スタックあたり 10 秒以上) と判定された場合、CDK が自動的にパフォーマンスカウンタを出力します。CLI 側ではこれをテレメトリとして送信し、AWS CDK チームがボトルネック分析に活用します。
- パフォーマンス計測は Node.js の Performance Measurement APIs を利用し、ファイルシステムアクセスやサブプロセス起動など合成が遅くなりやすい箇所を自動的に計測します。
使用例 (レポーティングの無効化):
import { App } from 'aws-cdk-lib';
// App プロパティで無効化する方法
const app = new App({
performanceReporting: false,
});
または cdk.json のコンテキストキーで無効化:
{
"context": {
"aws:cdk:performance-reporting": false
}
}
ポイント:
- カウンタは
$CDK_PERF_COUNTERS_FILE環境変数で指定されたファイルに書き出されます。 - 出力されるカウンタの例:
phase:Construction、bundle:NodejsFunction、DockerImage.fromBuild、FileSystem.fingerprintなど、各処理にかかった時間 (ms) と呼び出し回数。 - ユーザー自身が
printPerfCounters()関数を使ってアプリケーションのプロファイリングに活用することも可能です。
アセットフィンガープリンティングキャッシュの永続化 (#37822)
この機能でできること:
- これまでメモリ内のみだったアセットフィンガープリント結果を、ディスクに永続化するようになりました。
- 大量のファイル (例: 約 37,000 ファイル) を含むディレクトリのフィンガープリント計算が、再合成時に 約 75% 高速化 します (約 13 秒 → 約 3 秒)。
ポイント:
- キャッシュは
~/.cdk/cache/fingerprintsに保存されます。 - キャッシュファイルとサブディレクトリには最大エントリ数の上限が設定されており、無制限に膨張しないよう管理されています。
- 利用にあたって特別な設定は不要で、自動的に有効になります。
PropertyMergeStrategy が deferred Box 値に対応 (#37844)
この機能でできること:
TableV2.replicasのような Box でラップされた遅延評価プロパティに対しても、プロパティのマージ戦略 (PropertyMergeStrategy、ArrayMergeStrategy.replaceByKey) が正しく動作するようになりました。- 以前は Box でラップされた値に対してマージを行うと不透明な
IResolvableオブジェクトが渡され、マージ結果が誤っていました。
ポイント:
- 内部的に
BoxSafeMergeStrategyとBoxSafeArrayStrategyという新しいラッパーが導入され、Box の値はマージを遅延 (Box.combine) して合成時に正しく解決されるようになります。 @aws-cdk/cfn-property-mixinsを使ってカスタムプロパティを後付けで適用するユースケースで効果を発揮します。
EC2 C8A インスタンスタイプのサポート (#36736)
この機能でできること:
- 第 5 世代 AMD EPYC プロセッサ (コードネーム Turin) ベースのコンピュート最適化インスタンス C8A を利用できるようになりました。
使用例:
import * as ec2 from 'aws-cdk-lib/aws-ec2';
// 新しい C8A インスタンスタイプの利用
const instanceType = ec2.InstanceType.of(
ec2.InstanceClass.C8A, // または ec2.InstanceClass.COMPUTE8_AMD
ec2.InstanceSize.XLARGE,
);
// 結果: c8a.xlarge
ポイント:
InstanceClass.C8AとInstanceClass.COMPUTE8_AMDのどちらでもc8aインスタンスファミリを指定できます。- 既存の C7A、M8A、R8A と同じパターンで利用可能です。
バグ修正
キャッシュ済み Lazy が内部で Box API を使用するように (#37889)
Lazy.string()、Lazy.number()、Lazy.list()、Lazy.any()のキャッシュ版が、内部的にLazyBox(ReadonlyStateラッパー) を返すようになり、Box.isBox()のチェックやderive()、getStackTraces()をサポートします。- 動作的な後方互換性は保たれており、ユーザーの既存コードに変更は不要です。Lazy と Box の解決メカニズムを統一する内部リファクタリングです。
- 非キャッシュの Lazy は解決コンテキストに依存するため引き続き Box ではありません。
デフォルトのスタックトレースサイズが過剰なオーバーヘッドを発生 (#37827)
- これまで CDK ライブラリはスタックトレース取得時に最大サイズ (実質無制限) のフレームをキャプチャしていましたが、これが合成時間の大きなオーバーヘッドになっていました。
- デフォルトのスタックトレースサイズ (10 フレーム) を使用することで、スタックトレース収集の処理時間が約 50% 削減されます。
- 例えば 8,500 個のコンストラクトを含むサンプルアプリで約 200ms の高速化が確認されています。
- ユーザーは
--stack-trace-limitフラグで引き続き制御可能です。
クロスアカウントの Fn::GetStackOutput が単一の IAM ロールを共有するように (#37871)
- これまではクロスアカウント参照ごとにプロデューサ側で IAM ロールが 1 つずつ作成されていましたが、すべてのコンシューマプリンシパルを Trust Policy にまとめた 単一の IAM ロール を共有するようになりました。
- ロールとポリシーのコンストラクト ID は安定 (
GetStackOutputRole/GetStackOutputPolicy) となり、参照の解決値に依存しないためコンストラクト生成が冪等になります。 - Trust Policy は
Lazy.anyで遅延解決されるため、コンシューマが追加されるたびに動的に蓄積されます。
DynamoDB Streams grant の deprecated scope プロパティを削除 (#36680)
- DynamoDB Streams の
grant系メソッドで使用されていた deprecated なscopeプロパティが削除されました。 - このプロパティは未使用で警告を出していたため、今回のクリーンアップで取り除かれています。
- ユーザーコードで
scopeを渡していない限り、影響はありません。
IAM PolicyStatement の SID を identity policy で英数字のみに検証 (#36150)
- IAM の identity policy では、Statement ID (SID) は ASCII 大文字 (A-Z)、小文字 (a-z)、数字 (0-9) のみが許可されています (公式ドキュメント)。
- これまで CDK では SID にハイフンなど無効な文字が含まれていてもビルド時には通り、デプロイ時に初めて失敗していました。
- 今回の修正で、
PolicyStatementのコンストラクタ時点で SID を検証し、無効な文字が含まれる場合はエラーをスローするようになりました。
修正後の正しい使い方:
import * as iam from 'aws-cdk-lib/aws-iam';
// OK: 英数字のみ
const validStatement = new iam.PolicyStatement({
sid: 'AllowS3Access1',
actions: ['s3:GetObject'],
resources: ['*'],
});
// NG: ハイフンを含むためコンストラクト時にエラー
// const invalidStatement = new iam.PolicyStatement({
// sid: 'Allow-S3-Access', // <-- エラー
// ...
// });
Alpha モジュール
bedrock-agentcore-alpha が stable に昇格 (#37876)
@aws-cdk/aws-bedrock-agentcore-alpha のうち、Policy サブモジュールを除くすべてのコンストラクトが aws-cdk-lib/aws-bedrockagentcore に昇格しました。alpha 版を利用しているプロジェクトは、本記事の「破壊的変更」セクションを参照しつつ stable 版への移行を推奨します。
破壊的変更
bedrock-agentcore-alpha → aws-bedrockagentcore: プロパティ名のリネーム (#37876)
stable への昇格に伴い、複数のプロパティ・型がリネームされました。
| Before (alpha) | After (stable) |
|---|---|
IGateway.name | IGateway.gatewayName |
IGatewayTarget.name | IGatewayTarget.gatewayTargetName |
BrowserCustom.name | BrowserCustom.browserCustomName |
CodeInterpreterCustom.name | CodeInterpreterCustom.codeInterpreterCustomName |
IMemoryStrategy.name | IMemoryStrategy.strategyName |
MemoryStrategyCommonProps.name | MemoryStrategyCommonProps.strategyName |
ApiKeyCredentialProviderProps (gateway 設定用) | ApiKeyCredentialProviderOptions |
ApiKeyCredentialProviderResourceProps (コンストラクタ用) | ApiKeyCredentialProviderProps |
EvaluatorReference | EvaluatorSelector |
EvaluatorReferenceBindResult | EvaluatorSelectorBindResult |
OverrideConfig.model の依存先が変更 (#37876)
OverrideConfig.model プロパティの型が、alpha モジュールから stable モジュールに依存するように変更されました。
変更前:
import { IBedrockInvokable } from '@aws-cdk/aws-bedrock-alpha';
const config: OverrideConfig = {
model: someBedrockInvokable, // IBedrockInvokable
};
変更後:
import { IModel } from 'aws-cdk-lib/aws-bedrock';
const config: OverrideConfig = {
model: someModel, // IModel
};
移行方法:
- alpha 由来の
IBedrockInvokableを使用している箇所を、aws-cdk-lib/aws-bedrockのIModelに置き換えてください。
metric() メソッドのシグネチャ変更 (#37876)
bedrockagentcore のリソースの metric() メソッドから dimensions の位置引数が削除されました。リソース固有のディメンションは内部で自動的に付与されるようになり、追加のディメンションは props.dimensionsMap で渡すように変更されています。
変更前:
// dimensions が位置引数
resource.metric(
'MyMetric',
{ ResourceId: 'foo' }, // DimensionsMap
{ statistic: 'Sum' },
);
変更後:
// リソースのディメンションは自動付与
// 追加ディメンションは props.dimensionsMap に渡す
resource.metric('MyMetric', {
statistic: 'Sum',
dimensionsMap: {
ExtraDimension: 'bar',
},
});
移行方法:
metric()の第 2 引数としてDimensionsMapを渡している箇所を削除し、必要に応じてprops.dimensionsMapに統合してください。
まとめ
Bedrock AgentCore の stable 昇格と、合成パフォーマンスの観測・最適化機能 (パフォーマンスカウンタ、フィンガープリント永続化、スタックトレース最適化、IAM ロールの集約) が大きな目玉のリリースです。AgentCore を alpha で利用していたユーザーは、リネームを中心とする破壊的変更に注意しつつ stable 版への移行を進めることをおすすめします。