AWS Lambda执行Python函数时出现mysql.connector模块导入错误
我处理过不少这类Lambda依赖缺失的问题,你这个报错的核心原因很明确:你上传到Lambda的只有单个Python代码文件,而没有把通过pip install -t安装到代码目录里的mysql-connector依赖包一起打包上传。Lambda的默认执行环境里并不包含这个第三方库,必须把代码和所有依赖文件打包成一个完整的zip包才能让函数正常导入模块。
下面是一步步的解决步骤:
第一步:确认依赖已正确安装到代码目录
先回到你的EC2实例,进入/path/to/file/dir目录,检查里面是否存在mysql文件夹、mysql_connector_python-*.dist-info这类文件。如果有,说明你之前的pip install mysql-connector -t /path/to/file/dir命令已经把依赖正确安装到了代码目录;如果没有,重新执行一遍安装命令确保依赖到位。第二步:打包整个目录的所有内容(这是关键!)
不要只打包你的单个.py代码文件,要把代码目录下的所有文件和子文件夹一起打包:- 先进入代码目录:
cd /path/to/file/dir - 执行递归打包命令,把当前目录下的所有内容打包成zip文件:
这里的zip -r lambda_package.zip ..代表当前目录下的所有内容,-r参数会递归打包所有子文件夹,这样你的Python代码和mysql.connector的依赖文件就都会被包含到zip包里了。
- 先进入代码目录:
第三步:上传完整的zip包到Lambda
登录AWS控制台,找到你的Lambda函数,在「代码」页面选择「上传从」→「上传.zip文件」,选择刚才生成的lambda_package.zip。上传完成后,再次触发函数测试,应该就能成功导入mysql.connector模块了。
额外小提示:如果你的EC2实例架构(比如x86_64)和Lambda使用的执行环境架构(比如arm64)不一致,可能会出现依赖兼容性问题。这种情况下,建议你在与Lambda同架构的环境中安装依赖(比如使用对应架构的EC2实例、Cloud9环境),或者使用Lambda层来统一管理第三方依赖,这样后续更新依赖也更方便。
内容的提问来源于stack exchange,提问作者FCoding

