AWS Lambda中的Python:“模块'请求'没有属性'get'”

时间:2017-07-23 14:30:01

标签: python amazon-web-services lambda python-requests

我目前正在尝试在AWS Lambda函数中使用Python requests模块。以下是我到目前为止采取的步骤:

我创建了一个新目录,并使用命令pip3 install requests -t .

在其中安装了请求模块

然后我在目录中编写了一个简单的Python脚本test_requests.py,如下所示:

import requests
def my_handler(event, context):
    r = requests.get("http://google.com")
    return r

我使用zip test_requests.zip *

压缩整个目录,包括请求模块

然后我使用以下命令将该函数上传到AWS:aws lambda create-function --function-name test_requests --zip-file fileb://test_requests.zip --handler test_requests.my_handler --runtime python3.6 --region us-east-1 --role xxxMY_ROLE_ARNxxx

最后,我使用此命令调用了该函数:aws lambda invoke --function-name test-requests --payload {} --region us-east-1 lambda_response.txt

当我发出这个命令时,我从Lambda得到了一个未处理的异常。输出文件lambda_response.txt包含:{"errorMessage": "module 'requests' has no attribute 'get'", "errorType": "AttributeError", "stackTrace": [["/var/task/test_requests.py", 3, "my_handler", "r = requests.get('http://google.com')"]]}

我见过几个关于AWS lambda的问题,并且无法正确导入模块。这些问题似乎都集中在lambda无法找到模块。在这种情况下,似乎lambda已找到请求,但无法访问其所有属性。

1 个答案:

答案 0 :(得分:12)

我弄清楚我做错了什么。 zip test.zip *仅压缩目录结构的顶级。我需要-r标志才能捕获所有内容。