【问题标题】:Exporting data over an api from s3 using lambda使用 lambda 从 s3 通过 api 导出数据
【发布时间】: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


【解决方案1】:

好的,找到答案了。我现在没有尝试返回 zip 流,而是将文件夹压缩并保存在存储桶本身上,并为其返回签名的 url。许多节点模块帮助我们压缩 s3 文件夹,而无需将整个文件加载到内存中。使用它我们已经压缩了我们的文件夹并返回了一个签名的 url。它在实际负载下的表现还有待观察。很快就会这样做

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2019-02-14
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多