如何使用AWS SAM为每个Lambda函数生成仅含对应依赖的单独ZIP包?
完全可以通过SAM原生配置实现每个Lambda函数单独打包、仅包含自身所需依赖,同时解决你提到的两个问题,具体操作如下:
1. 调整项目目录结构
将每个Lambda函数的代码和依赖声明单独拆分到独立目录,参考目录结构:
项目根目录 ├── template.yaml ├── common # 公共通用代码(可选,后续可抽为公共层) └── functions ├── function1 │ ├── app.py # 函数1业务代码 │ └── requirements.txt # 仅函数1用到的依赖声明 ├── function2 │ ├── app.py # 函数2业务代码 │ └── requirements.txt # 仅函数2用到的依赖声明 └── 其余8个函数的独立目录
2. 修改SAM模板函数配置
每个AWS::Serverless::Function资源的CodeUri字段指定到对应函数的独立目录,而非项目根目录,示例配置:
Resources: Function1: Type: AWS::Serverless::Function Properties: CodeUri: functions/function1/ Handler: app.lambda_handler Runtime: python3.9 Function2: Type: AWS::Serverless::Function Properties: CodeUri: functions/function2/ Handler: app.lambda_handler Runtime: python3.9 # 其余函数按相同规则配置即可
3. 执行构建部署命令
执行build命令时可添加--parallel参数并行构建所有函数,进一步提升构建速度:sam build --parallel && sam package && sam deploy
完成以上配置后,SAM会为每个函数单独构建打包,仅将对应函数目录下的代码、以及该目录依赖声明中的包打入对应ZIP包,不会包含其他函数的无关内容。
如果多个函数存在共用依赖,也可以抽为Lambda公共层,SAM支持公共层的本地构建配置,配置后公共依赖仅会上传一次,可进一步压缩单个函数的包体积,也不会再出现重复上传相同文件的提示。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

