问题 直接上传到S3或通过EC2?


我想为iPhone应用程序构建一个Web服务。至于文件上传,我想知道标准程序和最具成本效益的解决方案是什么。据我所知,有两种可能性:

  1. 客户端> S3:我直接从iPhone上传文件到S3(带有 AWS开发SDK
  2. 客户端> EC2> S3:我将文件上传到我的服务器(EC2运行Django),然后服务器将文件上传到S3(详见本文) 岗位

我不打算以任何方式修改文件。我只需要告诉数据库添加一个条目。因此,如果我要上传文件Client> S3,我还是需要连接到服务器才能进行数据库输入。

它似乎 好像EC2> S3不会花费任何东西,只要两者在同一区域。

在开始实施文件上传之前,我很想知道优点和缺点。


8190
2018-02-19 10:22


起源



答案:


出于可伸缩性的原因,我肯定会通过S3完成它。没错,S3和EC2之间的数据快速且便宜,但上传时间很长,与普通网络请求不同。因此,您可能会在EC2实例上使NIC饱和。

而是将GUID返回给客户端,上传到S3,并将键设置为GUID并适当地设置Content-Type。然后在上载完成后调用Web服务/ Ajax端点以使用GUID密钥创建DB记录。


15
2018-02-19 11:59



非常感谢。因此,如果我理解正确,那么通过EC2实现这一目标并没有真正的优势。 (1)将GUID返回给客户端,(2)执行上传客户端> S3,以及(3)连接到EC2以执行数据库条目,您是不是觉得有点费解?此外,我需要在第一步之前检查是否可以实际上传图像,因此步骤0将连接到EC2并检查文件是否已存在。 - n.evermind
是的,它有点复杂,但我会从未来的应用程序的角度说,并确保可扩展性至关重要。否则你将使用EC2作为S3的代理。 S3是一个无限可扩展的存储服务 - 为什么要在它面前设置瓶颈? - reach4thelasers
是的,而不仅仅是这样,EC2实例将做两倍的工作....从客户端接收数据并将其发送到S3,两倍的工作带宽! - reach4thelasers
我刚刚遇到了完全相同的问题,但我对安全性感到疑惑,任何人都不容易上传/检索它不通过网关的东西吗?我认为黑客可以从应用程序获取密钥到s3存储(即使它只是一个有限的存储)并上传/检索他想要的所有内容,也许可以通过基于过期的检索网址暂停检索,但是上传呢?谢谢(有点真的迷失在这个主题上) - Pochi
秘密密钥永远不会发送到亚马逊 - 当你进入管理工具中的密钥管理部分时,它们已经拥有它,请记住它。它不是发送到服务器的密码。相反,它用于在客户端上对请求进行数字签名,签名附加到请求标头。在接收端,亚马逊还使用您的私钥对请求进行数字签名。如果两个签名匹配,则它们使用相同的私钥生成,因此必须源自用户,因此Amazon接受该请求。如果它们不匹配则失败。 - reach4thelasers


答案:


出于可伸缩性的原因,我肯定会通过S3完成它。没错,S3和EC2之间的数据快速且便宜,但上传时间很长,与普通网络请求不同。因此,您可能会在EC2实例上使NIC饱和。

而是将GUID返回给客户端,上传到S3,并将键设置为GUID并适当地设置Content-Type。然后在上载完成后调用Web服务/ Ajax端点以使用GUID密钥创建DB记录。


15
2018-02-19 11:59



非常感谢。因此,如果我理解正确,那么通过EC2实现这一目标并没有真正的优势。 (1)将GUID返回给客户端,(2)执行上传客户端> S3,以及(3)连接到EC2以执行数据库条目,您是不是觉得有点费解?此外,我需要在第一步之前检查是否可以实际上传图像,因此步骤0将连接到EC2并检查文件是否已存在。 - n.evermind
是的,它有点复杂,但我会从未来的应用程序的角度说,并确保可扩展性至关重要。否则你将使用EC2作为S3的代理。 S3是一个无限可扩展的存储服务 - 为什么要在它面前设置瓶颈? - reach4thelasers
是的,而不仅仅是这样,EC2实例将做两倍的工作....从客户端接收数据并将其发送到S3,两倍的工作带宽! - reach4thelasers
我刚刚遇到了完全相同的问题,但我对安全性感到疑惑,任何人都不容易上传/检索它不通过网关的东西吗?我认为黑客可以从应用程序获取密钥到s3存储(即使它只是一个有限的存储)并上传/检索他想要的所有内容,也许可以通过基于过期的检索网址暂停检索,但是上传呢?谢谢(有点真的迷失在这个主题上) - Pochi
秘密密钥永远不会发送到亚马逊 - 当你进入管理工具中的密钥管理部分时,它们已经拥有它,请记住它。它不是发送到服务器的密码。相反,它用于在客户端上对请求进行数字签名,签名附加到请求标头。在接收端,亚马逊还使用您的私钥对请求进行数字签名。如果两个签名匹配,则它们使用相同的私钥生成,因此必须源自用户,因此Amazon接受该请求。如果它们不匹配则失败。 - reach4thelasers