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

2024-09-27 19:18:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个ML项目,该项目利用AWS Lambda构建模型并生成预测。lambda是用python编写的,使用了几个ML库,如pandas、sklearn、numpy和sciketlearn。 这些Lambda使用由Lambda层打包的共享代码。 我使用AWSCDK进行项目部署。CDK代码是用TypeScript编写的,不要问我为什么混合使用Python和TypeScript,它在这种情况下不相关

由于存在ML库,包(lambda代码+层)的大小超过了允许的最大大小250MB

在AWS宣布支持集装箱化lambdas之后,我决定尝试一下,以克服250MB的限制。然而,我没有找到任何适合我的情况的好例子,所以我正在尝试自己构建它

CDK代码如下所示:

...
// Create a lambda layer from code
// Code is located in lambda-code/ml directory and it looks 
// like any Python package with main ML and DB connection functions
const mlLayer = new PythonLayerVersion(this, 'mlLayer', {
      entry: './lambda-code/ml/',
})
...
// Lambda function is specified like
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

分类lambda中的Dockerfile:

# Use the python lambda image from AWS ECR
FROM public.ecr.aws/lambda/python:3.7

COPY requirements.txt ./

RUN pip3 install -r requirements.txt

COPY index.py ./

CMD ["index.classify_transaction_handler"]

运行cdk deploy时,出现以下错误:

This lambda function uses a runtime that is incompatible with this layer (FROM_IMAGE is not in [python3.7])

有人遇到过这样的问题吗?此错误是否意味着mlLayer版本与lambdaclassifyTransactionLambda不兼容

任何帮助都将不胜感激


Tags: 项目lambda代码fromawslayeris情况
1条回答
网友
1楼 · 发布于 2024-09-27 19:18:30

此时

Functions defined as container images do not support layers. When you build a container image, you can package your preferred runtimes and dependencies as a part of the image.

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

因此,我修改了构建,在构建图像之前将所有层/库代码复制到每个lambda函数

相关问题 更多 >

    热门问题