如何使用无服务器添加librosa (python库)到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部署包的大小限制,请参阅此处。解压缩后最大可达250mb(这是您的错误消息告诉您的)。

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

总之,serverless-python-requirements建议/支持的是:

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

压缩工作通过在您的serverless.yml

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

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

try:
import unzip_requirements
except ImportError:
pass

但是一些用户似乎有librosa的问题,似乎无法使其工作,参见这个GitHub问题,例如或这个其他SO问题。

在那里的建议是分割你的Lambda和链它们,即一个Lambda只有librosa作为一个依赖(可能与依赖的压缩),然后把进一步的处理交给第二个Lambda,我不知道你想做什么,如果这对你来说是可行的。

相关内容

  • 没有找到相关文章

最新更新