如何修复AWS Lambda中Snowflake连接器的GLIBC_2.28缺失错误?
问题
尝试将版本为2.7.9的snowflake-connector-python作为层添加至AWS Lambda时,触发如下错误:
Unable to import module lambda_function: /lib64/libc.so.6: version GLIBC_2.28 not found (required by /opt/python/lib/python3.9/site-packages/cryptography/hazmat/bindings/_rust.abi3.so)
此前已做的操作:
- 用Ubuntu容器构建依赖:
docker run -v /Users/local/Documents/docker_test:/working -it --rm ubuntu - 容器内完成Python 3.9安装、虚拟环境配置、依赖库(libssl-dev、libffi-dev)安装,最后在指定目录下安装
snowflake-connector-python==2.7.9 - 将依赖目录打包成ZIP,创建AWS Lambda层并关联到Python 3.9函数
- 额外调整:因
_cffi_backend缺失安装cffi,将cryptography从36版本升级到38,把系统python/python3别名指向Python 3.9
Lambda函数代码:
import json import snowflake.connector def lambda_handler(event, context): return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
解决方案
问题根源
AWS Lambda的Python 3.9运行时基于Amazon Linux 2,系统自带GLIBC版本为2.26。而你用Ubuntu容器构建的依赖(比如cryptography)是基于Ubuntu的高版本GLIBC(2.28+)编译的,导致在Lambda环境中无法兼容运行。
修复步骤
1. 切换到Amazon Linux 2容器构建依赖
放弃Ubuntu,用和Lambda完全一致的环境构建:
docker run -v /Users/local/Documents/docker_test:/working -it --rm amazonlinux:2
2. 在容器内配置Python 3.9环境
依次执行以下命令:
- 更新系统并安装编译依赖:
yum update -y yum install -y gcc openssl-devel bzip2-devel libffi-devel wget tar gzip - 下载编译Python 3.9(以3.9.18版本为例):
wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz tar xzf Python-3.9.18.tgz cd Python-3.9.18 ./configure --enable-optimizations make altinstall - 验证版本并升级pip:
python3.9 --version python3.9 -m pip install --upgrade pip
3. 安装依赖到Lambda层目录
- 创建符合Lambda要求的目录结构:
mkdir -p lambda_layers/python/lib/python3.9/site-packages cd lambda_layers/python/lib/python3.9/site-packages - 安装指定版本的snowflake连接器:
python3.9 -m pip install snowflake-connector-python==2.7.9 -t . - 若之前有
_cffi_backend报错,在此环境下安装cffi:python3.9 -m pip install cffi -t .
4. 打包上传Lambda层
- 返回
lambda_layers目录,将python目录打包(确保ZIP内直接是python文件夹,不要外层多余目录):cd /working/lambda_layers zip -r snowflake-connector-layer.zip python/ - 把这个ZIP上传到AWS Lambda层,关联到你的Python 3.9函数即可。
快速替代方案
如果不想手动编译环境,可在安装依赖时指定兼容Lambda的平台参数(需保证pip版本足够新):
pip3 install snowflake-connector-python==2.7.9 --platform manylinux2014_x86_64 --only-binary=:all: -t .
但这种方式可能存在部分依赖兼容问题,优先推荐用Amazon Linux 2容器构建的方案。
内容的提问来源于stack exchange,提问作者hitesh
相关产品推荐
相关产品推荐

