0

Я следовал за this example и немного изменил его, но он работал очень хорошо уже долгое время. Я использовал исключительно файлы PNG в качестве входных данных, и все работало. Недавно я попытался переключиться на использование изображений JPG (из-за некоторых ограничений изображений PNG до вертикальной/горизонтальной ориентации), и я проверил функцию лямбда от AWS CLI invoke, и он работает.AWS Lambda Hanging Неопределенно при создании миниатюр файлов jpg

Когда я пытаюсь загрузить тот же файл теста с веб-сайта (jpg), запрос s3 зависает бесконечно, оставляя клиент вращаться без ответа от s3. Я вижу, что исходный файл загружен в основное ведро успешно, но миниатюры никогда не создаются, и запись в журнал CloudWatch не записывается. Опять же, тестирование с использованием функции invoke возвращает код 202 и успешно создает миниатюры. Так что я действительно в растерянности.

Также все работает отлично при использовании файлов PNG, поэтому кажется, что-то с поддержкой jpg. Я предположил, что я установил PIL без поддержки jpeg, но я отлаживал это и тестировал с помощью jpg-изображений, используя установленную лямбда-функцию и AWS invoke. Это сводит меня с ума, потому что все тесты работают, только в процессе производства запрос «тихо умирает», и я не могу устранить неисправность.

Вот функция лямбда:

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 основного изображения, и что создало миниатюр, а затем веб-запрос в браузере неожиданно завершил и ответил. Такая странная проблема.

ЗАКРЫТИЕ

Для всех вас, кто был достаточно хорош, чтобы прочитать весь этот пост, я определил проблему, так же, как Джон Rotenstein рекомендовал в своем комментарии, я проверил событие S3, который запускает функцию лямбда , о котором я забыл. Я изначально установил его только для запуска для png-файлов. Так вот, вся проблема. Объясняет, почему в CloudWatch не было журнала.

+1

Первое, что нужно подтвердить, - правильно ли запустить Amazon S3 функцию лямбда. Если это так, вы должны увидеть его на вкладке «Мониторинг» консоли Lambda и в журналах CloudWatch. Если они не показывают вызов функции, то это то, где вам нужно исследовать. Убедитесь, что у вас включен «Включить триггер» для триггера S3 и что ** Тип события ** «Объект создан (все)». –

+0

Вот оно!Сначала я настроил фильтр, чтобы запускать только файлы 'png' ... Большое спасибо. Должен был это знать. –

ответ

1

Первое, что нужно подтвердить, - правильно ли запустить Amazon S3 функцию лямбда. Если это так, вы должны увидеть его на вкладке «Мониторинг» консоли Lambda и в журналах CloudWatch.

Если они не показывают вызов функции, то это то, где вам нужно исследовать. Убедитесь, что у вас включен «Включить триггер» для триггера S3 и что Тип события: Object Created (All).

Смежные вопросы