在使用AWS CDK部署Lambda层时,即使内容有效,仍然会出现“上传的文件必须是非空的ZIP文件”错误

后端开发 2026-07-09

我正在使用AWS CDK部署一个Lambda Layer,并遇到了以下错误:

Uploaded file must be a non-empty zip

上下文

  • AWS CDK (Node.js运行时)
  • 使用 Code.fromAsset() 创建的Lambda Layer
  • cdk synth 之前安装了依赖

示例:

new lambda.LayerVersion(this, "ExampleLayer", {
  code: lambda.Code.fromAsset("path-to-layer"),
  compatibleRuntimes: [lambda.Runtime.NODEJS_18_X],
});

文件夹结构

layer-folder/
  runtime-folder/
    package.json
    dependencies/
      some-library/

我已验证的内容

  • 生成的压缩包不为空
  • Layer里面包含依赖项
  • 安装步骤在synth之前执行
  • 资源路径指向正确的目录

观察到的行为

  • cdk synth 成功
  • 部署在创建Lambda Layer时失败
  • 解压工件显示预期的文件

问题

什么原因可能导致AWS Lambda将一个有效的layer zip当成“空的”来处理?

是否存在以下方面的已知问题:

  • CDK的资源打包/缓存?
  • 预期的结构或所需文件?
  • 在synth之前安装依赖的时机?

若有线索,敬请赐教。感谢!

更新

我查阅了关于“Uploaded file must be a non-empty zip”的类似问题,但我看到的行为略有不同。

生成的zip文件似乎有效且包含预期的文件 在CDK尝试发布资源时,问题出现在部署阶段 错误有时会包含资源zip路径的ENOENT

我的设置包括先运行cdk synth,然后再运行cdk deploy --app cdk.out。

问题:

如果在部署阶段cdk.out内部的资源路径未被正确解析,CDK是否可能因为“非空zip”错误而失败?

是否存在以下已知场景:

  • synth与 deploy之间资源路径变得无效,或
  • CDK在与生成位置不同的地方查找资源?

关于CDK在 cdk deploy --app cdk.out期间如何解析资源路径的任何指引将不胜感激。

解决方案

如果尝试使用AWS CLI而不是CDK来发布并附加该层会怎样?

https://docs.aws.amazon.com/lambda/latest/dg/nodejs-layers.html

另外,这个回答可能与你的问题相关,也许答案就在这里 https://stackoverflow.com/a/67361476/6456107

来自该回答的代码片段:

const fn = new lambda.Function(this, "MyFunction", {
  runtime: lambda.Runtime.NODEJS_12_X,
  handler: "index.handler",
  code: lambda.Code.fromAsset(path.join("./handlers/test-uuid/")),
});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章