繁体   English   中英

使用 API 网关将大型文件上传/下载到 Lambda function 而不使用任何 S3 存储桶

[英]Upload/Download LARGE files to/from Lambda function using API Gateway without making any use of S3 Bucket

我正在实施无服务器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 Package。

    3.3 Lambda 将生成的 WPK package 上传到 S3。

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

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

我的组件和流程图将是:

组件和流程图

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

  1. Use Node.js for streaming of the zip file, unzipping the file in a pipe, putting the content in a write stream pipe back to S3.
  2. 将您的代码部署到 AWS Glue 作业。
  3. 将文件上传到 S3,AWS Lambda 被触发,将文件名作为粘合作业的密钥,rest 将完成。 这样,您就有了一种无服务器方法和一个在解压缩大文件时不会导致memory问题的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM