我的意图是在我的S3服务器上存储一张大图像,然后获得一个lambda函数来读取/处理文件并保存结果输出。我正在使用一个名为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)
我感觉到lambda函数在制作imageobj时会尝试下载整个文件(5GB)。有没有一种方法可以让我获得第二个函数(将文件路径作为参数)以类似于文件路径的方式引用s3对象?我也不想公开公开s3存储桶/对象,因此在服务器端执行此操作很理想。
答案 0 :(得分:1)
如果您的bioformats.get_omexml_metadata()
函数需要文件路径作为参数,那么在调用该函数之前,您需要先下载对象。
这可能是AWS Lambda函数中的问题,因为可用磁盘空间限制为500MB(并且仅在/tmp/
中)。
如果可以将数据作为流处理,则可以按需读取数据而无需先保存到磁盘。但是,python-bioformats
documentation并未将此显示为选项。实际上,如果您的上述代码有效,我会感到惊讶,因为它期望一个 path 而imageobj
是该文件的 contents 。