You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda使用Layer时出现cannot import name 'DEFAULT_CIPHERS'错误求助

解决方案:Lambda导入urllib3 DEFAULT_CIPHERS报错

1. 在Lambda兼容环境构建Layer

Lambda运行在Amazon Linux 2系统上,本地(Windows/macOS)打包的依赖可能存在系统架构或库兼容性问题,导致版本冲突。正确的构建步骤:

  • 用Docker拉取Amazon Linux 2镜像:docker pull amazonlinux:2
  • 挂载本地目录并进入容器:docker run -v $(pwd):/app -it amazonlinux:2
  • 在容器内安装Python 3.9及依赖工具:
    yum update -y
    yum install -y python3.9 python3.9-pip
    
  • 创建Layer目录结构并安装指定版本依赖:
    mkdir -p python/lib/python3.9/site-packages/
    python3.9 -m pip install requests pandas urllib3==1.26.15 -t python/lib/python3.9/site-packages/
    
  • 打包成zip文件:cd python && zip -r ../lambda-deps-layer.zip .,上传该zip作为Lambda Layer

2. 排查Lambda环境依赖版本冲突

Lambda Python 3.9运行时自带urllib3,可能和Layer中的版本冲突。可以在代码开头添加版本检测:

import urllib3
print(f"urllib3版本: {urllib3.__version__}")

如果输出版本不是1.26.15,说明Layer未被正确加载:

  • 检查Layer是否关联到Lambda函数
  • 若有多个Layer,调整顺序让包含urllib3的Layer优先加载
  • 尝试将依赖直接打包到Lambda部署包(替代Layer)

3. 临时修复:手动定义DEFAULT_CIPHERS

如果不想重新构建Layer,可在代码中绕过导入错误:

# 先尝试导入,失败则手动定义
try:
    from urllib3.util.ssl_ import DEFAULT_CIPHERS
except ImportError:
    DEFAULT_CIPHERS = 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'

确保后续代码中使用该变量替代原导入的DEFAULT_CIPHERS

4. 本地模拟Lambda环境测试

用AWS Lambda Runtime Interface Emulator(RIE)本地模拟Lambda运行环境,提前排查依赖问题:

  • 下载RIE:curl -Lo aws-lambda-rie https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie
  • 赋予执行权限:chmod +x aws-lambda-rie
  • 运行测试:./aws-lambda-rie python3.9 lambda_function.lambda_handler,查看是否仍出现导入错误

内容的提问来源于stack exchange,提问作者dixhom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:08:09