微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用无服务器将 librosapython lib添加到 aws lambda

如何解决如何使用无服务器将 librosapython lib添加到 aws lambda

我正在尝试使用 https://www.serverless.com/ 来管理一个简单的 aws lambda 函数的依赖项。

一个关键的依赖项是 librosa python 库 (https://github.com/librosa/librosa)。

我是 serverless 的新手,所以我很感激 serverless.yml 文件的指导。

到目前为止我有

service: my-app-123
app: my-app-123-app
org: my-org

frameworkVersion: '2'

provider:
  name: aws
  runtime: python3.6

stage: dev
region: eu-west-2

plugins:
  - serverless-python-requirements
functions:
  hello:
    handler: handler.hello

package:
  individually: false
  exclude:
    - '**/*'
  include:
    - handler.py

requirements.txt 是:

librosa==0.8.0
pandas==1.1.5

当我尝试上述操作时出现此错误

An error occurred: HelloLambdaFunction - Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: f6bd001e-5592-44c8-8f10-3b56180d7ec7; Proxy: null).

解决方法

您遇到了 AWS Lambda 部署包的大小限制,请参阅 here。解压缩后最多可以有 250 MB(这就是错误消息告诉您的内容)。

查看 serverless-python-requirements 插件文档中的处理 Lambda 的大小限制部分。

简而言之,serverless-python-requirements 推荐/支持的是:

  • 压缩依赖
  • 添加 Lambda Layer(例如单独的 librosa

压缩的工作原理是在您的 serverless.yml

中添加以下内容
custom:
  pythonRequirements:
    zip: true

然后在使用依赖项之前将其添加到您的处理程序中:

try:
  import unzip_requirements
except ImportError:
  pass

但有些用户似乎对 librosa 有问题并且似乎无法使其正常工作,例如参见 this GitHub issue 或此 other SO question

那里的建议是拆分您的 Lambda 并将它们链接起来,即一个只有 librosa 作为依赖项的 Lambda(可能会压缩依赖项),然后移交给第二个 Lambda 进行进一步处理,如果这对您可行,我不知道您想做什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。