Serverless部署AWS Lambda时是否必须在包中包含${WORKSPACE}目录?
问题解答
1. ${WORKSPACE}目录的作用说明
该目录是Jenkins执行构建任务时的默认工作目录,存放代码检出文件、构建过程临时产物、依赖缓存等内容,完全不涉及Lambda运行时所需的业务逻辑和运行依赖,没有任何实际作用,可以直接从部署包中完全排除。
2. 排除目录、实现部署包瘦身的方案
2.1 直接添加${WORKSPACE}排除规则
在现有serverless.yml的package.patterns排除规则列表中新增一行即可:
package: patterns: # 原有包含、排除规则全部保留 # 新增以下规则 - '!${WORKSPACE}/**'
由于sls deploy是在Jenkins流水线中执行,可直接读取到${WORKSPACE}环境变量的值,自动匹配对应目录完成排除。
2.2 优化打包默认行为
在package配置段新增excludeDevDependencies配置,无需手动列规则即可自动排除所有开发依赖,进一步精简包体积:
package: excludeDevDependencies: true # 自动过滤devDependencies下的所有包 patterns: # 原有规则保持不变
2.3 额外优化(满足Lambda控制台行内编辑要求)
Lambda控制台行内编辑要求部署包解压后体积不超过3MB,可通过以下操作进一步瘦身:
- 替换AWS SDK版本:Lambda Node.js运行时默认内置aws-sdk v2版本,可将当前依赖的
@aws-sdk/client-secrets-manager(v3版本,需自行打包)替换为v2版本的对应接口,再将aws-sdk相关依赖移到devDependencies中,打包时不会被引入,直接减少几十MB的体积。 - 改用
serverless-esbuild插件代替tsc构建:esbuild会自动执行Tree Shaking、代码压缩,仅打包实际用到的代码片段,相比普通tsc构建的产物体积更小。 - 公共依赖拆分到Lambda层:如果有多个函数共用相同依赖,可将依赖单独打包为Lambda层,函数部署包仅保留业务代码,进一步降低单函数包体积。
内容的提问来源于stack exchange,提问作者Parthiva
相关产品推荐
相关产品推荐

