AWS Lambda中导入PyMYSQL报错:找不到pymysql模块
解决AWS Lambda中PyMySQL导入失败及mysql.connector连接超时问题
一、修复PyMySQL模块找不到的问题
不管是直接打包部署还是用Docker部署,核心是确保依赖包被正确包含在Lambda运行环境中:
1. 本地打包时的正确依赖安装方式
不要全局安装PyMySQL,而是将包安装到项目根目录,确保打包时能包含进去:
# 在项目根目录执行,将pymysql安装到当前目录 pip install pymysql -t .
之后将lambda_function.py和所有安装的依赖文件一起打包成ZIP,上传到Lambda。注意不要包含虚拟环境目录(比如venv),只保留必要的代码和依赖。
2. Docker部署的正确配置
如果用Docker部署,确保Dockerfile基于Lambda官方Python镜像,并在构建时安装PyMySQL:
# 使用Lambda官方Python镜像作为基础 FROM public.ecr.aws/lambda/python:3.11 # 将本地代码复制到Lambda的工作目录 COPY lambda_function.py ${LAMBDA_TASK_ROOT} # 安装PyMySQL依赖 RUN pip install pymysql -t ${LAMBDA_TASK_ROOT} # 指定Lambda执行入口 CMD ["lambda_function.lambda_handler"]
构建镜像时,确保所有依赖都被正确安装到Lambda任务目录中,避免路径问题导致模块找不到。
二、修复mysql.connector连接超时问题
本地能连接但Lambda在VPC中超时,通常是网络配置或权限问题,按以下步骤排查:
1. 检查安全组配置
- Lambda安全组:需允许出站流量到MySQL的3306端口(或你的RDS自定义端口)。
- RDS安全组:需允许入站流量来自Lambda的安全组,端口为MySQL服务端口(默认3306)。
2. 确认VPC子网与路由配置
- 如果RDS部署在私有子网:Lambda需部署在同一个VPC的子网中,且Lambda子网的路由表需包含到RDS子网的路由(通过VPC内部路由,无需NAT网关)。
- 如果RDS是公网可访问:若Lambda部署在私有子网,需为该子网配置NAT网关,确保Lambda能访问公网;若Lambda在公有子网,需开启Lambda的"自动分配公有IP"选项。
3. 验证IAM角色权限
虽然配置了AWSLambdaVPCAccessExecutionRole,需确认角色包含以下必要权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface" ], "Resource": "*" } ] }
这些权限是Lambda在VPC中创建网络接口的必要条件,缺失会导致网络连接异常。
4. 检查RDS端点与连接参数
确保Lambda代码中使用的RDS端点、端口、用户名、密码与本地测试一致,避免拼写错误或配置不一致导致的连接失败。
内容的提问来源于stack exchange,提问作者Lars Jacobs
相关产品推荐
相关产品推荐

