【问题标题】:AWS Lambda "Unable to import module" with Zipped Dependencies带有压缩依赖项的 AWS Lambda“无法导入模块”
【发布时间】:2017-01-18 01:27:06
【问题描述】:

我正在尝试上传一个带有压缩依赖项的 python lambda 函数,但由于某种原因,我不断收到

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

每当我测试它时。

这是我采取的步骤,与these docs 几乎相同。

  1. 使用virtualenv ~/lambda_envsource ~/lambda_env/bin/activate 创建并激活一个virtualenv
  2. 使用pip install Pillowpip install boto3 安装Pillow 和boto3
  3. 带有cd $VIRTUAL_ENV/lib/python2.7/site-packageszip -r9 ~/CreateThumbnail.zip * 的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'"

我对此感到非常困惑,因为我觉得我在关注文档。谁能告诉我我在这里做错了什么?

【问题讨论】:

    标签: python amazon-web-services lambda


    【解决方案1】:

    【讨论】:

    • 谢谢,我刚刚在 lambda.json 中使用 "requirements": ["Pillow","boto3"] 尝试了 lambda-uploader,但不幸的是我得到了同样的错误 "errorMessage": "Unable to import module 'CreateThumbnail'"
    【解决方案2】:

    问题在于包装层次结构。安装好依赖后,按如下方式压缩 lambda 函数(在下面的示例中,lambda_function 是我的函数的名称)

    试试这个:

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

    【讨论】:

      【解决方案3】:

      下载后不要让浏览器自动解压 lambda“项目”文件。重新压缩和使用文件时,这似乎会损坏文件。

      【讨论】:

        【解决方案4】:

        您指出的教程使用python 3.8

        你似乎在使用 python 2.7

        这可能是原因。


        我正在做一个similar tutorial,但他们给了我们准备上传的 zip,但警告选择 python 3.7 而不是 3.8,否则它将无法正确运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-18
          • 1970-01-01
          • 1970-01-01
          • 2021-07-25
          相关资源
          最近更新 更多