我正在使用 AWS S3 存储桶并在 Python 中使用 Boto3。我需要找到每个存储桶的大小来监控它们的存储使用情况。我找到了一些使用 boto3 库的示例,但我不确定如何修改代码以检索每个单独存储桶的大小。
我目前有以下列出存储桶的代码片段:
import boto3
s3 = boto3.resource('s3')
buckets = list(s3.buckets.all())
for bucket in buckets:
print(bucket.name)
但这仅列出了存储桶名称。我如何扩展此代码来计算和打印每个存储桶的大小,或者是否有其他方法可以使用 Boto3 来实现此目的?
任何帮助或代码示例将不胜感激。谢谢!
Amazon CloudWatch 自动收集 Amazon S3 上的指标,包括
BucketSizeBytes
:
STANDARD 存储类、INTELLIGENT_TIERING 存储类、标准 - 不频繁访问 (STANDARD_IA) 存储类、OneZone - 不频繁访问 (ONEZONE_IA)、减少冗余存储 (RRS) 类或 Glacier ( GLACIER)存储类。该值是通过对存储桶中所有对象(当前和非当前对象)的大小求和来计算的,包括所有不完整的分段上传到存储桶的所有部分的大小。
请参阅:使用 Amazon CloudWatch 监控指标 - Amazon Simple Storage Service
只需迭代所有对象并计算大小
sum([object.size for object in boto3.resource('s3').Bucket('mybucket').objects.all()])
编辑:
如果您希望速度更快,则必须使用不同的方法,上面的方法是对存储桶中的每个对象发出 HTTP 请求,因此显然它会随着存储桶中的文件数量线性扩展。不幸的是,这无法加快。
但是,您可以使用第三方脚本,例如
s4cmd
,这比第一种方法更快。
s4cmd du s3://bucket-name
或者如果您想包含子目录的大小,请使用
-r
s4cmd du -r s3://bucket-name