AWS Lambda Python函数替换requests导入及安装问题求助
解决AWS Lambda中导入requests的问题
方法一:本地打包依赖后上传Lambda
Lambda本身没有提供AWS平台内的命令行环境用于执行pip install操作,需要在本地完成依赖打包:
- 本地新建一个空文件夹(比如
lambda_deps) - 打开本地终端(Windows用命令提示符/PowerShell,Mac/Linux用终端),进入该文件夹,执行:
pip install requests -t ./
注意:本地Python版本要和Lambda使用的版本一致(比如Lambda用Python 3.9,本地就用对应版本的pip) - 将你的Lambda代码文件(如
lambda_function.py)放入该文件夹 - 把文件夹内所有内容打包成ZIP文件(不要把外层文件夹本身打包,直接打包内部文件和子文件夹)
- 登录AWS控制台进入目标Lambda函数,在「代码」页面上传这个ZIP包
方法二:用Lambda层管理依赖
如果多个Lambda函数都需要用到requests,用层更便于复用:
- 本地新建一个名为
python的文件夹(名称必须为python),进入后执行:pip install requests -t ./ - 将
python文件夹打包成ZIP文件 - 在AWS控制台的Lambda服务中进入「层」页面,创建新层,上传该ZIP包并选择对应Python版本
- 回到目标Lambda函数,在「层」配置中添加刚才创建的层
方法三:改用urllib3替代requests
若不想处理依赖安装,urllib3可满足大部分HTTP请求需求,示例代码:
import urllib3 def lambda_handler(event, context): http = urllib3.PoolManager() # 发送GET请求 response = http.request('GET', 'https://example.com') content = response.data.decode('utf-8') # 发送POST请求(带JSON数据) import json post_data = json.dumps({'key': 'value'}).encode('utf-8') post_response = http.request( 'POST', 'https://example.com/api', body=post_data, headers={'Content-Type': 'application/json'} ) return {'statusCode': 200, 'body': content}
内容的提问来源于stack exchange,提问作者Tartaglia
相关产品推荐
相关产品推荐

