在AWS Lambda中使用numpy

8

我正在寻找在AWS Lambda中使用NumPy的方法。 我没有使用EC2,只是用lambda进行此操作,如果有任何建议,将不胜感激。当前出现以下错误:

无法导入名称'multiarray'

使用grunt lambda创建zip文件并上传函数代码。 我使用pip install和requirements.txt文件将所有模块安装到名为python_modules的文件夹中,其中包括NumPy。


你应该将模块直接安装或链接到Lambda函数包的根目录中。并确保所有依赖项也在那里。 - Nikolay Grischenko
我知道你的意思,但是所有的模块都能正常工作,因为环境变量指向它们。 - Sebastian Łącki
你有没有偶然解决这个问题?我在Python 3.6上遇到了完全相同的问题。 - JavaCake
我还没有回头看它,但是我找到了这个链接,尽管我还没有机会再次研究它!希望你从中获得一些收获,如果你有了,请让我知道!https://github.com/vitolimandibhrata/aws-lambda-numpy 。据我所知,它可以完整地获取numpy包的版本,并将其放入您的项目中。 - Sebastian Łącki
截至2018年,使用层是最好、最容易的方式:https://aws.amazon.com/blogs/aws/new-for-aws-lambda-use-any-programming-language-and-share-common-components/ AWS甚至为numpy提供了预制的层。 - DaveRGP
7个回答

11

让您的lambda函数支持Python 3.7中的numpy库的简便方法:

  1. 进入您的lambda函数页面
  2. 找到页面底部的Layers部分。
  3. 点击“添加图层”。
  4. 选择AWS Layers作为图层来源。
  5. 选择AWSLambda-Python37-Scipy1x作为AWS layers。
  6. 选择版本37。
  7. 最后点击“添加”。

现在您的lambda函数已准备好支持numpy了。


1
Numpy 可以与层 "AWSDataWrangler-Python39" 配合使用(我没有看到上述提到的层)。 - DaveP
@DaveP 也许你的Python版本与我的不同。 - user_5

7

更新内容包括解决方案,而非链接:

经过多次尝试,我发现必须从 python3.6虚拟环境中 创建部署包,而不是直接从主机创建。我在Ubuntu 16.04 docker镜像中执行了以下操作。这假定您已经安装/配置了python3.6、virtualenv和awscli,并且lambda函数代码位于~/lambda_code目录中:

1) cd ~ (我们将在主目录中构建虚拟环境)

2) virtualenv venv --python=python3.6 (创建虚拟环境)

3) source venv/bin/activate (激活虚拟环境)

4) pip install numpy

5) cp -r ~/venv/lib/python3.6/site-packages/* ~/lambda_code (将所有安装的软件包复制到lambda_code目录的根级别。这将包括一些不必要的文件,但如果需要的话,您可以自己删除这些文件)

6) cd ~/lambda_code

7) zip -r9 ~/package.zip . (压缩lambda包)

8) aws lambda update-function-code --function-name my_lambda_function --zip-file fileb://~/package.zip (上传至AWS)

现在,您的lambda函数应该能够无问题地导入numpy。

如果您想要一个更为开箱即用的解决方案,可以考虑使用serverless来部署lambda函数。在我找到以上解决方案之前,我遵循了这里的指南,并成功地在python3.6 lambda函数中运行了numpy。


你可以使用Docker和/或Serverless框架来节省自己的时间。https://stackoverflow.com/questions/43859497/aws-lambda-and-python-numpy-module/50270737#50270737 - GWed

1

0

0

按照以下方式添加numpy层:

  • 进入您的lambda函数

  • 选择添加新层

  • 使用此ARN添加它:arn:aws:lambda:eu-central-1:770693421928:layer:Klayers-p39-numpy:7

(如果您不在eu-central-1,请更改您的区域)

让我知道是否有效。


-1

1.) 在本地机器上的文件夹中执行Pip安装numpy。

2.) 完成后,将整个文件夹压缩并创建一个zip文件。

3.) 转到AWS Lambda控制台,创建一个层并上传在步骤2中创建的zip文件,然后保存该层。

4.) 创建Lambda函数后,单击添加层并添加您创建的层。就这样,导入numpy就可以开始工作了。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接