【发布时间】:2013-09-11 19:51:33
【问题描述】:
我在 Amazon EC2 实例中部署了一个 REST 服务器。我还配置了一个 Amazon S3 存储桶来存储用户在与 API 交互时生成的所有数据。存储的主要信息是图像。用户可以通过对特定 URL 和凭据执行 PUT HTTP 请求来上传图像。 PUT 请求可以通过 EC2 实例完成,因为上传需要授权,用户无法直接访问 S3 实例。当 EC2 收到有效的 PUT 请求时,我使用 AWS PHP 开发工具包将对象上传到 S3 存储桶。我使用的方法是 putObject。对于第一部分,我认为没有更多的选择。但是,为了允许用户下载以前上传的内容,我有两种不同的选择:
第一个是为用户提供一个带有指向文件的 url 到 S3 存储桶密钥,因为文件是以公共方式上传的。所以 用户可以直接从 S3 服务器下载图像,无需任何 与 EC2 交互。
第二种是使用EC2实例上运行的REST API 在执行一些 HTTP GET 请求时提供图像内容。在这个 案例我应该使用 AWS PHP SDK 从 S3“下载”图像 服务器并将其返回给用户。使用的方法是 获取对象。
在我看来,另一种可能的解决方案是提供一个 从 EC2 实例到 S3 存储桶 URL 的 HTTP 重定向,但随后,用户 客户端应该实现两个连接来检索一个简单的图像(一个 如果用户在移动设备上工作,那就不好了)。
我已经实现了第二个选项,似乎工作正常。
我的问题是:如果通过 REST API 从 EC2 实例访问文件,即从 S3 实例下载内容,那么与直接访问带有指向 S3 服务器的 url 的文件相比,会产生很大的开销.两个实例都在同一区域(爱尔兰)中运行。我不知道如何根据带宽计算从 S3 到 EC2(反之亦然)的传输。来自 S3-EC2-user 的传输是否会比 S3-user 计算两倍?这种传输是通过某种局域网完成的吗?
我更喜欢第二种方式,因为我可以控制内容访问、记录谁在访问每个文件、更改存储桶对用户来说是透明的等等。
谢谢!
【问题讨论】:
标签: php amazon-web-services amazon-s3 amazon-ec2