我想做什么:
我想要做的是有一个url,它会向调用者返回一个CSV文件,该文件本质上是一个数据导出。我希望这仍然是一个无服务器的解决方案。
我做了什么:
我创建了一个带有我想要的URL的AWS API网关。我创建了一个lambda,它将查询数据库并创建该数据的CSV字符串。该数据放在JSON对象中并返回。然后,API网关从json对象获取CSV数据,并使用适当的标头将CSV返回给调用者,以指示它是CSV和附件。从浏览器进行测试我会像我预期的那样自动下载。
我看到的问题:
这种情况很有效,直到有大量的数据,我开始得到#34;身体尺寸太长"。
我尝试解决:
我做了一些谷歌搜索,我看到其他人有类似的问题。在一个解决方案中,我看到他们返回了他们创建的文件的链接。这个解决方案似乎对他们可行,因为他们有一台服务器对于我的无服务器架构,它似乎有点棘手。我可以把文件存储到S3然后我必须返回一个链接到S3。这似乎可以工作,但感觉不像我错过配置选项。通过返回s3 url也感觉就像揭露实现一样。
我已经四处寻找教程和人们做类似事情的例子,而我却找不到。
我的问题:
有办法做到这一点吗? 还有其他我不知道的解决方案吗? 如何从较大尺寸的API网关
返回文件,在本例中为CSV答案 0 :(得分:9)
AWS Lambda响应有效负载有limit of 6 MB。如果您需要服务器的文件大于您所能获得的文件,则无法直接从Lambda提供这些文件。
使用S3存储和提供文件是执行此类操作的标准方法。我会将S3存储桶保密,并在Lambda函数中生成S3 Pre-signed URLs。这将限制CSV文件可供下载的时间,并且它将阻止人们猜测您正在服务的文件的URL。在一段时间后,您将使用S3 Lifecycle Policy存档或删除文件。