我正在构建一个文件托管应用程序,它将所有客户端文件存储在 S3 存储桶上的文件夹中。然后,我想递归地跟踪每个顶级文件夹在 S3 上的使用量,以向每个相应的客户端收取存储和带宽成本。
前端是 django,但由于显而易见的原因,解决方案可以是 python。
以编程方式为每个客户端创建一个存储桶会更好吗?
如果我确实采用为每个客户端创建一个存储桶的方法,那么如果启用,是否可以获得存储桶的云端暴露成本?
根据您的需求,您的任务可能有多种解决方案。首先看看Amazon DevPay是否满足您的需求,这应该允许客户根据他们对 EC2 和 S3 资源的使用情况进行计费。
第二个想法是使用您的 AWS 账户的账户活动和使用报告部分。可以通过IAM授予对此的访问权限。您可以在那里获得整个使用情况的详细统计信息,尽管我认为您不能按桶细分。
另一种方法是使用Python 中的 Amazon boto SDK来获取对象及其大小。或者,您可以在客户端软件上传期间监控存储空间的大小。结合使用上述方法给出的总支出和手动跟踪每个客户的使用情况,您可能可以计算出每个客户的费用金额。
不,不可能为每个用户创建一个存储桶,因为亚马逊每个账户只允许 100 个存储桶。因此,除非您确定不超过 100 个用户,否则这将是一个非常糟糕的主意。
理想的解决方案是在数据库中记住每个用户在 Django 应用程序中的存储。我猜你会使用 S3 boto 库来存储文件,而不是在每次上传后返回字节大小。您可以使用它来存储它。
还有另一种出路,您可以在存储桶内创建许多文件夹,每个文件夹特定于用户。但仍然是记住应用中存储使用情况的最佳方式