Amazon web services 使用API网关向Lambda函数上传/下载大型文件,无需使用S3 Bucket

Amazon web services 使用API网关向Lambda函数上传/下载大型文件,无需使用S3 Bucket,amazon-web-services,api,amazon-s3,lambda,multipart,Amazon Web Services,Api,Amazon S3,Lambda,Multipart,我正在实现一个无服务器API,使用: API网关 Lambda S3桶“如果需要” 我的流程是: 使用二进制文件“zip”调用POST或PUT方法,将其上载到Lambda 在Lambda中:解压缩文件 在Lambda中:对提取的文件运行确定的脚本 在Lambda中:生成一个新的zip 将其返回到我的桌面 这个流程已经实现,它可以很好地处理小文件,10MB用于上传,6MB用于下载。 但我在处理大文件时遇到了一些问题,因为在很多情况下都会遇到这种情况。为了解决这个问题,我考虑以下流程: 目标文件被上

我正在实现一个无服务器API,使用:

  • API网关
  • Lambda
  • S3桶“如果需要”
  • 我的流程是:

  • 使用二进制文件“zip”调用POST或PUT方法,将其上载到Lambda
  • 在Lambda中:解压缩文件
  • 在Lambda中:对提取的文件运行确定的脚本
  • 在Lambda中:生成一个新的zip
  • 将其返回到我的桌面
  • 这个流程已经实现,它可以很好地处理小文件,10MB用于上传,6MB用于下载。 但我在处理大文件时遇到了一些问题,因为在很多情况下都会遇到这种情况。为了解决这个问题,我考虑以下流程:

  • 目标文件被上传到S3存储桶
  • 将生成一个新事件并触发Lambda
  • Lambda内部任务:

    3.1 Lambda从S3 bucket下载文件

    3.2 Lambda生成相应的WPK包

    3.3 Lambda将生成的WPK包上传到S3中

    3.4 Lambda返回与上载文件相关的签名URL作为响应

  • 但我对这种设计的问题是,它需要的不仅仅是一个请求才能完成。我只想在一个请求中完成所有这些过程,在其中传递目标zip文件,并获得新的zip作为响应。 有什么想法吗

    我的组件和流程图是:


    如果您想在保持无服务器方式的同时解压缩大型文件,可以做以下几件事:

  • 使用Node.js对zip文件进行流式处理,将文件解压缩到管道中,将内容放回写入流管道中的S3
  • 将代码部署到AWS粘合作业
  • 将文件上传到S3,AWS Lambda将被触发,并将文件名作为粘合作业的密钥传递,其余工作将完成。 这样,您就有了一种无服务器的方法,并且代码在解压缩大型文件时不会导致内存问题

  • 如果希望在保持无服务器方式的同时解压大型文件,可以做以下几件事:

  • 使用Node.js对zip文件进行流式处理,将文件解压缩到管道中,将内容放回写入流管道中的S3
  • 将代码部署到AWS粘合作业
  • 将文件上传到S3,AWS Lambda将被触发,并将文件名作为粘合作业的密钥传递,其余工作将完成。 这样,您就有了一种无服务器的方法,并且代码在解压缩大型文件时不会导致内存问题