Lambda部署MySQL Connector报错:无法导入'myapp',找不到'mysql'模块
解决AWS Lambda无法导入mysql模块的问题
嘿,这个坑我踩过好多次!Lambda的默认运行环境根本没预装mysql-connector-python,这就是为啥你本地Mac和EC2 Ubuntu能正常跑,一部署到Lambda就报No module named 'mysql'。给你几个实用的解决方案:
方案1:把依赖和代码一起打包(适合单函数小项目)
这种方法简单直接,把需要的库和你的代码打包成同一个zip上传:
- 本地创建一个空文件夹,比如
lambda-deploy - 进入文件夹,用pip把依赖安装到当前目录:
pip install mysql-connector-python -t ./ - 把你的
myapp.py文件复制到这个文件夹里 - 选中文件夹里的所有文件(注意:不要把文件夹本身打包,要直接打包里面的内容),压缩成zip包
- 登录AWS控制台,把这个zip包上传到你的Lambda函数,替换原来的代码包
方案2:用Lambda Layers共享依赖(适合多函数复用)
如果有多个Lambda函数都需要用到mysql连接器,用层来管理更高效:
- 创建一个空文件夹,比如
mysql-layer,在里面新建一个python子文件夹(Lambda层要求依赖必须放在这个目录下) - 进入
python文件夹,安装依赖:pip install mysql-connector-python -t ./ - 回到
mysql-layer文件夹,把python文件夹压缩成zip包(注意:zip的根目录是python,不是外层文件夹) - 打开AWS Lambda控制台,进入「Layers」页面,点击「Create layer」,上传这个zip包,选择和你的Lambda函数匹配的Python运行时(比如Python 3.9)
- 回到你的Lambda函数,在「Layers」选项卡中点击「Add a layer」,选择你刚创建的层,保存后测试
注意事项:架构兼容问题
如果你用的是M1/M2系列的Mac(arm64架构),直接本地打包的依赖可能和Lambda的x86_64架构不兼容,导致还是报错。这时候可以用Docker模拟Lambda的运行环境来打包:
# 确保本地安装了Docker docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.9:latest pip install mysql-connector-python -t ./
这个命令会在x86_64的容器环境里安装依赖,打包出来的zip就能在Lambda上正常运行了。
内容的提问来源于stack exchange,提问作者ElliotB
相关产品推荐
相关产品推荐

