代码之家  ›  专栏  ›  技术社区  ›  PeptideWitch

AWS Lambda和S3:将S3对象路径传递给图像处理函数

  •  0
  • PeptideWitch  · 技术社区  · 5 年前

    我的目的是在S3服务器上存储一个大的映像,然后获得一个lambda函数来读取/处理文件并保存结果输出。我用的是一个叫 python-bioformats

    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)。有没有办法让第二个函数(以filepath作为参数)以类似filepath的方式引用s3对象?我也不想公开s3 bucket/对象,所以在服务器端这样做比较理想。

    1 回复  |  直到 5 年前
        1
  •  1
  •   John Rotenstein    5 年前

    如果你的 bioformats.get_omexml_metadata() 函数需要一个filepath作为参数,然后在调用函数之前需要下载对象。

    这可能是AWS Lambda函数中的一个问题,因为可用磁盘空间有500MB的限制(并且只有在 /tmp/ ).

    如果可以将数据作为流处理,则可以根据需要读取数据,而无需先保存到磁盘。然而 python-bioformats documentation 不显示此选项。事实上,如果您的上述代码正常工作,我会感到惊讶,因为它期望 路径 虽然 imageobj 目录