首页 > 解决方案 > 如何使用aws控制台将带有库的python代码从Windows本地机器上传到aws lambda

问题描述

我需要使用通过 API 网关触发的 AWS Lambda。我有 python 脚本,它从 S3bucket 加载机器学习模型并从 api 调用获取输入并预测结果。我可以成功触发用python内联编写的lambda函数。但我想使用机器学习包来预测 lambda 函数。所以我知道我需要上传带有安装在虚拟环境中的包的代码,我做到了。但是触发时的 lambda 给出了错误“无法导入模型 lambda_function”。我有带有方法“处理程序”的 lambda_function.py。请让我知道我是否做得对(创建虚拟环境并安装软件包并上传它)以及为什么会出现此错误。另外,请告诉我 Windows 和 AWS 控制台的解决方案。我已经看到了许多使用 Linux 命令和使用 aws cli 的答案。

ZIP文件夹

lambda_function

lamnda 功能设置

lambda函数设置

更新:

这真让我抓狂!。我已经尝试了答案中找到的所有方法,但没有一个对我有用。它给出了同样的错误:'无法导入模块:lambda_function'所以我无法理解错误在哪里。如果您有任何建议,请帮助我。在你说函数名称之前:我有正确的名称:lambda_function.lambda_handler。我压缩了内容而不是目录。请看下面我的 lambda 代码和 lambda 设置 lambda json 文件 lambda 函数代码: import boto3 import os import uuid import sklearn import pickle

def lambda_handler(event, context):
s3_client = boto3.client('s3')
s_desc=event['params']['querystring']['token']
X_test1=[]
X_test1.append(s_desc)
#load model
bucket = 'harshini-snow-bucket'
key = 'model.pkl'
download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
s3_client.download_file(bucket, key, download_path)

f = open(download_path, 'rb')
model = pickle.load(f)
f.close()
#class_predicted = model.predict(X_test1)

return X_test1

如果还有其他方法,请告诉我。我会尝试任何方法来解决这个问题。

更新 2:

错误

代码

标签: pythonwindowsamazon-web-servicesaws-lambda

解决方案


首先在本地机器的一个文件夹中安装所有必需的包。还包括该文件夹中的主 lambda_function.py 文件。现在选择文件夹中的所有包和 python 文件并将它们压缩成一个 .zip 文件。在这里,您必须确保压缩文件夹的内容而不是文件夹本身。然后,您可以直接或通过 s3 将 zip 文件上传到 lambda。还有一点需要注意的是,python 文件是否命名为“ lambda_function.py ”。默认情况下,lambda 假定主 python 文件具有“lambda_function.py”名称。如果您使用了任何其他名称,您可以在Handler内的Function code部分下从 lambda 控制台更改文件名......希望这会有所帮助。


推荐阅读