使用Python3.6运行时运行Lambda功能中的Perl脚本



我正在尝试运行一个exiftool,以读取python脚本中的图像元数据,这是AWS上的lambda函数的一部分。

在运行Amazon Linux的EC2实例上,这是Python3.6运行时使用的,我可以下载该工具,提取它,然后轻松运行。但是,尝试从lambda函数中的Python脚本执行此操作不起作用。

我的lambda功能如下:

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 directoryn'

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

我在本地运行了此代码,并且有效。如果我通过print(os.listdit('/usr/bin'))在lambda函数中打印/usr/bin的内容,则其中没有perl可执行文件。但是,在使用Amazon Linux的EC2实例上的/usr/bin目录中,perl可执行。

我怀疑问题是我缺乏perl(工具是用perl编写的(,但是为什么没有perl解释器鉴于Lambdas应该使用Amazon Linux映像运行?

尝试将https://p3rl.org/aws:: lambda中列出的ARN之一添加到您的引用层中(那里有说明(。

我自己还没有做到这一点,但是从我所看到的一切开始都应该起作用。

最新更新