AWS Lambda部署新包报错GLIBC_2.18未找到,求解决方案
解决AWS Lambda导入cryptography时的GLIBC版本错误
核心原因
AWS Lambda运行环境(基于Amazon Linux 2)自带的GLIBC版本为2.17,而你在EC2实例中安装依赖时,EC2系统的GLIBC版本更高,导致cryptography的Rust绑定库编译时依赖了GLIBC 2.18,上传到Lambda后因环境不兼容报错。
解决步骤
1. 使用Lambda兼容环境构建依赖
放弃直接在EC2实例安装依赖,改用Amazon Linux 2容器镜像构建,确保编译环境与Lambda运行时完全一致:
- 拉取Amazon Linux 2镜像:
docker pull amazonlinux:2 - 启动容器并挂载本地目录:
docker run -it -v $(pwd):/build amazonlinux:2 /bin/bash - 在容器内安装Python、pip和virtualenv:
yum install -y python3 python3-pip pip3 install virtualenv - 创建并激活虚拟环境:
cd /build virtualenv venv source venv/bin/activate - 安装依赖并强制源码编译:
pip install fabric==2.7.1 --no-binary :all: - 退出容器,将
venv/lib/pythonX.X/site-packages下的所有文件与lambda_function.py放在同一目录后压缩,作为Lambda部署包。
2. 锁定兼容的cryptography版本
在requirements.txt中明确指定兼容版本,同时安装时禁用预编译二进制包:
fabric==2.7.1 cryptography==3.4.8
在Amazon Linux 2环境中执行安装:
pip install -r requirements.txt --no-binary cryptography
3. 验证依赖兼容性
打包后,检查_rust.abi3.so的依赖项:
ldd venv/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so
确保输出中无GLIBC_2.18相关依赖。
内容的提问来源于stack exchange,提问作者kadina
相关产品推荐
相关产品推荐

