我做了一个前端,我想对与 AWS API Gateway 接口的 AWS Lambda 进行 REST 调用。
我将我的模型作为我最初在本地训练的 pickle 文件(以及我的编码器)转储。然后我将这些文件存储在 S3 存储桶中。
问题是我无法导入 pandas 和 sklearn 等库来进行模型预测,因为 lambda 控制台无法找到它们。
有没有人有任何建议来帮助解决这个问题?
我做了一个前端,我想对与 AWS API Gateway 接口的 AWS Lambda 进行 REST 调用。
我将我的模型作为我最初在本地训练的 pickle 文件(以及我的编码器)转储。然后我将这些文件存储在 S3 存储桶中。
问题是我无法导入 pandas 和 sklearn 等库来进行模型预测,因为 lambda 控制台无法找到它们。
有没有人有任何建议来帮助解决这个问题?
使用层将使依赖项更加可重用,并且可能更容易维护和部署。
简短的版本是:
requirements.txt
frompip freeze
或类似的,如下所示:pandas==0.23.4
pytz==2018.7
get_layer_packages.sh
bash 脚本,如下所示:#!/bin/bash
export PKG_DIR="python"
rm -rf ${PKG_DIR} && mkdir -p ${PKG_DIR}
docker run --rm -v $(pwd):/foo -w /foo lambci/lambda:build-python3.6 \
pip install -r requirements.txt --no-deps -t ${PKG_DIR}
chmod +x get_layer_packages.sh
./get_layer_packages.sh
zip -r my-Python36-Pandas23.zip .
我对 python 不是很有经验,花了很多时间在压缩 pandas 和虚拟环境,并且从未真正将 docker 用于任何 IRL,但这个过程实际上比venv > zip > 我之前使用的上传过程。
您需要创建一个部署包,其中包含您要在 Lambda 中使用的包(sklearn 和 pandas)。
然后,您可以将该部署包上传到 S3 并将其导入 Lambda 函数,或者将其上传到 Lambda 函数本身。
Lambda 函数代码必须在 AWS Lambda 之外编写并包含在部署包中。这是有关如何操作的指南。