【发布时间】:2019-11-04 01:21:46
【问题描述】:
我有一些数据存储在 dynamo db 中,每个用户的一些高分辨率图像存储在 S3 中。要求是能够按需导出用户数据。因此,通过 api 端点,整理所有数据并将其作为响应发送。我们使用 aws lambda,使用 node.js 进行业务逻辑,使用 s3 存储图像,使用 sql db 存储关系数据
我已经建立了一个机制来连接api网关来接收请求并将它们放在一个sqs中。 sqs 将触发一个 lambda,该 lambda 将运行查询以收集所有数据和图像路径。我们会将所有图像和数据复制到一个以 custId 作为文件夹名称的新存储桶中。现在这里是我卡住的地方。如何从我们的新 aws 存储桶中流式传输这些数据。所有收集的数据约为 4gb。我试图通过 aws-lambda 进行流式传输,但一直失败。我可以流式传输单个文件,但不能将所有数据都以 zip 格式传输。 Hv 在节点中完成此操作,但不想设置 EC2 是可能的,并尝试直接使用 s3 和 lambdas 解决它
CAnt 似乎找到了一种将整个文件夹从 aws 流式传输到客户端作为对 http 请求的响应的方法
【问题讨论】:
-
流是什么意思?为什么不直接创建一个签名的 url 并将其发送给客户并让他们负责下载?
-
我试过了,但只能为单个文件而不是整个文件夹创建签名 URL。通过流,我的意思是整个文件没有加载到内存中,而是在读取时通过管道传输
-
建议压缩文件,这样客户只需下载一个文件。然后,您可以使用预签名的 URL。
-
但我不完全确定如何在不下载的情况下压缩它们。我能想到的唯一解决方案是下载 EC2 中的所有内容,压缩并流式传输它们。但这是最后的手段,我真的希望 lambda 有一个解决方案。请注意,我们需要的图像已经在不同的 lambda 上,所以我们只是在这个 lambda 中复制它们,而不是再次上传它们,在这种情况下,我们会有一个可以压缩它们的点
-
第二次我不确定甚至 ec2 是否可以工作☹️我们正在谈论每个用户最多 4gb 的多个文件。欢迎任何帮助建议或一般方向
标签: amazon-s3 aws-lambda