制作jpg文件的缩略图时,AWS Lambda会无限期挂起

jeffery_the_wind

我遵循了这个示例,并对其进行了一些改动,但是现在它已经运行了很长时间了。我一直只使用PNG文件作为输入,并且一切正常。我最近尝试切换为使用JPG图像(由于PNG图像在垂直/水平方向上有一些限制)作为输入,并且我已经从AWS CLI测试了lambda函数,并且该函数invoke可以正常工作。

当我尝试从网站(jpg)上传相同的测试文件时,s3请求无限期挂起,从而使客户端旋转,而s3没有任何响应。我可以看到原始文件已成功上传到主存储桶,但从未创建缩略图,并且CloudWatch Log中没有记录任何记录同样,使用该invoke功能进行测试会返回代码202,并成功创建缩略图。所以我真的很茫然。

使用PNG文件时,一切也都可以正常工作,因此似乎支持jpg。我以为是我安装了不支持jpeg的PIL,但是我已经调试了它,并使用已安装的lambda函数和AWS对jpg图像进行了测试invoke这让我发疯,因为所有测试都起作用,只是在生产中,请求“悄无声息地死了”,使我无法进行故障排除。

这是lambda函数:

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, resized_width):
    with Image.open(image_path) as image:
        if image.size[0] > resized_width:
            image.thumbnail((resized_width, image.size[1]/(image.size[0]/resized_width)))
        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_small = '/tmp/resized_small-{}'.format(key)
        upload_path_medium = '/tmp/resized_medium-{}'.format(key)

        s3_client.download_file(bucket, key, download_path)
        resize_image(download_path, upload_path_small, 600)
        resize_image(download_path, upload_path_medium, 1200)
        s3_client.upload_file(upload_path_small, '{}small'.format(bucket), key)
        s3_client.upload_file(upload_path_medium, '{}medium'.format(bucket), key)

无论如何,我知道这个问题对于任何人都很难为我进行故障排除,但是如果有人有任何建议,将不胜感激。谢谢!

更新

因此,当请求挂在浏览器中时,我将invoke来自AWS CLI的手动功能输入编辑为新上传的jpg主图像的名称,然后创建了缩略图,然后浏览器中的Web请求突然完成,回应。如此奇怪的问题。

关闭

对于所有能够很好地阅读整篇文章的人,我已经确定了问题,正如John Rotenstein在他的评论中建议的那样,我检查了触发Lambda函数的S3事件,对此我已经忘了。我最初将其设置为仅触发png文件。因此,这就是整个问题。说明为什么CloudWatch中没有日志。

约翰·罗滕斯坦

首先要确认的是Amazon S3是否正确触发了Lambda函数。如果是这样,您应该在Lambda控制台的“监视”选项卡和CloudWatch Logs中看到它。

如果他们未显示该函数的调用,则需要在此处进行调查。检查您是否已为S3触发器打开了“启用触发器”,并且“事件类型”Object Created (All)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章