使用botocore.vendored中的requests
的技巧不再适用于AWS Lambda上的Python 3.8,我认为其中包括最新的botocore-1.13。
此版本不再嵌入requests
。导入即可,但是包实际上是空的。
[ERROR] AttributeError: module 'botocore.vendored.requests' has no attribute 'post'
是否可以在本机Lambda上导入requests
?这是一个基本的过程,要经历非常简单的Lambda打包代码的过程,将是一件痛苦的事情。
或者,有人有另一个技巧可以在没有requests
的情况下调用API网关吗?
答案 0 :(得分:1)
哦,我猜这是我们很少看到的AWS Lambda的“重大变化”。
AWS曾经对此发出警告,有几种选择:
答案 1 :(得分:0)
在您的项目中本地安装“请求”:
pip install requests -t ./
然后打包并部署它-使用无服务器框架的示例在这里:
serverless deploy -s test
答案 2 :(得分:0)
您可以在EFS端点上点安装软件包。
pip install requests -t efs_endpoint
从Lambda函数安装该EFS端点。然后在您的lambda函数中使用import sys
并添加模块安装路径:
sys.path.insert(0, '/efs_mnt/path/to/module')
然后,您可以将模块导入Lambda中的python环境中。
设置EFS并弄清楚如何挂载它并不难-您可能需要更改挂载点的所有权以允许写入。
您也可以通过zip文件将外部模块导入Lambda,但是大小受到限制(基本上)。
答案 3 :(得分:0)
我有同样的问题。解决该问题的方法是在AWS lambda中使用包含您所需的相关网站包的自定义层。
对我有用。
此处显示了一个如何通过快速Google创建图层的示例:https://dev.to/razcodes/how-to-create-a-lambda-layer-in-aws-106m
答案 4 :(得分:-1)
分别安装requests
依赖项。
$ pip install requests
使用以下导入。
import requests
response = requests.get('https://...')