AWS Lambda函数报错No module named 'MySQLdb'求技术解决方案
AWS Lambda执行报错:No module named 'MySQLdb'
问题详情
我的AWS Lambda函数代码如下:
import pandas as pd import numpy as np from sqlalchemy import create_engine def lambda_handler(event, context): data = [10,20,30,40,50,60] df = pd.DataFrame(data, columns=['Numbers']) engine = create_engine('mysql://admin:blabla@database-1.blabla.eu-west 1.rds.amazonaws.com/blablabla') df.to_sql('list_last_update_lambda', con=engine, if_exists='replace') return()
已配置两个Lambda层,分别包含Pandas+NumPy、SQLAlchemy依赖,但函数执行时日志报错:
"errorMessage": "No module named 'MySQLdb'", "errorType": "ModuleNotFoundError"
解决方案
报错原因是SQLAlchemy默认使用MySQLdb作为MySQL驱动,但Lambda运行环境中没有该模块,且现有层也未包含它。解决步骤如下:
修改SQLAlchemy连接字符串
将原连接URL中的mysql://替换为mysql+pymysql://,指定使用pymysql作为驱动(该模块更适配Lambda环境),同时修正地址中的空格问题(eu-west 1改为eu-west-1):engine = create_engine('mysql+pymysql://admin:blabla@database-1.blabla.eu-west-1.rds.amazonaws.com/blablabla')添加包含pymysql的Lambda层
若现有层未包含pymysql,需创建新层并关联到函数:- 准备与Lambda运行时匹配的环境(如Python 3.9,推荐用Docker模拟Amazon Linux 2环境)
- 执行命令安装pymysql到指定目录:
mkdir -p python/lib/python3.9/site-packages pip install pymysql -t python/lib/python3.9/site-packages/ - 将
python目录打包为zip文件 - 在AWS Lambda控制台上传该zip作为新层,将层关联到你的函数
完成以上操作后重新执行函数即可解决该报错。
内容的提问来源于stack exchange,提问作者Miguel Gonzalez
相关产品推荐
相关产品推荐

