查看所有AWS S3存储桶并列出使用的每个存储桶存储


11

我有多个AWS账户,我需要列出每个账户的所有S3存储桶,然后查看每个存储桶的总大小。

目前,我只能通过以下方式查看单个S3存储桶的存储大小:

aws s3 ls s3://mybucket --recursive --human-readable --summarize

S3 Select几天前在re:invent 2017中发布twitch.tv/videos/206752912
Abdennour TOUMI

您可能想要尝试使用我编写的这段代码自己实现相同的目的:github.com/insperitas/s3-data
jimmy978654321

Answers:


11

解决方案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}'
Tensibai '17

1
使用递归选项可以显示每个文件夹和文件的大小,而我只需要存储桶总大小的输出即可。
凯尔·斯汀坎普

您需要选择“ 1天”或更长的时间来使仪表板显示任何内容
Jeremy Leipzig

2
请注意,解决方案2中提出的解决方案会增加Cloudwatch的成本,因为目前每个仪表板的成本为3美元。aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio '19

是什么在[@]"${buckets[@]}"是什么意思?

3

您将需要编写一个脚本来分析和查询此数据,因为据我所知,没有工具或cli函数可以执行此操作。幸运的是,您可以使用CLI收集所有这些信息。

  1. 列出并解析您组织中的所有帐户。

    aws organizations list-accounts
    
  2. 对于每个帐户,列出并分析所有存储桶。

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. 最后,获取每个帐户中每个存储桶的大小。您可以使用以前的cli命令,但要注意,您将要列出存储桶中每个项目的单独大小。您还可以使用此cli命令获取存储桶大小。

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    

1
1.不列出AWS账户的配置文件信息。我没有时间从存储此信息的aws配置文件中对此进行正则表达式,因此我只是在下面发布的脚本中硬编码了这些值
Kyle Steenkamp

2

除非有我找不到的工具,否则您将必须编写脚本来执行此操作。

如果您使用多个AWS帐户,则需要在多个帐户之间切换以获取存储桶大小。

要获取所有存储桶及其总大小,可以使用“ aws s3api ”。使用,list-buckets您可以在一个帐户中获取所有存储桶,然后可以列出其大小并尝试下一个帐户。


1
我用boto3编写了一个Python脚本来做到这一点:gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c(注意:使用CloudWatch的GetMetricStatistics可以有效地提取存储桶大小,而无需对存储桶中的所有对象大小求和)
Reid

1

如果启用了版本控制并且已“删除”了大量数据,则这些都不会显示存储桶的大小。在S3 GUI控制台中,“指标”选项卡显示您要支付的费用。

/server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket中找到的脚本中删除了以下命令 。它在Windows上运行良好。替换yourregionyourbucketname

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规则。您可以选择永久删除以前的版本。您可以在“转换”步骤中省略复选框。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.