使用CDK部署带有层的容器化Lambda

我正在进行一个利用AWS Lambda构建模型和生成预测的机器学习项目。Lambda函数使用Python编写,并使用了多个机器学习库,如pandas, sklearn, numpy和scikit-learn。这些Lambda函数使用了通过Lambda层打包的共享代码。我使用AWS CDK进行项目部署。CDK代码使用TypeScript编写,不要问我为什么混合使用Python和TypeScript,这在这种情况下并不相关。

由于机器学习库的原因,包的大小(Lambda代码 + 层)超过了允许的最大大小250MB。

在AWS宣布支持容器化Lambda后,我决定尝试使用它来克服250MB的限制。然而,我没有找到任何适合我情况的好例子,所以我尝试自己构建它。

CDK代码看起来像这样:

...// 从代码创建一个lambda层// 代码位于lambda-code/ml目录,看起来像// 任何Python包,包含主要的ML和数据库连接函数const mlLayer = new PythonLayerVersion(this, 'mlLayer', {      entry: './lambda-code/ml/',})...// Lambda函数定义如下const classifyTransactionLambda = new DockerImageFunction(this, 'classifyTransactionLambda', {            code: DockerImageCode.fromImageAsset('./lambda-code/classify'),            memorySize: 512,            layers: [mlLayer],      tracing: Tracing.ACTIVE,      environment: {        BUCKET_NAME: mlModelsBucket.bucketName,        ENV: env      }});...

代码结构如下:

enter image description here

classify Lambda中的Dockerfile:

# 使用AWS ECR中的python lambda镜像FROM public.ecr.aws/lambda/python:3.7COPY requirements.txt ./RUN pip3 install -r requirements.txtCOPY index.py ./CMD ["index.classify_transaction_handler"]

当我运行cdk deploy时,得到以下错误:

此Lambda函数使用的运行时与此层不兼容(FROM_IMAGE不在[python3.7]中)

有没有人遇到过类似的问题?这个错误是否意味着mlLayer版本与Lambda函数classifyTransactionLambda不兼容?

任何帮助将不胜感激!


回答:

在这一点上

定义为容器镜像的函数不支持层。当您构建容器镜像时,您可以将首选的运行时和依赖项作为镜像的一部分打包。

https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

所以我修改了我的构建过程,在构建镜像之前将所有层/库代码复制到每个Lambda函数中。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注