【问题标题】:Deploying to AWS lambda hits size limit and packages (such as numpy) are not compatible部署到 AWS lambda 达到大小限制并且包(例如 numpy)不兼容
【发布时间】:2019-01-10 08:29:00
【问题描述】:

我有一个相对较小的脚本,我在其中使用以下依赖项:

firebase-admin
pandas

不过,当您安装这些依赖项时,您还会安装 60 多个附加依赖项,例如 numpyscikitgoogle_cloud 等。

我在部署过程中遇到了很多问题,其中最突出的有以下几点:

  1. 您很快就达到了 250MB 的大小限制。仅 numpy 就大约 100mb。
  2. 某些带有编译库的包不兼容,例如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


【解决方案1】:

您可以使用无服务器框架部署到 lambda 和周边服务。我将无服务器框架与 serverless-python-requirements 插件一起使用,该插件将编译和捆绑任何所需的 python 需求。在后台,它会转换为 cloudformation 模板,并将您的函数和相关资源作为堆栈部署到 AWS 中。

【讨论】:

  • 试过了,但是小包的文件大小超过了250mb。我使用 Firebase 切换到 Google Cloud Functions。老实说,我在 30 分钟内启动并运行了一个代码,而我花了 2 个完整的工作日试图找出 aws lambda。老实说,当你在 Cloud Functions 上做得更好、更干净时,我真的不明白为什么人们会使用 Amazon/Aws。明天我买一件 Google Cloud T 恤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2019-07-05
  • 1970-01-01
相关资源
最近更新 更多