【问题标题】:Alternative to AWS lambda when deployment package is greater than 250MB?部署包大于 250MB 时替代 AWS lambda?
【发布时间】:2023-03-29 09:51:01
【问题描述】:

当我想启动一些无服务器代码时,我使用 AWS Lambda。但是,这次我的部署包大于 250MB。

所以我不能在 Lambda 上部署它...

我想知道在这种情况下有哪些替代方案?

【问题讨论】:

  • 您确定是什么占用了这么多空间吗?
  • 是的。这是我的 python 依赖项(gensim 和 pandas 占用大量空间)。
  • @yorodm 无论您是否使用Layers,函数和所有层的总解压缩大小都不能超过解压缩部署包大小限制250 MB。简单地将包移动到一个层并没有帮助。您需要针对大小进行优化,然后可以选择通过图层进行部署。
  • 是的,您可能会查看 AWS Batch。另请参阅stackoverflow.com/questions/50503912/…,以防它导致一些帮助。我假设这些非常大的 Python 包本身并没有针对大小进行优化,因此可能有办法在考虑到这个目标的情况下重建它们。
  • 当我将一些大型 python 库部署到 lambda 时,例如Numpy、Matplotlib 等我刚刚在制作部署包之前手动从 site_packages 中的包文件中删除了我的 lambda 不需要的文件。我把我的 lambda 从 450mb 降到了 40mb,这不是开玩笑。您的函数可能不需要这些库中的所有内容。

标签: amazon-web-services aws-lambda


【解决方案1】:

我会质疑你的架构。如果您在 AWS 设计服务的方式上遇到问题(即 lambda 最大 250mb 大小),那么您可能以非预期方式使用该服务。

我经常看到的一种反模式是人们将所有代码都塞进一个函数中。类似于将所有代码部署到单个服务器的方式。这不是 AWS lambda 的真正用例。

你的函数只做一件事吗?如果没有,请将其重构为执行不同操作的不同功能。当您拆分为多个函数时,这可能有助于消除依赖关系。

您可以查看的另一件事是您是否可以用不同的语言编写函数(保持函数较小的另一个原因)。我曾经在 python 中有一个超过 250mb 的 lambda 函数。当我想用 node.js 解决同样的问题时,我的函数大小下降到 20mb。

【讨论】:

  • 是的,我知道 lambda 函数的用例,并且我已经将我的 main 函数拆分为几个 lambda 函数。为了解决这个问题,我使用了无服务器框架:)
  • 有趣 - 我不确定无服务器框架如何在不减少代码库的情况下减少 lambda 大小。很高兴你解决了问题:-)
  • 我使用这里描述的方法:read.iopipe.com/…。一个插件“dockerize”pip 依赖项。
【解决方案2】:

您可以做的一件事是在运行 lambda 函数之前,您可以将依赖项从 s3 存储桶下载到 /tmp 文件夹,然后将其添加到 python 路径,它会给您额外的 512MB,尽管您需要考虑下载一些 lambda 调用的时间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多