概要
AWS CDK v2.178.1 は、2つの重要なバグを修正したパッチリリースです。このリリースでは、CLI で SDK ログが常に出力される問題と、カスタムリソースの Provider Framework Lambda に必要な IAM 権限が不足していた問題が修正されました。
バグ修正
CLI: SDK ログが常に出力される問題の修正
v2.173.0 の PR #33273 で導入された変更により、CLI を実行すると SDK のログが常に出力されるようになっていました。この問題により、ログ出力を有効にしていない場合でも、AWS SDK の詳細なログが表示されていました。
影響を受けるケース
以下のような通常の CDK CLI コマンドを実行した際に、不要な SDK ログが表示されていました:
# 通常のデプロイコマンドでもSDKログが表示される
cdk deploy
# 出力例(本来表示されるべきでないログ)
[AWS SDK] Request: ...
[AWS SDK] Response: ...
修正内容
SDK ログの出力レベルが正しく設定されていなかったため、常にログが出力されていました。このリリースでは、ログレベルを正しく設定することで、明示的にログ出力を有効にした場合のみログが表示されるようになりました。
修正されたファイル:
packages/aws-cdk/lib/api/aws-auth/sdk-logger.ts- ログレベルの設定を修正packages/aws-cdk/test/api/aws-auth/sdk-logger.test.ts- テストケースを更新
SDK ログを有効にする方法
必要に応じて SDK ログを有効にするには、以下の環境変数を設定します:
# デバッグログを有効にする
export AWS_SDK_JS_LOG_LEVEL=debug
cdk deploy
# または、CDK のログレベルを verbose に設定
cdk deploy --verbose
影響範囲
この修正により、すべての CDK CLI コマンドで不要なログ出力がなくなり、より見やすい出力が得られるようになります:
cdk deploycdk synthcdk diffcdk destroy- その他すべての CLI コマンド
カスタムリソース: Provider Framework Lambda に GetFunction 権限を追加
カスタムリソースの Provider Framework で使用される Lambda 関数に lambda:GetFunction 権限が不足していたため、特定の状況下でエラーが発生していました。
問題の背景
Provider Framework Lambda には、ユーザー定義ハンドラー Lambda の呼び出しでエラーが発生した場合、その Lambda が ACTIVE 状態になるまでポーリングする機能があります(PR #22612 で追加)。
このポーリング処理では、AWS SDK の waitUntilFunctionActiveV2 関数を使用しており、内部的に Lambda の GetFunction API を呼び出します。しかし、Provider Framework Lambda の IAM ロールに lambda:GetFunction 権限が付与されていなかったため、以下のようなエラーが発生していました:
AccessDeniedException: User is not authorized to perform: lambda:GetFunction
影響を受けるケース
この問題は、以下のような状況で発生していました:
- カスタムリソースを使用している
- ユーザー定義ハンドラー Lambda の呼び出しでエラーが発生する
- Lambda 関数が INACTIVE 状態になっている(14日間使用されていない関数など)
import * as cdk from 'aws-cdk-lib';
import * as cr from 'aws-cdk-lib/custom-resources';
import * as lambda from 'aws-cdk-lib/aws-lambda';
const stack = new cdk.Stack();
// ユーザー定義のカスタムリソースハンドラー
const onEventHandler = new lambda.Function(stack, 'OnEventHandler', {
runtime: lambda.Runtime.NODEJS_20_X,
handler: 'index.onEvent',
code: lambda.Code.fromAsset('lambda'),
});
// Provider Framework を使用したカスタムリソース
const provider = new cr.Provider(stack, 'MyProvider', {
onEventHandler: onEventHandler,
// ハンドラーがINACTIVE状態でエラーになった場合、
// Provider Framework Lambda がポーリングを試みるが、
// GetFunction 権限がないため失敗していた
});
new cdk.CustomResource(stack, 'MyCustomResource', {
serviceToken: provider.serviceToken,
});
修正内容
Provider Framework Lambda の IAM ロールに lambda:GetFunction 権限が追加されました。これにより、ユーザー定義ハンドラー Lambda の状態をポーリングする処理が正常に動作するようになります。
修正後、Provider Framework Lambda は以下の権限を持ちます:
// Provider Framework Lambda のロールに追加された権限
{
Effect: 'Allow',
Action: [
'lambda:InvokeFunction', // ユーザー定義ハンドラーの呼び出し(既存)
'lambda:GetFunction', // 関数の状態確認(新規追加)
],
Resource: '<ユーザー定義ハンドラーのARN>',
}
影響範囲
この修正により、以下のシナリオでカスタムリソースがより安定して動作するようになります:
- 長期間使用されていない Lambda 関数(INACTIVE 状態)を使用するカスタムリソース
- エラーハンドリングとリトライが必要なカスタムリソース
- Provider Framework を使用するすべてのカスタムリソース
注意事項
この変更は IAM 権限の追加であり、既存のカスタムリソースの動作に影響を与えません。デプロイ時に Provider Framework Lambda のロールが自動的に更新されます。
# アップグレード後、次のデプロイで権限が自動的に追加される
npm install aws-cdk-lib@2.178.1
cdk deploy
Alpha モジュール
Alpha モジュール (2.178.1-alpha.0) には変更はありません。
まとめ
AWS CDK v2.178.1 は、CLI とカスタムリソースに関する2つの重要なバグを修正するパッチリリースです。
- CLI: 不要な SDK ログが常に表示される問題を修正し、より見やすい出力を実現
- カスタムリソース: Provider Framework Lambda に不足していた
lambda:GetFunction権限を追加し、エラーハンドリングの安定性を向上
特にカスタムリソースを使用しているプロジェクトや、CLI の出力が冗長に感じていた場合は、このバージョンへのアップグレードを推奨します。
# アップグレード方法
npm install aws-cdk@2.178.1 aws-cdk-lib@2.178.1