耦合Amazon EC2,Amazon S3和Android应用程序进行照片共享

时间:2013-01-10 21:37:24

标签: android amazon-s3 amazon-ec2

我决定使用Amazon AWS购买我的Android云端应用,这是一款照片分享应用。我使用PHP和MySql在EC2上设置了一个实例,用于处理简单请求和存储基本用户信息。我还设置了S3服务来存储所有照片。

但现在我想要一些建议。我不知道如何处理这三个问题。 EC2服务器是否应始终用作使用应用程序的最终用户和S3服务之间的中介?或者Android上的最终用户是否可以直接与S3通信?

比如说用户在我的应用程序上注册并决定上传图片。我应该将JPEG发送到我的EC2服务器,然后让服务器将图片发送到S3吗?或者我应该将它直接发送到S3,在设备上获取URL,然后将其发送到我的EC2服务器?无论哪种方式,我需要在我的MySQL数据库中存储S3 url地址,以便将它们发送给其他用户,这样他们就可以访问新公开的图像。

关于我应该怎么做的任何想法?

1 个答案:

答案 0 :(得分:2)

我认为你真的没有选择。出于安全考虑,你将不得不通过EC2。如果手机应用程序直接上传到S3,则意味着S3存储桶可以公开写入,或者访问凭据存储在用户的手机上,这两者都是危险的。这意味着您需要通过EC2上传或者至少让EC2向S3发出限时凭证(不确定后者是否可行或者是个好主意)。

如果您愿意允许任何人查看任何图片,那么您可以将S3实例公开读取,手机应用程序可以从EC2实例获取网址,然后直接从S3下载图片。这样可以缓解部分EC2负荷。

减轻EC2负载的另一种方法是使用专用的EC2实例来处理与运行数据库的实例分开的上传。这样,如果您的上传服务器受到重创,您的应用仍然可以访问数据库,检索S3网址并下载图片。

您还需要考虑应用的可扩展性和正常运行时间。亚马逊对单个EC2实例甚至单个可用区域没有任何正常运行时间保证,因此如果您希望服务器可靠地存在,您至少需要跨两个可用区域进行扩展。 (两个区域也不是一个坏主意,但对于大多数应用来说都是过度的。)