2014-04-20 152 views
4

我正在开发一个iOS应用程序,它将上传小视频到亚马逊s3。视频将公开,用户可以分享每个视频的URL。我担心流式传输成本(例如,如果视频病毒传播)。每GB带宽约为0.12美元,这可能会很快变得昂贵。限制亚马逊s3下载

我想对每个视频实施某种下载限制来防止这种情况。一旦视频每月下载一定次数,视频就不再公开,无法下载。

我查看了各种文档,并没有找到一个很好的方法来实现这一点。我找到的唯一潜在解决方案是定期下拉我的s3存储桶的日志文件,并使用该数据确定某些视频已下载了多少次。这是我最好的选择,还是有更好的方法?

谢谢!

回答

0

你可以做到这一点,但需要你在你的一端做一些编码才能使它工作。

方法1将启用详细S3日志统计,然后编写代码来分析这些日志文件,并通过文件确定何时已达到极限,然后在文件撤销的许可,以防止其被服务任何更多。

这里是如何启用详细S3日志记录信息:

http://docs.aws.amazon.com/AmazonS3/latest/UG/ManagingBucketLogging.html

比较简单,但或许有点不雅和你运行的准备,因为在日志中的固有延迟超过你的极限风险可用性和处理日志的时间延迟 - 所以可能需要20分钟到1小时或更长时间才能购买,一旦达到限制,但是在应用程序有足够的信息来实现它之前。

方法2,这海事组织更优雅一点,无疑将EC2实例(或实例)在iOS应用和S3之间 - iOS应用使得以EC2实例的请求时,它查找了实时统计(它已经积累了自己,也许已经成为dynamodb或rds),然后返回一个s3 url到合适的视频,或者向应用程序返回超限错误。使用这种方法,不需要撤消s3权限,因为ec2实例充当交通警察,并且可以实时启用/禁用特定文件的访问权限 - 您还可以轻松添加实时报告/通知容量使用这种方法来让你知道什么时候文件或文件发生病毒,如果这是有用的。

+0

感谢您的详细解答!不幸的是,方法2不适用于我们的用例,因为视频网址将公开并可从任何地方访问,而不仅仅是应用。因此,每次观看视频时,我们都无法通知终端。方法1是我心目中的,但我同意它远非理想。 – Dimitar08

+0

**更新**:AWS现在(实际上已经有一段时间了)改进了度量功能 - 称为“CloudWatch”。涵盖此帖的一个非常简单的用法:http://docs.aws.amazon.com/AmazonS3/latest/user-guide/configure-metrics.html – ymz