AWS CDK Stack部署失败报错,原因不明该如何排查?
AWS CDK部署Lambda时出现"Cannot invoke String.contains..."错误的原因
问题重现
执行cdk synth可正常生成CloudFormation模板,但执行cdk deploy时触发回滚,错误信息如下:
❌ CdkImmersion2HelloCdkStack failed: Error: The stack named CdkImmersion2HelloCdkStack failed to deploy: UPDATE_ROLLBACK_COMPLETE: Resource handler returned message: "Cannot invoke "String.contains(java.lang.CharSequence)" because "errorMsg" is null" (RequestToken: <some-token>, HandlerErrorCode: InternalFailure)
关联代码
CDK栈代码:
import * as cdk from "aws-cdk-lib"; import { Code, Function, Runtime } from "aws-cdk-lib/aws-lambda"; import { Construct } from "constructs"; export class CdkImmersion2HelloCdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // defines an AWS Lambda resource const hello = new Function(this, "HelloHandler", { runtime: Runtime.NODEJS_18_X, // execution environment code: Code.fromAsset("lambda"), // code loaded from "lambda" directory handler: "hello.handler", // file is "hello", function is "handler" }); } }
Lambda函数代码(应存放于lambda/hello.js):
exports.handler = async function (event) { console.log("request:", JSON.stringify(event, undefined, 2)); return { statusCode: 200, headers: { "Content-Type": "text/plain" }, body: `Hello, CDK! You've hit ${event.path}\n`, }; };
错误原因
这个InternalFailure级别的错误属于CloudFormation资源处理逻辑的空指针异常,常见触发场景包括:
- Lambda代码包路径无效:检查项目根目录下是否存在
lambda文件夹,且该文件夹内是否有hello.js文件。如果路径不存在或文件缺失,资源处理器在读取代码包时会因内部逻辑未处理空值而抛出此错误。 - CDK依赖版本兼容问题:部分旧版本的
aws-cdk-lib对Node.js 18.x runtime的适配存在bug,导致部署时资源处理流程出错。建议更新CDK核心包至稳定版本,或尝试切换到Node.js 16.x runtime测试。 - 本地缓存或权限异常:CDK本地缓存损坏、或部署使用的AWS凭证缺少Lambda创建/部署权限,也可能触发此类内部错误。可执行
cdk clean清理缓存后重新部署,同时确认凭证拥有lambda:*相关权限。
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

