【问题标题】:CSV Export using Api Gateway and Lambda使用 Api Gateway 和 Lambda 导出 CSV
【发布时间】:2017-07-19 22:23:57
【问题描述】:

我想做的事:

我想做的是有一个 url,它将返回给调用者一个 CSV 文件,该文件本质上是数据的导出。我希望这仍然是一个无服务器解决方案。

我做了什么:

我已经使用我想要的 URL 创建了一个 AWS API 网关。我创建了一个 lambda,它将查询数据库并创建该数据的 CSV 字符串。该数据被放置在 JSON 对象中并返回。 API 网关然后从 json 对象中获取 CSV 数据,并将 CSV 以适当的标题返回给调用者,以表明它是 CSV 和附件。从浏览器测试我会自动下载,就像我想要的那样。

我看到的问题:

这很有效,直到有大量数据时我开始得到“身体尺寸太长”。

我的解决方法:

我在谷歌上搜索了一下,发现其他人也遇到了类似的问题。在一个解决方案中,我看到他们返回了指向他们创建的文件的链接。这个解决方案对他们来说似乎是可行的,因为他们有一台服务器。对于我的无服务器架构,这似乎有点棘手。我可以将文件存储到 S3 中,但是我必须返回一个指向 S3 的链接。这似乎可以工作,但感觉不对,就像我缺少配置选项一样。感觉就像我通过返回 s3 url 来暴露实现一样。

我四处寻找教程和做类似事情的人的例子,但我没有找到。

我的问题:

有没有办法做到这一点? 还有其他我不知道的解决方案吗? 我如何从更大尺寸的 API 网关返回文件,在这种情况下为 CSV

【问题讨论】:

  • 我坚持让 CSV 生成并开始下载。你是怎么设置的?

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

AWS Lambda 响应负载有一个 limit of 6 MB。如果您需要服务器的文件大于您将无法直接从 Lambda 提供它们的文件。

使用 S3 存储和提供文件是执行此类操作的标准方法。我会将 S3 存储桶保留为私有并在 Lambda 函数中生成 S3 Pre-signed URLs。这将限制 CSV 文件可供下载的时间,并防止人们猜测您正在提供的文件的 URL。您可以使用S3 Lifecycle Policy 在一段时间后归档或删除文件。

【讨论】:

  • 谢谢。我只是在探索这个想法,但不知道 s3 预签名的 url。我现在要研究一下,因为这似乎解决了我的一些内部问题
  • @Nexeh 您还可以将 CloudFront 放在您的 S3 存储桶前面,这将进一步向最终用户隐藏您的实施细节。它还将加快文件下载速度。 docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…
  • 我将文件写入 S3,生成预签名的 url,通过 api 网关将其返回给调用,并使用我的 angular 客户端使用提供的 url 下载文件。太感谢了!我现在对解决方案更有信心了。
猜你喜欢
  • 2018-11-25
  • 2023-03-06
  • 1970-01-01
  • 2018-11-27
  • 2019-12-12
  • 2017-08-24
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多