我想要绘制 Amazon S3 存储桶的大小(以字节为单位和项目数)图表,并寻找一种有效的方法来获取数据。
这s3命令工具提供了一种使用 来获取文件总大小的方法s3cmd du s3://bucket_name
,但我担心它的扩展能力,因为它看起来像是获取每个文件的数据并计算自己的总和。由于亚马逊以 GB-Months 为单位向用户收费,因此他们不直接公开此值似乎很奇怪。
虽然亚马逊的 REST API返回存储桶中的项目数,s3命令似乎没有暴露它。我可以这样做,s3cmd ls -r s3://bucket_name | wc -l
但这似乎是一种黑客行为。
红宝石AWS::S3该库看起来很有前途,但只提供存储桶项目的数量,而不是存储桶的总大小。
是否有人知道任何其他命令行工具或库(最好是 Perl、PHP、Python 或 Ruby)可以提供获取这些数据的方法?
答案1
AWS CLI 现在支持--query
采用路径表達式。
list-objects
这意味着您可以使用sum(Contents[].Size)
并像计算给出的大小值之和length(Contents[])
。
可以使用官方 AWS CLI 运行,如下所示,并在2014 年 2 月
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"
答案2
现在只需使用官方 AWS 命令行客户端即可轻松完成此操作:
aws s3 ls --summarize --human-readable --recursive s3://bucket-name/
官方文档:AWS CLI 命令参考(版本 2)
如果您不想计算整个存储桶,这也接受路径前缀:
aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory
答案3
AWS 控制台:
作为2015 年 7 月 28 日您可以获取此信息通过 CloudWatch。如果您需要 GUI,请访问CloudWatch 控制台:(选择区域 > )指标 > S3
AWS CLI 命令:
这比这里发布的其他一些命令要快得多,因为它不需要单独查询每个文件的大小来计算总和。
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage
重要的:您必须在 Dimensions 参数中同时指定 StorageType 和 BucketName,否则您将得不到任何结果。您需要更改的只是--start-date
、--end-time
和Value=toukakoukan.com
。
这是一个 bash 脚本,您可以使用它来避免手动--start-date
指定--end-time
。
#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage