我试图使用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,我不知道你想做什么,如果这对你来说是可行的。