AWS Lambda-无法导入模块“ lambda_function”

Spe*_*off 6 python amazon-web-services aws-lambda

像我之前的许多其他人一样,我正在尝试运行一个AWS Lambda函数,当我尝试对其进行测试时,

“ errorMessage”:“无法导入模块'lambda_function'”

我的处理程序设置为lambda_function.lambda_handler,我确实有一个名为lambda_function.py的文件,其中包含一个名为lambda_handler的函数。这是屏幕截图作为证明: 在此处输入图片说明

当我在包含的IDE中内联编写代码片段时,一切工作正常,但是当我压缩所有程序的所有依赖关系并将其上载并上传时,出现了以上错误。

我正在使用Numpy和Scipy软件包,它们非常大。我的压缩目录为34 MB,未压缩的目录为122 MB。我认为应该没问题,因为压缩目录的限制为50 MB。由于我看到以下消息,因此似乎可以正常上传:

Lambda函数“单镜头图像分类”的部署包太大,无法启用内联代码编辑。但是,您仍然可以立即调用函数。

我已经看到一些帖子通过使用virtualenv解决了这个问题,但是我对该技术不熟悉,并且不确定如何正确使用它。

我还看到一些帖子说有时依赖项具有依赖项,我可能需要包括这些依赖项,但是我不确定如何找到它。

这是lambda_function.py的顶部,应该足以查看我正在使用的库,并且确实具有lambda_handler函数:

import os
import boto3
import numpy as np
from scipy.ndimage import imread
from scipy.spatial.distance import cdist

def lambda_handler(event, context):

    s3 = boto3.resource('s3')
Run Code Online (Sandbox Code Playgroud)

这是我要上传的目录的未压缩版本的屏幕截图: 在此处输入图片说明

如果这可能是一个问题,我还可以发布Lambda使用的策略角色。

非常感谢任何见解!

更新:

这是我尝试的一种解决方案:1. git clone https://github.com/Miserlou/lambda-packages 2.在Documents中创建一个名为new_lambda的文件夹3.将我的lambda_function.py和numpy文件夹从lambda软件包复制到new_lambda中,以及我使用Docker for AWS编译的scipy库。文章:https : //serverlesscode.com/post/scikitlearn-with-amazon-linux-container/ 4.右键单击new_lambda文件夹并选择“ compress”压缩它

我的结果:

无法导入模块“ lambda_function”:没有名为“ lambda_function”的模块

重申一下,我的文件名为lambda_function.py,并包含一个名为lambda_handler的函数,该函数接受两个参数(如上所示)。此信息与在Handler中看到的信息相同,也与上面看到的信息相同。

如果这很重要,我正在使用Mac计算机。

更新2

如果我按照上述步骤操作,而是直接选择要压缩的文件来压缩文件,然后右键单击并选择“压缩”,则会出现错误

无法导入模块“ lambda_function”:无法导入名称“ show_config”

另外,预编译的lambda软件包表示它们是为“至少Python 2.7”编译的,但是我的lambda运行时是3.6。这可能是个问题吗?

ljm*_*cic 7

问题是您的本地numpy和pandas是为本地计算机的体系结构编译的。由于AWS Lambda使用自定义Linux,因此它们可能不兼容。

因此,如果要使用它们,则有两种选择:

  • 编译对EC2实例的依赖关系,该实例使用与AWS Lambda相同的Amazon Linux版本并创建部署程序包。

  • 使用此处的预编译软件包之一

PS:我已经阅读了帖子中的评论,所以我看到文件和函数的名称正常,而numpy给您带来麻烦。


Spe*_*off 3

解决方案是从源压缩 numpy 和 scipy 预编译包。