在AWS Lambda部署aws-wsgi与Flask依赖层遇导入错误求助
Lambda Layer导入aws-wsgi和flask失败问题排查
问题描述
在AWS Cloud9中通过pip安装aws-wsgi和flask,打包为ZIP文件后上传至Lambda Layer并绑定到Lambda函数,出现以下导入错误:
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'awsgi'",
"errorType": "Runtime.ImportModuleError",
"requestId": "81e04845-856a-4b98-85a4-7de4644e6244",
"stackTrace": []
}
flask也出现相同类型的导入错误,但requests、psycopg2-binary等其他依赖用相同部署方式可正常使用。
补充:Windows环境下原Layer创建步骤
- 登录AWS Cloud9
- 执行
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py安装get-pip.py - 执行
python3 get-pip.py - 执行
python3 -m pip install flask aws-wsgi -t . - 退出名为
dependency的目录 - 执行
zip -r dependencies.zip dependency/ - 下载该ZIP文件
- 通过AWS Lambda控制台将ZIP文件上传至Lambda Layers
问题原因&解决方案
Lambda Layer对Python依赖的目录结构有强制要求:必须将依赖放在python/lib/pythonX.X/site-packages/目录下(X.X需匹配Lambda函数使用的Python版本,如3.9、3.10),否则运行时无法识别模块。之前的打包方式不符合该结构,导致导入失败。
修正后的Layer创建步骤
在Cloud9中创建符合要求的目录结构:
mkdir -p dependency/python/lib/python3.9/site-packages注意:将
python3.9替换为你的Lambda函数实际使用的Python版本。将依赖安装到指定目录:
python3 -m pip install flask aws-wsgi -t dependency/python/lib/python3.9/site-packages/正确打包目录:
cd dependency zip -r ../dependencies.zip .此时打包的ZIP文件解压后,内部结构以
python/lib/pythonX.X/site-packages/开头,Lambda运行时可正确识别依赖。
额外验证点
- 下载打包后的ZIP文件并解压,检查内部是否存在
python目录,且层级符合上述要求。 - 确认Lambda函数的Python运行时版本与Layer中指定的Python版本完全一致(比如Lambda用3.10,Layer内就要对应使用
python3.10目录)。
内容的提问来源于stack exchange,提问作者Amiteshwar
相关产品推荐
相关产品推荐

