在使用AWS CDK部署Lambda层时,即使内容有效,仍然会出现“上传的文件必须是非空的ZIP文件”错误
我正在使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。