基于Serverless Framework构建并在AWS Lambda中使用本地Python包
部署本地Python包到AWS Lambda(结合Serverless Framework)
我来帮你一步步梳理操作流程,考虑到你需要和Glue作业等其他组件共享这个本地包,生成Wheel文件是最优方案,具体步骤如下:
1. 生成本地Python包的Wheel文件
Wheel是Python的标准分发格式,不仅pip处理效率高,还能轻松在Lambda、Glue等不同环境中复用。操作步骤:
- 确保你的本地包根目录下有
pyproject.toml(推荐)或setup.py,用来定义包的元信息(名称、版本、依赖等) - 在包的根目录运行命令生成Wheel:
执行后,pip wheel . -w dist/dist/目录下会生成类似your_package-1.0.0-py3-none-any.whl的文件
2. 配置Serverless Framework及插件
你已经在用serverless-python-requirements插件,接下来需要让它识别并安装你的本地Wheel包:
方法一:通过requirements.txt指定
在项目根目录的requirements.txt中添加本地Wheel的路径:
./dist/your_package-1.0.0-py3-none-any.whl # 其他第三方依赖也可以在这里添加,比如requests==2.31.0
方法二:直接在serverless.yml中配置(可选)
如果不想用requirements.txt,也可以在serverless.yml的custom区块里直接声明:
custom: pythonRequirements: dockerizePip: true # 重要!如果本地环境和Lambda(Linux)不一致,必须开启这个选项,避免依赖编译不兼容 requirements: - ./dist/your_package-1.0.0-py3-none-any.whl - requests==2.31.0
注意:如果你的本地包包含C语言扩展,一定要开启
dockerizePip: true,Lambda运行在Amazon Linux环境,本地(比如macOS/Windows)编译的扩展无法在Lambda上运行。
3. 本地测试(推荐)
在部署前可以先本地验证函数是否能正常运行:
serverless invoke local --function your_function_name
这会模拟Lambda环境加载你的代码和依赖,提前排查问题。
4. 部署到AWS Lambda
确认配置无误后,直接运行部署命令:
serverless deploy
serverless-python-requirements插件会自动处理所有依赖:
- 下载/安装第三方包和你的本地Wheel
- 将所有依赖和Lambda代码打包成zip文件
- 上传到AWS Lambda并完成部署
额外:和Glue作业共享本地包
因为你需要和Glue共享这个包,你可以:
- 把生成的Wheel文件上传到S3存储桶
- 在Glue作业的配置中,通过
--additional-python-modules参数指定S3上的Wheel路径,比如:aws glue start-job-run --job-name your_glue_job --arguments '--additional-python-modules=s3://your-bucket/dist/your_package-1.0.0-py3-none-any.whl' - 或者如果是Glue Studio作业,可以在“作业参数”的
--additional-python-modules中填写S3路径
内容的提问来源于stack exchange,提问作者EnzoMolion
相关产品推荐
相关产品推荐

