如何让AWS Lambda Python通过SSH隧道连接MySQL?
解决Lambda中sshtunnel导入报错"No module named '_cffi_backend'"的问题
问题根源
sshtunnel依赖cffi库,而cffi需要对应运行环境编译的_cffi_backend二进制文件。你直接在本地(非Amazon Linux 2环境)安装的sshtunnel包,其依赖的编译产物和Lambda的Amazon Linux 2运行环境不兼容,导致找不到该模块。
解决方案
必须在Amazon Linux 2环境中编译安装sshtunnel及其依赖,再打包成Lambda层:
方法1:用Docker模拟Lambda运行环境
- 启动Amazon Linux 2容器:
docker run -it --rm amazonlinux:2 bash - 在容器内安装Python 3.9及编译依赖:
yum install -y python39 python39-pip gcc libffi-devel python39-devel - 创建Lambda层的标准目录结构:
mkdir -p python/lib/python3.9/site-packages - 将sshtunnel安装到指定目录:
pip3.9 install sshtunnel -t python/lib/python3.9/site-packages - 打包成zip文件:
zip -r sshtunnel-layer.zip python/ - 将生成的
sshtunnel-layer.zip上传到AWS Lambda层,替换你之前创建的旧层。
方法2:用AWS SAM CLI自动构建
如果使用AWS SAM,可在模板中定义层,通过sam build命令自动在兼容环境中安装依赖,无需手动处理编译兼容问题。
验证
替换层后重新测试Lambda函数,from sshtunnel import SSHTunnelForwarder即可正常导入。
内容的提问来源于stack exchange,提问作者MeNeedHelp
相关产品推荐
相关产品推荐

