将Amazon EC2、Amazon S3和Android应用程序结合起来进行照片共享

将Amazon EC2、Amazon S3和Android应用程序结合起来进行照片共享,android,amazon-s3,amazon-ec2,Android,Amazon S3,Amazon Ec2,我决定用Amazon AWS开发我的Android云应用程序,这是一个照片共享应用程序。我使用PHP和MySql在EC2上建立了一个实例,用于处理简单请求和存储基本用户信息。我还设置了一个S3服务来存储所有的照片 但是现在我想要一些建议。我不知道如何处理这三个问题。EC2服务器是否应该始终用作使用应用程序的最终用户和S3服务之间的中介?或者Android上的最终用户应该直接与S3通信吗 比如说,用户在我的应用程序上注册并决定上传一张图片。我应该将JPEG发送到EC2服务器,然后让服务器将pic发

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

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

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


你知道我该怎么做吗?

我想你真的没有选择的余地。为了安全起见,你必须通过EC2。如果手机应用程序直接上传到S3,则意味着S3存储桶可以公开写入,或者访问凭据存储在用户的手机上,这两者都是危险的。这意味着您需要通过EC2上传,或者至少让EC2向S3发布有时间限制的凭据(不确定后者是否可行或是一个好主意)

如果您愿意允许任何人查看任何图片,那么您可以让S3实例公开可读,手机应用程序只需从EC2实例获取url,然后直接从S3下载图片。这将减轻一些EC2负载

另一种减轻EC2负载的方法是使用一个专用的EC2实例,只用于处理与运行数据库的实例分开的上传。这样,如果你的上传服务器受到攻击,你的应用程序仍然可以访问数据库,检索S3URL,下载图片

您还需要考虑应用程序的可伸缩性和启动时间。Amazon对于单个EC2实例甚至单个可用性区域都没有任何启动时间保证,因此,如果您希望您的服务器能够可靠地运行在那里,那么您至少需要跨两个可用性区域进行扩展。(两个区域也不是一个坏主意,但对于大多数应用程序来说都是多余的。)