当前,我只能通过以下方式查看单个S3存储桶的存储大小:
aws s3 ls s3://mybucket --recursive --human-readable --summarize
#1 楼
解决方案1 所以我用以下脚本解决了这个问题。我最初发布了该问题,以防万一我不知道有一种更简便的方法。
#!/bin/bash
aws_profile=('profile1' 'profile2' 'profile3');
#loop AWS profiles
for i in "${aws_profile[@]}"; do
echo "${i}"
buckets=($(aws --profile "${i}" --region your_region s3 ls s3:// --recursive | awk '{print }'))
#loop S3 buckets
for j in "${buckets[@]}"; do
echo "${j}"
aws --profile "${i}" --region your_region s3 ls s3://"${j}" --recursive --human-readable --summarize | awk END'{print}'
done
done
解决方案2
在仪表板中使用AWS控制台中的CloudWatch。
然后您只需指定所有S3存储桶并添加数字统计信息即可显示存储大小指标。调用API的速度可能会更快,具体取决于s3存储桶的大小(要花很长时间才能获得非常大的存储桶的大小)。
判决
在每个AWS账户上创建仪表盘(解决方案2)对我来说是最有效的选择,因为它可以更快地手动登录并获取指标而不是等待脚本API调用完成。 :(
评论
为什么awk END'{print}'吗?
–滕西拜
17-10-4在14:57
使用递归选项可以显示每个文件夹和文件的大小,而我只需要存储桶总大小的输出即可。
–凯尔·斯汀坎普(Kyle Steenkamp)
17-10-4在15:08
您需要选择“ 1天”或更长的时间以使仪表板显示任何内容
–莱比锡(Jeremy Leipzig)
18年7月16日在17:38
请注意,解决方案2中提出的解决方案会增加Cloudwatch的成本,因为目前每个仪表盘的成本为3美元。 aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
–德鲁比奥
19 Mar 6 '19 at 17:52
“ $ {buckets [@]}”中的[@]是什么意思?
–乔
20 Mar 21 '20 at 20:14
#2 楼
您将需要编写一个脚本来解析和查询此数据,因为据我所知,没有工具或cli函数可以执行此操作。幸运的是,您可以使用CLI收集所有这些信息。列出并解析组织中的所有帐户。
aws organizations list-accounts
对于每个帐户,列出并分析所有存储桶。
aws s3api list-buckets --query "Buckets[].Name"
最后,获取每个帐户中每个存储桶的大小。您可以使用以前的cli命令,但是要注意,您将要列出存储桶中每个项目的单独大小。您还可以使用此cli命令获取存储区大小。
aws s3api list-objects --bucket BUCKETNAME --output json --query "
[sum(Contents[].Size), length(Contents[])]"
评论
1.不列出AWS账户的配置文件信息。我没有时间从存储此信息的aws配置文件中对它进行正则表达式,因此我只是在下面发布的脚本中对值进行了硬编码
–凯尔·斯汀坎普(Kyle Steenkamp)
17-10-4在14:44
#3 楼
除非有一个我找不到的工具,否则您将必须编写脚本来执行此操作。如果您使用多个AWS帐户,则需要在帐户之间进行切换以获取存储桶大小。
要获取所有存储桶及其总大小,可以使用“ aws s3api”。使用
list-buckets
,您可以在一个帐户中获取所有存储桶,然后可以列出其大小并尝试下一个帐户。评论
我使用boto3编写了一个Python脚本来执行此操作:gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c(注意:使用CloudWatch的GetMetricStatistics可以有效地提取存储桶大小,而无需对存储桶中的所有对象大小求和)
–里德
19年7月16日在20:15
#4 楼
如果启用了版本控制并且已“删除”了大量数据,则这些都不显示存储桶的大小。在S3 GUI控制台中,“度量标准”选项卡显示了要向您收费的内容。我得到了亚马逊S3桶的大小。它在Windows上运行良好。用yourregion
和yourbucketname
代替:aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage
这给出了以开始和结束时间为界的天的平均大小(以字节为单位)。如果您的存储桶启用了“版本控制”(处于活动状态)并且您认为自己已“删除”了大量数据,结果将使您感到震惊。您可以选择永久删除以前的版本。您可以在“转换”步骤中忽略该复选框。
评论
S3 Select于几天前在re:invent 2017中发布twitch.tv/videos/206752912您可能想要尝试我编写的这段代码来自己实现相同的目的:github.com/insperitas/s3-data