API网关将大文件GET / PUT放入S3

Hex*_*xie 6 amazon-s3 amazon-web-services aws-lambda aws-api-gateway

遵循此AWS文档,我能够在API网关上创建一个新的终结点,该终结点能够处理S3存储库中的文件。我遇到的问题是文件大小(AWS的有效负载限制为10MB)。

我想知道,如果不使用lambda解决方法(此链接将对此有所帮助),是否有可能上传和获取大于10MB的文件(如果需要,甚至可以二进制),因为这是使用S3服务作为代理。 -还是这个限制?

我尝试了PUTting和GETting大于10MB的文件,每个响应都是典型的"message": "Timeout waiting for endpoint response"

看起来这Lambda是唯一的方法,只是想知道是否有人使用S3作为代理来解决此问题。

谢谢

Ka *_*ong 5

您可以创建Lambda代理函数,该函数将返回带有S3预签名URL的重定向链接。

生成预签名的S3 URL的示例JavaScript代码:

var s3Params = {
    Bucket: test-bucket,
    Key: file_name,
    ContentType: 'application/octet-stream',
    Expires: 10000
};

s3.getSignedUrl('putObject', s3Params, function(err, data){
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您的Lambda函数将重定向响应返回到您的客户端,例如,

{
    "statusCode": 302,
    "headers": { "Location": "url" }
}
Run Code Online (Sandbox Code Playgroud)

您也许可以从本文档中找到所需的更多信息。

  • 但是有了重定向,你不会有初始请求的payload还是太大的问题吗?我的意思是 PUT 仍然会通过 API 网关,这会引导您进入 Lambda,它将重定向到直接 S3 上传。但它会失败,因为 API 网关处的有效负载太大,还是我误解了什么?我实际上已经实现了它,它可以很好地与小文件的重定向配合使用,但是对于大文件,问题仍然存在(它甚至无法通过我的 API 网关......) (4认同)