簡體   English   中英

帶有壓縮依賴項的 AWS Lambda“無法導入模塊”

[英]AWS Lambda “Unable to import module” with Zipped Dependencies

我正在嘗試上傳一個帶有壓縮依賴項的 python lambda 函數,但由於某種原因,我不斷收到

  "errorMessage": "Unable to import module 'CreateThumbnail'"

每當我測試它。

以下是我采取的步驟,幾乎與這些文檔相同。

  1. 使用virtualenv ~/lambda_envsource ~/lambda_env/bin/activate創建並激活一個 virtualenv
  2. 使用pip install Pillowpip install boto3 pip install Pillowpip install boto3
  3. 使用cd $VIRTUAL_ENV/lib/python2.7/site-packageszip -r9 ~/CreateThumbnail.zip *
  4. 使用zip -g ~/CreateThumbnail.zip CreateThumbnail.py將實際的 python lambda 函數添​​加到 zip 文件中,其中CreateThumbnail.py

    from __future__ import print_function import boto3 import os import sys import uuid from PIL import Image import PIL.Image s3_client = boto3.client('s3') def resize_image(image_path, resized_path): with Image.open(image_path) as image: image.thumbnail(tuple(x / 2 for x in image.size)) image.save(resized_path) def handler(event, context): for record in event['Records']: bucket = record['s3']['bucket']['name'] key = record['s3']['object']['key'] download_path = '/tmp/{}{}'.format(uuid.uuid4(), key) upload_path = '/tmp/resized-{}'.format(key) s3_client.download_file(bucket, key, download_path) resize_image(download_path, upload_path) s3_client.upload_file(upload_path, '{}resized'.format(bucket), key)
  5. 然后在控制台中我將處理程序設置為CreateThumbnail.handler

  6. 然后我通過 aws 控制台上傳CreateThumbnail.zip並單擊“保存並測試”我得到

"errorMessage": "Unable to import module 'CreateThumbnail'"

我對此感到非常困惑,因為感覺就像我在關注文檔。 誰能告訴我我在這里做錯了什么?

問題在於包裝層次結構。 安裝依賴后,按如下方式壓縮 lambda 函數(在下面的示例中,lambda_function 是我的函數名稱)

嘗試這個:

pip install requests -t .
zip -r9 lambda_function.zip .
zip -g lambda_function.zip lambda_function.py

不要讓您的瀏覽器在下載后自動解壓縮 lambda“項目”文件。 這似乎會在重新壓縮和使用文件時損壞文件。

您指出的教程使用python 3.8

在此處輸入圖片說明

你似乎在使用python 2.7

這可能就是原因。


我正在做一個類似的教程,但他們給了我們准備上傳的 zip,但警告選擇 python 3.7 而不是 3.8,否則它將無法正確運行。

暫無
暫無

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

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