我有多个AWS账户,我需要列出每个账户的所有S3存储桶,然后查看每个存储桶的总大小。
目前,我只能通过以下方式查看单个S3存储桶的存储大小:
aws s3 ls s3://mybucket --recursive --human-readable --summarize
我有多个AWS账户,我需要列出每个账户的所有S3存储桶,然后查看每个存储桶的总大小。
目前,我只能通过以下方式查看单个S3存储桶的存储大小:
aws s3 ls s3://mybucket --recursive --human-readable --summarize
Answers:
解决方案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 $3}'))
#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调用完成相比,它使我更快地登录并从每个AWS账户手动获取指标。:(
| awk END'{print}'
呢
[@]
中"${buckets[@]}"
是什么意思?
您将需要编写一个脚本来分析和查询此数据,因为据我所知,没有工具或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[])]"
除非有我找不到的工具,否则您将必须编写脚本来执行此操作。
如果您使用多个AWS帐户,则需要在多个帐户之间切换以获取存储桶大小。
要获取所有存储桶及其总大小,可以使用“ aws s3api ”。使用,list-buckets
您可以在一个帐户中获取所有存储桶,然后可以列出其大小并尝试下一个帐户。
如果启用了版本控制并且已“删除”了大量数据,则这些都不会显示存储桶的大小。在S3 GUI控制台中,“指标”选项卡显示您要支付的费用。
从/server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket中找到的脚本中删除了以下命令 。它在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
这给出了由开始时间和结束时间限定的天内的平均大小(以字节为单位)。 如果您的存储桶已启用“版本控制”,并且您认为自己已“删除”了大量数据,则结果可能会令您震惊。
要清除启用了版本控制的存储桶,必须设置LifeCycle规则。您可以选择永久删除以前的版本。您可以在“转换”步骤中省略复选框。