6

从 botocore.vendored使用的技巧requests不再适用于 AWS Lambda 上的 Python 3.8,我假设它包括最新的 botocore-1.13。此版本不再嵌入requests. 导入它可以工作,但包实际上是空的。

[ERROR] AttributeError: module 'botocore.vendored.requests' has no attribute 'post'

有没有办法requests在原生 lambda 上导入?这是一个基础,为非常简单的 Lambda 打包代码的过程会很痛苦。

或者,任何人都有另一个技巧来调用 API-Gateway 没有requests

4

5 回答 5

1

哇哦,我想这是我们很少看到的 AWS Lambda 上的“重大变化”。

AWS 之前已经警告过这一点,有几种选择:

  • 使用无服务器框架和 serverless-python-requirements 插件
  • 查看来自此 repo的请求的 Python3.7 Lambda 层是否适用于 Python3.8
  • python3.8使用lambci自己打包
于 2019-11-21T14:13:26.507 回答
0

您可以在 EFS 端点 pip 安装包。 pip install requests -t efs_endpoint

从您的 Lambda 函数挂载该 EFS 终端节点。然后import sys在你的 lambda 函数中添加你的模块安装路径: sys.path.insert(0, '/efs_mnt/path/to/module')

然后您可以将模块导入到您在 Lambda 中的 python 环境中。

设置 EFS 并弄清楚如何挂载它并不难——您可能需要更改挂载点的所有权以允许写入。

您还可以将外部模块以 zip 文件的形式导入 Lambda,但您(基本上)在大小上受到限制。

于 2020-07-09T06:13:11.330 回答
0

我有同样的问题。解决它的方法是使用 AWS lambda 中的自定义层,其中包含您需要的相关站点包。

它对我有用。

一个向您展示如何(通过快速谷歌搜索)创建图层的示例如下:https ://dev.to/razcodes/how-to-create-a-lambda-layer-in-aws-106m

于 2020-12-03T11:33:55.450 回答
0

在您的项目中本地安装“请求”:

pip install requests -t ./

然后打包并部署它 - 使用无服务器框架在此处进行示例:

serverless deploy -s test
于 2019-12-17T18:46:32.873 回答
-2

单独安装requests依赖项。

$ pip install requests

使用以下导入。

import requests
response = requests.get('https://...')

删除出售的版本和替代解决方案

引入此更改的关联公关

于 2019-11-20T11:19:29.820 回答