我是AWS Lambda的新手,我想在Lambda上为机器学习API运行代码。总而言之,我想在Lambda上运行的功能是:读取一些csv文件以创建pandas dataFrame并在其中搜索;另一种功能是通过Flask应用程序的请求运行某些腌制的机器学习模型。为此,我需要导入与Amazon Linux兼容的pandas,joblib以及可能的scikit-learn。我正在使用Windows计算机。
通常,我会通过上传zip文件来使用Lambda的图层。当然,由于Lambda具有SciPy和Numpy的预构建层,因此我不会导入它们。如果导入它们,无论如何我将超过Lambda的图层限制。 更具体地说,我已经完成以下操作:
解压缩的库位于以下目录中:
lambda_layers \ python \ lib \ python3.7 \ site-packages
将它们压缩到一个文件中,然后上传到S3存储桶以创建图层。
我导入了软件包:
import json
import boto3
import pandas as pd
我从Lambda收到以下错误:
{ “ errorMessage”:“无法导入模块'lambda_function':C扩展名:未构建名为'pandas._libs.tslibs.conversion'的模块。如果要从源目录导入pandas,则可能需要运行'python setup .py build_ext --inplace --force'首先构建C扩展。”, “ errorType”:“ Runtime.ImportModuleError” }
答案 0 :(得分:1)
文件夹结构应该是标准的,您还可以使用Docker创建与Linux兼容的压缩库,并将其上传到AWS Lambda层中。下面是经过测试的命令,用于为AWS Lambda层创建压缩库:
创建并导航到目录:
$mkdir aws1
$cd aws1
在Dockerfile中编写以下命令并通过 CTRL + D 退出:
$cat> Dockerfile
FROM amazonlinux:2017.03
RUN yum -y install git \
python36 \
python36-pip \
zip \
&& yum clean all
RUN python3 -m pip install --upgrade pip \
&& python3 -m pip install boto3
您可以为图像提供任何名称:
$docker build -t pythn1/lambda .
运行图像:
$docker run --rm -it -v ${PWD}:/var/task pythn1/lambda:latest bash
在requirements.txt中指定要压缩的软件包,并通过 CTRL + D 退出:
$ cat > requirements.txt
pandas
sklearn
您可以在此处尝试使用正确的文件结构(/python/lib/python3.6/site-packages/
),但我尚未对其进行测试:
$pip install -r requirements.txt -t /usr/lib/python3.6/dist-packages/
导航到以下目录:
$cd var/task
创建一个zip文件:
$ zip -r ./layers.zip /usr/lib/python3.6/dist-packages/
您应该能够在aws1文件夹中看到layers.zip文件。如果在安装时提供正确的文件夹结构,则不需要以下步骤。但是,使用我使用的文件夹结构,需要以下命令:
退出Docker或打开一个新终端,然后导航到解压缩文件的文件夹。解压缩的文件将位于文件夹结构/usr/lib/python3.6/dist-packages/
中。
将这些文件复制到正确的文件夹结构中:
$ cp -r ./python/lib/python3.6/site-packages/ /usr/lib/python3.6/dist-packages/
再次压缩它们:
$ zip -r ./lib_python.zip ./python
将zip文件上传到图层,然后将该图层添加到Lambda函数中。另外,请确保在创建图层时选择正确的运行环境。
答案 1 :(得分:0)
在遵循本文档https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path之后,您应该为python层压缩python \ lib \ python3.7 \ site-packages \ pandas(和其他依赖项)文件夹。
确保将图层添加到函数中,并遵循文档中的正确权限。
答案 2 :(得分:0)
我很感谢给出的答案,只是在这里发布了我自己的答案(经过一整天的查找),以供参考。
总而言之,我要做的步骤是:
pip install -t
一起安装,因为
会导致库和C扩展未构建。python\lib\python3.7\site-packages\
中找到的目录压缩为