使用Serverless Framework部署Lambda加层后触发解压大小超限问题问询
AWS Lambda部署解压大小统计规则
报错中提到的Code uncompressed size is greater than max allowed size of 272629760对应的是AWS Lambda的硬性限制:单个函数所有代码+绑定的所有Lambda层的解压后总大小不能超过260MB(272629760字节)。
除了你提到的函数自身代码解压大小、Lambda层解压大小外,以下内容也会被计入总大小统计:
- 函数代码压缩包解压后的所有文件,包括打包时不小心带入的冗余文件:如果使用Serverless Framework没有配置打包过滤规则,项目根目录下的所有未被排除的文件都会被打进代码包,常见的冗余内容包括
.git版本控制目录、node_modules目录(Serverless插件依赖)、本地测试数据、日志文件、.serverless临时打包目录、IDE配置文件等 - 所有绑定到当前函数的Lambda层的解压后大小之和:即使你没有使用层内的部分文件,层的完整解压大小也会全额计入总配额
- 如果你使用的是Java fat jar打包方式,jar包内嵌套的依赖jar本身的大小也会被直接计入,不会单独计算嵌套jar内部的解压大小,也不会对重复依赖做去重统计
排查方法
你可以在本地执行Serverless打包命令 sls package,打包完成后进入项目下的.serverless目录,找到对应函数的代码压缩包手动解压,统计所有文件的总大小后加上你要添加的层的解压大小,即可得到Lambda侧实际统计的总大小。
优化建议
- 在
serverless.yml中添加打包排除规则,过滤不需要的冗余文件,示例配置如下:
package: exclude: - .git/** - node_modules/** - .serverless/** - test/** - '*.log' - '*.iml' - .idea/**
- 将Java项目中的公共依赖抽离到Lambda层,减少函数自身代码包的大小
- 清理函数代码包内不需要的静态资源、测试用例等无用内容
内容的提问来源于stack exchange,提问作者Collins
相关产品推荐
相关产品推荐

