使用AWS Lambda部署Scrapy Serverless定时任务遇GLIBC版本错误
问题原因
AWS Lambda采用的Amazon Linux 2环境自带GLIBC版本为2.23,而你本地安装的cryptography库是基于更高版本的GLIBC编译的,部署到Lambda后出现版本不匹配问题。本地sls offline运行正常是因为本地系统的GLIBC满足库的版本要求。
解决方案
1. 在Lambda兼容环境中编译依赖包
用Docker模拟Lambda运行环境安装依赖,保证编译出的库兼容:
- 拉取Lambda兼容镜像:
docker pull amazonlinux:2 - 启动并进入容器:
docker run -it -v $(pwd):/app amazonlinux:2 /bin/bash - 容器内安装编译工具与依赖:
yum install -y python3-devel gcc openssl-devel python3 -m venv venv source venv/bin/activate pip install scrapy cryptography --target /app/python - 退出容器后,将
python目录下的依赖包纳入Serverless部署包,确保Lambda加载兼容版本。
2. 用Serverless插件自动处理依赖
使用serverless-python-requirements插件,自动在Docker中构建兼容Lambda的依赖:
- 安装插件:
npm install serverless-python-requirements --save-dev - 在
serverless.yml中添加配置:plugins: - serverless-python-requirements custom: pythonRequirements: dockerizePip: true slim: true # 可选,缩减包体积 - 部署时插件会自动在Lambda兼容环境中构建依赖,规避GLIBC版本冲突。
3. 替换为纯Python加密库(可选)
若上述方法繁琐,可尝试用纯Python实现的pycryptodome替代cryptography,需确认Scrapy及其依赖支持该替换。
内容的提问来源于stack exchange,提问作者astro geek
相关产品推荐
相关产品推荐

