在不使用S3存储桶的情况下,使用API​​网关向Lambda函数上传/下载大文件

时间:2019-09-27 12:51:34

标签: amazon-web-services api amazon-s3 lambda multipart

我正在使用以下方法实现无服务器 API

  1. API网关
  2. Lambda
  3. S3存储桶“如果需要”

我的流程是:

  1. 使用二进制文件“ zip”调用POST或PUT方法,并将其上传到Lambda。
  2. 在Lambda中:解压缩文件。
  3. 在Lambda中:对提取的文件运行确定的脚本。
  4. 在Lambda中:生成一个新的zip。
  5. 将其返回到我的桌面。

此流程已经实现,并且可以很好地处理小文件,上传10MB,下载6MB。 但是在处理大文件时遇到了问题,因为在很多情况下都会如此。为了解决此类问题,我正在考虑以下流程:

  1. 目标文件已上传S3存储桶。
  2. 将生成一个新事件并触发Lambda。
  3. Lambda内部任务:

    3.1 Lambda从S3存储桶下载文件。

    3.2 Lambda生成相应的WPK软件包。

    3.3 Lambda将生成的WPK软件包上载到S3。

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

但是我的这种设计问题是,完成设计不仅仅需要一个请求。我只想在1个请求中完成所有此过程,然后在其中传递目标zip文件并获取新的zip作为响应。 有什么想法吗?

我的组件和流程图为:

Component and Flow Diagram

1 个答案:

答案 0 :(得分:1)

如果想在保留 lessserver 方法的同时解压缩大文件,可以做几件事:

  1. 使用Node.js对zip文件进行流处理,将文件解压缩到管道中,然后将内容放在写流管道中返回S3。
  2. 将代码部署到AWS Glue作业。
  3. 将文件上传到S3,AWS Lambda被触发,将文件名作为粘合作业的关键,其余的将完成。 这样,您就可以使用无服务器方法和在解压缩大文件时不会引起内存问题的代码