Запуск Perl-скрипта в лямбда-функции с Python3.6 Runtime - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь запустить exiftool для чтения метаданных изображения в скрипте python, как часть лямбда-функции в AWS.

В экземпляре ec2, выполняющем amazon linux, - это то, что среда выполнения python3.6 использует , я могу загрузить инструмент, извлечь его и легко запустить.Тем не менее, попытка сделать это с помощью моего Python-скрипта в лямбда-функции не работает.

Моя лямбда-функция выглядит следующим образом:

import imageio
import subprocess
import utils
import os
import stat
import boto3

s3_client = boto3.client('s3')

# get exif tool
s3_client.download_file(
    'zipped.code',
    'Image-ExifTool-11.53.tar.gz', 
    '/tmp/Image-ExifTool-11.53.tar.gz')
p = subprocess.run('tar -zxvf Image-ExifTool-11.53.tar.gz', cwd='/tmp', shell=True)

def get_meta_data(im):
    p = subprocess.Popen(
        '/tmp/Image-ExifTool-11.53/exiftool -',
        stdout=subprocess.PIPE,
        stdin=subprocess.PIPE,
        stderr=subprocess.PIPE,
        shell=True)
    out, err = p.communicate(input=imageio.imwrite('<bytes>', im, format='jpg'))
    print(out) # b''
    print(err) # b'/bin/sh: /tmp/Image-ExifTool-11.53/exiftool: /usr/bin/perl: bad interpreter: No such file or directory\n'


def lambda_handler(event, context):
    src_key = event['src_key']
    image = utils.download_image_to_memory(src_key)
    print(get_meta_data(image))

Я запускал этот код локально, и он работает.Если я печатаю содержимое /usr/bin в лямбда-функции с помощью print(os.listdit('/usr/bin')), то там нет исполняемого файла perl.Однако в каталоге /usr/bin на экземпляре ec2 с amazon linux есть исполняемый файл perl.

Я подозреваю, что проблема заключается в моем отсутствии perl (инструмент написан на perl), но почему это так?нет интерпретатора perl, учитывая, что лямбды должны работать с образом amazon linux?

1 Ответ

3 голосов
/ 03 июля 2019

Попробуйте добавить к вашим ссылочным слоям один из ARN, перечисленных в https://p3rl.org/AWS::Lambda (там есть инструкции).

Я сам этого не делал, но из всего, что я вижу, должно работать.

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