继承AWS Lambda项目后lambdazip.sh的作用、报错修复及部署位置咨询
AWS Lambda项目lambdazip.sh相关问题解答
一、lambdazip.sh的具体作用
这个脚本是标准的AWS Lambda部署包构建脚本,不是本地测试工具,前序开发人员编写它的目的是替代手动压缩操作,自动把项目运行所需的全部内容打包成符合Lambda要求的zip包,避免手动压缩漏文件、路径错误的问题。
它的执行逻辑如下:
- 读取当前激活的Python2.7虚拟环境变量
$VIRTUAL_ENV,从虚拟环境的依赖库目录中把pypdftk相关的第三方依赖打进部署包 - 把项目中的bin目录(脚本本身所在的目录)、业务代码目录
boost*、pdf_surveys全部打进部署包 - 打包时自动排除
.pyc编译文件,减少部署包体积
二、AWS上传规则说明
- 这个
.sh脚本不需要上传到Lambda函数,也不需要放到Lambda Layer中:它仅作为本地构建工具使用,最终你只需要上传它生成的dist/cl-boost.zip部署包到Lambda即可。 - 如果你后续要拆分依赖和业务代码优化部署效率,可以把
pypdftk这类公共依赖单独打包成Lambda Layer上传,可自行调整脚本实现拆分打包逻辑,原脚本的默认逻辑是把依赖和业务代码打包在同一个部署包中。
三、运行报错解决方案
报错的核心原因是执行脚本前没有激活项目对应的Python2.7虚拟环境,导致$VIRTUAL_ENV系统变量为空,脚本找不到依赖路径,后续所有打包路径全部出错,按以下步骤修复即可:
- 首先进入项目根目录,创建并激活Python2.7虚拟环境(如果已经创建过可跳过创建步骤):
# 进入项目根目录(bin目录的上级目录) cd /Users/stephenstilwell/Downloads/cl_boost-pdfgen-1.3.3-master # 创建Python2.7虚拟环境 virtualenv -p python2.7 venv # 激活虚拟环境 source venv/bin/activate
- 安装项目所需的全部依赖,尤其是pypdftk:
# 如果项目根目录有requirements.txt就执行这行 pip install -r requirements.txt # 没有的话直接安装已知依赖 pip install pypdftk
- 手动创建dist目录避免打包时找不到输出路径:
mkdir -p bin/dist
- 再次执行脚本即可正常生成部署包:
cd bin sh lambdazip.sh
如果你不想用虚拟环境,也可以手动把脚本里的$VIRTUAL_ENV/lib/python2.7/site-packages/替换成你本地Python2.7的site-packages实际路径,不过更推荐用虚拟环境方案,和原开发人员的打包逻辑保持一致,避免依赖版本不对导致Lambda运行报错。
内容的提问来源于stack exchange,提问作者Stephen Stilwell
相关产品推荐
相关产品推荐

