AWS lambda函数的Python包管理

时间:2018-06-15 07:45:16

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

我很难理解如何最好地管理python包以获取AWS lambda函数的压缩。

在我的项目文件夹中,我有许多.py个文件。作为构建过程的一部分,我将它们压缩并使用AWS API创建和发布我的lambda函数,该函数提供zip文件作为该调用的一部分。

因此,我相信我需要在项目文件夹中拥有lambda所依赖的所有包。

考虑到这一点,我打电话给pip如下:

pip install -t . tzlocal

这似乎填满了我的项目文件夹中的大量内容,我不确定是否需要将所有内容压缩到我的lambda函数部署中,例如。

.\pytz
.\pytz-2018.4.dist-info
.\tzlocal
...
...

第一个问题 - 所有这些东西都需要压缩到我的lambda中吗?

如果没有,我如何获得一个包,只提供我需要进入我的zip文件的位?

来自.Net / Node背景 - 与前者我NuGet我的包进入一个很好的packages文件夹,只包含我需要的.dll文件,然后我引用到我的项目中

如果我需要所有这些文件,那么有办法将它们“放”到更整洁的地方 - 比如在包文件夹中吗?

最后,有没有办法只下载我真正需要的二进制文件?我在这里看到的问题是,Lambda函数需要与我在桌面开发环境(Windows)上使用的二进制文件不同的二进制文件,因此不确定如何解决该问题。

1 个答案:

答案 0 :(得分:1)

例如numpy使用的二进制库应该在AWS Linux上编译以处理lambda。我发现本教程很有用(https://serverlesscode.com/post/deploy-scikitlearn-on-lamba/)。甚至有更新版本的它使用docker容器,所以你不需要EC2实例进行编译,你可以在本地做所有事情。

至于软件包:AWS文档说要将所有内容安装到根目录,但您可以将它们全部安装在./packages目录中,如果lambda处理程序代码

,则将其附加到开头的路径中
import os
import sys

cwd = os.getcwd()
package_path = os.path.join(cwd, 'packages')
sys.path.append(package_path)