簡體   English   中英

如何使用 aws 控制台將帶有庫的 python 代碼從 Windows 本地機器上傳到 aws lambda

[英]how to upload python code with libraries to aws lambda from windows local machine using aws console

我需要使用通過 API 網關觸發的 AWS Lambda。 我有 python 腳本,它從 S3bucket 加載機器學習模型並從 api 調用獲取輸入並預測結果。 我可以成功觸發在 python 中內聯編寫的 lambda 函數。 但我想使用機器學習包來預測 lambda 函數。 所以我開始知道我需要上傳帶有安裝在虛擬環境中的包的代碼,我做到了。但是 lambda 在觸發時會給出錯誤“無法導入模型 lambda_function”。 我有帶有方法“handler”的 lambda_function.py。 請讓我知道我是否做得對(創建虛擬環境並安裝軟件包並上傳它)以及為什么會出現此錯誤。 另外,讓我知道 Windows 和 AWS 控制台的解決方案。 我已經看到很多關於 Linux 命令和使用 aws cli 的答案。

ZIP文件夾

lambda_function

lamnda 功能設置

lambda 函數設置

更新:

這真讓我抓狂!。 我已經嘗試了答案中找到的所有方法,但沒有一個對我有用。 它給出了相同的錯誤:'無法導入模塊:lambda_function'所以我無法理解錯誤在哪里。 如果您有任何建議,請幫助我。 在你說函數名稱之前:我有正確的名稱:lambda_function.lambda_handler。 我壓縮了內容而不是目錄。 請在下面的lambda json 文件lambda 函數代碼中查看我的 lambda 代碼和 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:

錯誤

代碼

首先在本地機器的文件夾中安裝所有必需的包。 還包括該文件夾中的主要 lambda_function.py 文件。 現在選擇文件夾中的所有包和 python 文件,並將它們壓縮為 .zip 文件。 在這里,您必須確保壓縮文件夾的內容而不是文件夾本身。 然后您可以直接或通過 s3 將 zip 文件上傳到 lambda。 另一點要注意的是,python 文件是否命名為“ lambda_function.py ”。 默認情況下,lambda 假定主 python 文件具有“lambda_function.py”名稱。 如果您使用了任何其他名稱,則可以在Handler內的Function code部分下從 lambda 控制台更改文件名...希望這會有所幫助。

您必須使用dockerEC2為 lambda 制作自定義部署包。 如果您在本地機器上制作一個包,它將不起作用,因為它不會編譯所需的庫。

這是完整的示例,您將如何制作自定義包,此示例將 Python 的PILLOW圖像處理庫與 lambda 代碼一起打包,您可以在同一個包中以相同的方式打包模型所需的所有其他庫PIL

鏈接到示例

記住一件事,在示例文件名是CreateThumbnail.py ,您可以給它任何名稱,但始終以這種方式配置您的處理程序 filename.handler-function ,例如disco.lambda_handler其中disco.py是文件名, lambda_handler是代碼處理程序模塊拉姆達

此處的答案在技術上是正確的,但如果您在 Windows 機器(或 Amazon Linux 以外的任何機器)上工作,則在將自定義包放入 Python 應用程序時可能會遇到很多問題。 Lambda 應用程序在 Amazon Linux 上運行,因此您需要使用該操作系統或任何盡可能接近的操作系統安裝軟件包。

這是我的答案之一,它描述了我如何為我的 Lambda 應用程序組合包:

https://stackoverflow.com/a/50767639/3023353

我知道我回答這個問題有點晚了,但我在使用 python 的 pandas 庫時遇到了同樣的問題。

這是幫助我在這里解決此問題的鏈接

所以簡而言之,答案是

1.去這里

2.搜索你要使用的庫

3.然后去下載選項

4.下載帶有Linux選項的文件

5.解壓縮項目文件夾中的文件(我使用7-zip)

6.現在為您的項目制作一個新的zip並上傳到lambda

您需要在 AWS Lambda 中為外部 Python 庫添加一個層。

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

AWS 文檔中的示例非常糟糕,對於我們的團隊來說,這並不容易。 不得不手動安裝一些庫,但這有效。

這也讓我發瘋。 我正在使用 Windows 創建 python 包。 解決這個問題的關鍵是將你的包存儲在一個名為python的文件夾中。 當我將文件夾命名為其他任何內容時,它都不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM