API网关将大文件GET / PUT转换为S3

时间:2017-03-23 04:57:46

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

this AWS documentation之后,我能够在我的API网关上创建一个能够操纵S3存储库上的文件的新端点。我遇到的问题是文件大小(AWS having a payload limitation of 10MB)。

我想知道,如果不使用lambda解决方法(this link would help with that),是否可以上传并获取大于10MB的文件(如果需要的话,甚至是二进制文件),因为这是使用S3服务作为代理 - 或者是限制吗?

我已尝试PUT ting和GET大于10MB的文件,每个回复都是典型的"message": "Timeout waiting for endpoint response"

看起来Lambda是唯一的方法,只是想知道是否还有其他人使用S3作为代理。

谢谢

2 个答案:

答案 0 :(得分:5)

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

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

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

s3.getSignedUrl('putObject', s3Params, function(err, data){
   ...
}

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

{
    "statusCode": 302,
    "headers": { "Location": "url" }
}

您可以从此documentation找到所需的更多信息。

答案 1 :(得分:2)

如果您有大文件,请考虑直接从客户端上传到S3。您可以创建一个API端点,为客户端返回signed URL,以用于上传(实施访问控制)您的私人内容。

此外,您可以考虑将multi-part uploads用于更大的文件,以加快上传速度。