aws lambda无法导入模块' lambda_function':没有名为'的模块请求'

时间:2018-02-21 17:42:08

标签: python amazon-web-services logging lambda amazon-cloudwatch

我最近开始使用AWS Lambda对我编写的一些python代码使用触发器。我目前有2个lambda函数,这两个函数都是用ZIP文件创建的。我创建的第二个应该测试触发事件。

这是出于测试目的,因此我使用了最佳代码:

def lambda_handler(event, context):
    print ("Hello World")

然而,我收到了这个错误:

Response:
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"65024f16-172c-11e8-ab26-27ff3322e597"

Function Logs:
START RequestId: 65024f16-172c-11e8-ab26-27ff3322e597 Version: $LATEST
Unable to import module 'lambda_function': No module named 'requests'

END RequestId: 65024f16-172c-11e8-ab26-27ff3322e597
REPORT RequestId: 65024f16-172c-11e8-ab26-27ff3322e597  Duration: 15.93 ms  
Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 22 MB  

我搜索到的每个地方,通过确保函数的名称正确或确保.zip文件可读来解决问题。我满足了这两个条件(文件的名称是lambda_function.py,它在根目录中)。

或者,似乎它可能是日志的问题。我仔细检查了我的许可,我有能力用所有资源创建日志。任何其他想法可能是什么问题?

6 个答案:

答案 0 :(得分:11)

默认情况下,

requests库不会出现在lambda中。看起来你正试图在你的函数/库中导入它。要导入它,您需要以下行:

from botocore.vendored import requests

或者,您可以在zip文件的根目录中压缩requests库。

编辑:您的某个库中可能存在依赖关系。要解决此问题,请在应用程序zip中安装requests。为此,请在应用程序的根目录中运行以下命令:pip install requests -t ./

更好的方法是创建一个名为requirements.txt的文件,并在其中添加所有依赖项。使用virtualenv使用:pip install -r requirements.txt -t ./

安装requirements.txt中定义的所有包

答案 1 :(得分:1)

对此answer

进行检查

如果您在AWS Lambda上使用Python,并且需要使用请求,则最好使用urllib3,它目前在AWS Lambda上受支持,您可以直接将其导入,请在urllib3网站上查看示例。

import urllib3

http = urllib3.PoolManager()
r = http.request('GET', 'http://httpbin.org/robots.txt')

r.data
# b'User-agent: *\nDisallow: /deny\n'
r.status
# 200

答案 2 :(得分:1)

这肯定会奏效。只需按照以下步骤操作:

在任何空目录中创建一个“python”目录并在那里安装模块

mkdir lambda_layers
cd lambda_layers
mkdir python
cd python
pip install requests -t ./
cd ..
zip -r python_modules.zip .

如果您想在一个层中有多个模块,请将它们安装在您刚刚创建的同一个“python”目录中。

只需确保使用“-r”递归压缩“python”目录本身。这样 lambda 处理程序可以在您使用的默认 Python 版本中定位模块。

现在您拥有包含所有相关模块的“python_modules.zip”文件。转到 AWS 控制台中的 Lambda 层并创建一个上传此 zip 文件的层。根据您在 lambda 函数中使用的 Python 版本选择运行时,或者您可以选择多个 Python 运行时版本。将此层添加到您的 lambda 函数中,您应该能够完美地导入您的模块。

答案 3 :(得分:0)

https://aws.amazon.com/blogs/developer/removing-the-vendored-version-of-requests-from-botocore/

AWS从Botocore中删除了requests的供应商版本。

步骤:

  1. cmd >> pip install requests

  2. Python代码:

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

答案 4 :(得分:0)

这就是我所要解决的问题

enter image description here

处理程序::“ yfinance_lamdba.lambda_handler”

在上一行

               **yfinance_lamdba** is filename 'yfinance_script.py'

               **lambda_handler** is function 'def lambda_handler' which has actual code

答案 5 :(得分:0)

step1- mkdir python

step2- pip3 install -t python requests

step3- zip python 文件夹

step4- 在 aws lambda 函数中创建新层并上传此 zip 文件

step5- 在你的 lambda 函数中添加这一层