AWS Lambda在制作JPG文件的缩略图时无限期地悬挂



我遵循了这个示例并稍微更改了它,但是现在很长一段时间以来它运行良好。我一直在使用PNG文件作为输入,一切都在起作用。我最近尝试切换以使用JPG图像(由于PNG图像的某些局限性到VERT/水平方向)作为输入,并且我从AWS CLI invoke中测试了Lambda函数,并且它起作用。

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

使用PNG文件时,一切都可以正常工作,因此它似乎是JPG支持的东西。我以为我已经在没有JPEG支持的情况下安装了PIL,但是我已经进行了调试,并使用已安装的Lambda功能和AWS invoke进行了测试,并使用JPG图像进行了测试。这让我发疯,因为所有测试都起作用,只是在生产请求"默默地死亡"中,使我无法进行故障排除。

这是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)

无论如何,我知道这个问题对于我那里的任何人都将很难为我进行故障排除,但是如果有人有任何建议,这将是极大的赞赏。谢谢!

update

因此,当请求悬挂在浏览器中时,我将手册invoke函数的输入从AWS CLI编辑为新上传的JPG Main Image的名称,并创建了缩略图,然后在Web请求中创建了Web请求。浏览器突然完成并做出了回应。这是一个奇怪的问题。

闭合

对于所有足以阅读整个帖子的人,我已经确定了这个问题,就像约翰·罗滕斯坦(John Rotenstein)在评论中所建议的那样,我检查了触发lambda功能的S3事件,我有点忘记了。。我最初只是将其设置为png文件。这就是那里的整个问题。说明为什么在CloudWatch中没有日志。

要确认的第一件事是亚马逊S3是否正确触发了lambda功能。如果是这样,您应该在Lambda控制台的"监视"选项卡和CloudWatch日志中看到它。

如果他们没有显示函数的调用,那么这是您需要调查的地方。检查您对S3触发器的"启用触发器"打开,并且事件类型Object Created (All)

最新更新