首页 > 解决方案 > 如何在您拥有的所有 S3 存储桶中找到最大的文件

问题描述

我的客户有 60 多个存储桶,我们每月支付数百美元来存储这些数据,我们不知道如何轻松区分什么是有用的和什么是旧的。

单击每个存储桶并查找占用空间的内容很乏味。

有没有办法首先列出所有存储桶中的所有文件并找到占用最多空间的文件,这样我们就可以清除什么是旧的和大的?

标签: amazon-web-servicesamazon-s3cost-management

解决方案


最初,我没有找到任何简单的方法。所以我一直在使用下面的 Bash 脚本来构建文件列表并计算每个存储桶的总大小。这个脚本仍然很有用,因为我有另一个可以进一步解析它的脚本。

请注意,如果您有超过 500GB 的存储桶,其中包含大量文件,则该命令aws s3api list-object-versions可能会在一夜之间运行并消耗超过 15GB 的 RAM。我不知道它是否可以完成,我没有 32GB,所以我不得不停止它。否则,它很快。

但是,如果您只是在寻找最大的存储桶,那么直接在 AWS S3 控制台中最简单。

在左侧导航的 下Storage Lens,单击Dashboards。您将看到您的 S3 仪表板,您可能像我一样默认拥有一个,default-account-dashboard如果您不需要创建一个,则会调用它。

打开此仪表板。滚动到底部,您会看到最大的区域和存储桶。

AWS S3 最大的区域和存储桶

bash 脚本

# list buckets for current account
aws s3api list-buckets > s3-list-buckets
# store clean list of buckets in env var
s3_buckets=$(grep \"Name s3-list-buckets  | cut -c 22- | rev | cut -c 3- | rev)
# list all objects in all buckets
for bucket in $s3_buckets
do
   echo "begin $bucket"
   [ -e all_files_bucket_$bucket ] && continue
   aws s3api list-object-versions --bucket $bucket > all_files_bucket_$bucket
   echo "completed download list for $bucket"
done
# display sum of all files per bucket, sorted by biggest bucket last
for bucket in $s3_buckets; do echo "$(grep "Size.:."  all_files_bucket_$bucket | awk -F : '{print $2}' | awk -F , {'print $1'} | paste -sd+ | bc) bytes in $bucket" ; done | sort -n

推荐阅读