AWS Lambda函数模块导入失败问题求助
解决AWS Lambda模块导入失败问题
一、先理清代码包结构的核心要求
Lambda运行时会自动将代码包的根目录加入Python的sys.path,你的两个报错本质都是路径不匹配:
- 把
lambda_function.py放在psycopg2+py目录下时,若Handler配置为默认的lambda_function.handler,Lambda会在代码包根目录找这个模块,自然找不到——要么把lambda_function.py移到根目录,要么把Handler改成psycopg2+py.lambda_function.handler。 - 放在
postgresql目录下找不到psycopg2,说明依赖包不在Lambda能识别的路径里,要么是依赖没和代码文件同层级,要么是Layers结构错误。
二、正确打包依赖的实操步骤(本地/Cloudshell通用)
针对Python 3.9环境,不管是psycopg2还是fastapi,按以下方式打包可避免路径问题:
方式1:直接打包代码+依赖(适合轻量依赖)
- 新建空文件夹(比如
lambda-deploy),将lambda_function.py放入该文件夹 - 执行安装命令,把依赖安装到当前文件夹(指定Linux平台避免本地系统包不兼容):
注:pip install psycopg2-binary fastapi -t . --python-version 3.9 --platform manylinux2014_x86_64 --only-binary=:all:psycopg2必须用psycopg2-binary,Lambda基于Amazon Linux 2环境,编译版包才能正常运行 - 将文件夹内所有文件(包括
lambda_function.py、psycopg2、fastapi等)打成zip包——不要把外层的lambda-deploy文件夹打进去,解压后根目录要直接是这些文件 - 上传zip包到Lambda,Handler设为
lambda_function.handler(假设你的入口函数名为handler)
方式2:用Layers管理依赖(适合多函数共享依赖)
Layers的结构必须严格遵循python/lib/python3.9/site-packages/路径,Lambda才会自动将其加入sys.path:
- 按层级创建目录:
python/lib/python3.9/site-packages/ - 执行安装命令将依赖装入该路径:
pip install psycopg2-binary fastapi -t python/lib/python3.9/site-packages/ --python-version 3.9 --platform manylinux2014_x86_64 --only-binary=:all: - 将
python文件夹打成zip包(zip根目录必须是python,不能是外层文件夹) - 在AWS控制台创建Lambda Layer,上传该zip包并选择Python 3.9兼容
- 在目标Lambda函数的Layers标签页添加该Layer,然后单独将
lambda_function.py打成zip包上传(或直接在控制台编辑),Handler设为lambda_function.handler
三、必踩坑点排查
- 禁止直接用本地系统装依赖:Mac/Windows的Python包和Lambda的Amazon Linux 2环境不兼容,必须用
--platform参数指定Linux包,或直接在Cloudshell(原生Amazon Linux环境)里打包 - Handler必须和文件路径严格匹配:如果代码文件在子目录
src下,Handler要设为src.lambda_function.handler;在根目录则用默认配置 - 检查Layers关联状态:确认Lambda函数已正确添加目标Layer,且Layer的Python版本和Lambda运行时完全一致
- 查看完整报错日志:在Lambda监控的CloudWatch日志里看详细报错,里面会列出
sys.path包含的目录,可直接定位依赖是否在有效路径内
内容的提问来源于stack exchange,提问作者Alex Dragut
相关产品推荐
相关产品推荐

