AWS Lambda и S3: передача пути объекта s3 в функцию обработки изображения - PullRequest
0 голосов
/ 03 мая 2019

Мое намерение - сохранить большое изображение на моем сервере S3, а затем получить лямбда-функцию для чтения / обработки файла и сохранения полученных результатов. Я использую пакет под названием python-bioformats для работы с проприетарным файлом изображения (который по сути представляет собой целую кучу tiff-файлов, сложенных вместе). Когда я использую

def lambda_handler(event, context):

    import boto3

    key = event['Records'][0]['s3']['object']['key'].encode("utf-8")
    bucket = 'bucketname'

    s3 = boto3.resource('s3')
    imageobj = s3.Object(bucket, key).get()['Body'].read()

    bioformats.get_omexml_metadata(imageobj)

У меня такое ощущение, что лямбда-функция пытается загрузить весь файл (5 ГБ) при создании imageobj. Есть ли способ, которым я могу просто заставить вторую функцию (которая принимает путь к файлу в качестве аргумента) ссылаться на объект s3, как путь к файлу? Я также хотел бы не раскрывать корзину / объект s3 публично, поэтому выполнение этой серверной стороны было бы идеальным.

1 Ответ

1 голос
/ 03 мая 2019

Если вашей функции bioformats.get_omexml_metadata() требуется аргумент filepath в качестве аргумента, вам необходимо загрузить объект перед вызовом функции.

Это может быть проблемой в лямбда-функции AWS, поскольку существуетОграничение в 500 МБ на доступное дисковое пространство (и только в /tmp/).

Если вместо этого данные могут быть обработаны как поток, вы можете прочитать данные, как это требуется, без предварительного сохранения на диск.Однако документация python-bioformats не показывает это как опцию.На самом деле, я был бы удивлен, если ваш приведенный выше код работает, учитывая, что он ожидает путь , в то время как imageobj является содержимым файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...