AWS Lambda导入错误:无法导入lambda_function及DEFAULT_CIPHERS问题求助
AWS Lambda中requests库DEFAULT_CIPHERS导入错误解决方法
问题描述
在AWS Lambda中运行Python程序时出现模块导入错误,程序无法执行,核心原因是requests依赖的urllib3组件版本与Lambda内置环境不兼容,导致无法导入DEFAULT_CIPHERS。
代码示例
import json import boto3 import os import requests def lambda_handler(event, context): file = '2011-02-12-0.json.gz' download_res = requests.get(f"https://data.gharchive.org/{file}") print(f"Files downloaded successfully - Filename: {file}") os.environ.setdefault('AWS_PROFILE', 'myid') s3 = boto3.client('s3') upload_res = s3.put_object(Bucket='my-demo-bucket3', Key=file, Body=download_res.content) print("Files Uploaded successfully") return upload_res
报错信息
{ "errorMessage": "Unable to import module 'lambda_function': cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (/var/task/urllib3/util/ssl_.py)", "errorType": "Runtime.ImportModuleError", "requestId": "5d82baed-2ee6-41cd-a8e7-d24a59061dbc", "stackTrace": [] }
解决方案
该错误由本地打包的urllib3版本与Lambda内置环境版本冲突导致,可通过以下方式解决:
使用Lambda层管理依赖
避免将requests、urllib3直接打包到代码包,改用Lambda层部署:- 本地创建目录结构
python/lib/pythonX.X/site-packages(X.X为Lambda使用的Python版本,如3.9) - 执行
pip install requests -t ./python/lib/python3.9/site-packages - 将
python目录打包为zip文件 - 在AWS控制台创建Lambda层并上传该zip,关联到目标Lambda函数
- 本地创建目录结构
指定兼容的依赖版本
如果必须打包依赖到代码包,在requirements.txt中明确指定兼容版本:requests==2.28.2 urllib3==1.26.15执行
pip install -r requirements.txt -t .后,再打包代码和依赖上传至Lambda。优化代码冗余配置
Lambda通过IAM角色获取AWS服务权限,无需设置AWS_PROFILE环境变量,删除代码中的os.environ.setdefault('AWS_PROFILE', 'myid')行,避免干扰运行环境。
内容的提问来源于stack exchange,提问作者marie20
相关产品推荐
相关产品推荐

