使用Api Gateway和Lambda导出CSV

Nex*_*xeh 1 amazon-web-services aws-lambda aws-api-gateway

我想做什么:

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

我做了什么:

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

我看到的问题:

这很有效,直到有大量的数据,我开始得到"体型太长".

我试图解决:

我做了一些谷歌搜索,我看到其他人有类似的问题.在一个解决方案中,我看到他们返回了他们创建的文件的链接.这个解决方案似乎对他们可行,因为他们有一台服务器 对于我的无服务器架构,它似乎有点棘手.我可以把文件存储到S3然后我必须返回一个链接到S3.这似乎可以工作,但感觉不像我错过配置选项.它也感觉就像通过返回s3 url来暴露实现.

我一直在寻找教程和人们做类似事情的例子,我没有找到任何东西.

我的问题:

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

Mar*_*k B 10

AWS Lambda响应有效负载的限制为6 MB.如果您需要服务器的文件大于该文件,则无法直接从Lambda提供这些文件.

使用S3存储和提供文件是执行此类操作的标准方法.我会将S3存储桶保密,并在Lambda函数中生成S3预签名URL.这将限制CSV文件可供下载的时间,并且它将阻止人们猜测您正在服务的文件的URL.您将使用S3生命周期策略在一段时间后归档或删除文件.

  • 我将文件写入S3,生成预先签名的URL,通过api网关将其返回给调用,并使用我的角度客户端使用提供的URL下载文件.非常感谢!我现在对解决方案更有信心. (2认同)