【问题标题】:AWS Lambda, Python, Numpy and others as LayersAWS Lambda、Python、Numpy 等作为层
【发布时间】:2020-05-29 18:28:37
【问题描述】:

我一直在尝试将 python、numpy 和 pytz 作为层添加到 AWS Lambda,而不是用我的 .py 文件压缩并扔到 AWS。我能够遵循多个教程,但都失败了。

如果我要使用 pandas、numpy 或 pytz 来获得任何功能(AWS Lambda with Pandas and NumPy - Ruslan Korniichuk - Medium),我会遵循本指南。所以这很好,但我不想每次都重新创建一个 zip,如果我的功能需要等发生变化。尤其是在我的公司发展壮大的时候。我们只是尝试通过使用 Cloudwatch 定期运行作业的 Lamba 自动化一些任务。没什么特别的,我知道 S3 和其他实例可能有路线。但是,我已经能够成功地为除了 Pandas、Numpy 和 Pytz 之外的其他库创建层。

所以,我担心这种方法的可扩展性。我正在使用 mac,但我不确定还能做什么:我尝试过使用 Docker,我尝试过用轮子构建。是否有任何可行的教程来详细解释如何做到这一点?

以下是我尝试过的一些教程。是的,这并不意味着我正确地遵循了它们,但我最终没有成功地使用它们中的大多数:

你说出它的名字,我可能已经完成了完成这项任务的步骤,尤其是在这些文章中。还有很多 Stack question cmets,非常有帮助和有见地。

提前感谢您的任何建议,只是在这里学习!

【问题讨论】:

    标签: python python-3.x pandas amazon-web-services aws-lambda


    【解决方案1】:

    这可能不是您想听到的答案,但老实说,将某些已编译库放入 lambda 层的痛苦足以让我的公司停止使用它们。相反,我们倾向于将 Fargate 或 ECS 与 docker 容器一起使用。

    除了为 lambdas 编译包的问题外,我们还遇到了 lambdas 最大大小的主要问题。我们经常达到这个上限,并且不得不越来越多地删除文件以使其适合。

    更新:AWS 现在允许您从 ECR 中的容器运行 Lambda,这很好地解决了这个问题。

    【讨论】:

    • 我同意这可能有点痛苦,尤其是 Lambda 中的 GCC 版本要求。我们确实必须固定我们的 ML 依赖项的某些版本,以确保它们与 Lambda 运行时一起工作。恕我直言,这是 ML 库的失败,而不是 Lambda 运行时。
    • 根据我的研究,我担心这是正确的。我才在行业工作了一个月,并且知道我可以凭借我的技能组合将我的角色发挥到什么程度,我担心 AWS 的上限。谢谢大家的见解。
    【解决方案2】:

    您不需要在每次部署时重新编译该层。我们有一个 lambda 层,专门用于 numpy、pandas 和 fbprophet 等 ML 库。它非常好用,因为我们的 lambda 部署 zip 文件很小,可以加快开发和部署速度。

    我很乐意提供进一步的帮助。你能提供更多关于你尝试了什么以及出了什么问题的信息吗?

    【讨论】:

    • 我在 Lambda 中为 pygsheets 之类的库添加了层,我知道我不需要重新编译。发生的事情是我需要使用 Pandas 并且无法成功地将它作为一个层放到 Lambda 上。我已经成功地将它与我的 .py 文件一起部署在一个 zip 中。到目前为止,我相信我只能“分层”熊猫,然后 numpy 会不断出现说它找不到该模块(有时 pytz 也会出现)。我必须回顾我的笔记来重现 Pandas 成功的情况,但就我取得的成功而言。
    【解决方案3】:

    万一其他人偶然发现这篇文章,AWS 中现在有预构建的层可供您访问:

    https://github.com/keithrozario/Klayers

    对于那些想要自己制作的人(就像我一样),该仓库的 docker 打包脚本中的一条评论解决了我的问题:python (build with python3.6 or python3.7 not python3)

    我点击了该评论,使用您在 AWS 中使用的 python 版本构建。在我最初用于 lambda 层的 Makefile 中,我使用 python3 来构建包,当我尝试运行 lambda 时,这总是会给我同样的错误:

    Runtime.ImportModuleError Unable to import module 'function' .... 原始错误是:No module named 'numpy.core._multiarray_umath'

    但是当我切换到这个时:

    python3.8 -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"

    与我的 AWS Lambda 运行时匹配。我能够毫无问题地运行 numpy、pandas 和 openpyxl。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多