【发布时间】:2019-01-10 08:29:00
【问题描述】:
我有一个相对较小的脚本,我在其中使用以下依赖项:
firebase-admin
pandas
不过,当您安装这些依赖项时,您还会安装 60 多个附加依赖项,例如 numpy、scikit、google_cloud 等。
我在部署过程中遇到了很多问题,其中最突出的有以下几点:
- 您很快就达到了 250MB 的大小限制。仅 numpy 就大约 100mb。
- 某些带有编译库的包不兼容,例如
numpy,所以你需要解开它们(见link)。
我现在可能花了两天时间试图解决这些问题。但是,我根本没有成功运行我的小脚本。
因此我想知道:
- 鉴于部署困难,AWS lambda 是否完全适合我的用例?如果使用上面列出的依赖项部署一个简单的脚本如此困难?
- 还有哪些其他好的做法可以克服依赖项安装?是否可以将依赖项与实际功能分开?
- 还有哪些更好(更简单)的部署到 Lambda 的方法?特别是,我发现每次压缩我的所有功能和站点包以进行小更新时都很麻烦。
关于后者的注意事项:我也尝试了以下解决方案:
- zappa:在tutorial 之后,我尝试使用 zappa 进行部署。在遇到并以某种方式解决大小限制问题后,我遇到了另一个问题,即我的小脚本没有 myservice.app 格式的应用程序功能。谷歌搜索后,我发现 zappa 是为 WSGI 应用程序设计的。
-
python-lambda:我也尝试了另一个经常推荐的替代方案。但是,安装后我无法调用命令
lambda init。请参阅我关于该问题的问题here。 -
使用 aws sam 和图层。我在安装
aws-sam-cli后遵循README.me并遵循所有步骤。这导致我在 S3 上上传了一个新包,我用它来创建一个新层。尽管如此,尽管我将numpy放入了我的 requirements.txt 并正确构建了站点包(因为它在我的 SamApp 中可见),但我仍然收到错误“numpy not found”。
【问题讨论】:
-
您可以通过为所有依赖项考虑 Lambda 层来解决此问题。 Lambda 层允许您与所有 Lambda 运行时共享代码。 docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
-
那么在启动时调用一个 100-200mb 的 zip 文件?
-
与不使用 lambda 层的情况相比,您无需对它进行任何不同的调用。层将在调用时为您的 lambda 启用,并且您可以像在 python 中一样正常导入依赖项。确保您已通读文档以确保正确配置图层。
-
我会试试的,但是看起来很麻烦。为什么没有神奇的“aws deploy”按钮可以做所有事情?
-
很高兴您的问题已得到解决 :)
标签: python amazon-web-services aws-lambda firebase-admin