如何使用boto3找到S3每个桶的大小

问题描述 投票:0回答:2

我正在使用 AWS S3 存储桶并在 Python 中使用 Boto3。我需要找到每个存储桶的大小来监控它们的存储使用情况。我找到了一些使用 boto3 库的示例,但我不确定如何修改代码以检索每个单独存储桶的大小。

我目前有以下列出存储桶的代码片段:

import boto3

s3 = boto3.resource('s3')
buckets = list(s3.buckets.all())

for bucket in buckets:
    print(bucket.name)

但这仅列出了存储桶名称。我如何扩展此代码来计算和打印每个存储桶的大小,或者是否有其他方法可以使用 Boto3 来实现此目的?

任何帮助或代码示例将不胜感激。谢谢!

python amazon-s3 size boto3 bucket
2个回答
1
投票

Amazon CloudWatch 自动收集 Amazon S3 上的指标,包括

BucketSizeBytes
:

STANDARD 存储类、INTELLIGENT_TIERING 存储类、标准 - 不频繁访问 (STANDARD_IA) 存储类、OneZone - 不频繁访问 (ONEZONE_IA)、减少冗余存储 (RRS) 类或 Glacier ( GLACIER)存储类。该值是通过对存储桶中所有对象(当前和非当前对象)的大小求和来计算的,包括所有不完整的分段上传到存储桶的所有部分的大小。

请参阅:使用 Amazon CloudWatch 监控指标 - Amazon Simple Storage Service


0
投票

只需迭代所有对象并计算大小

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
© www.soinside.com 2019 - 2024. All rights reserved.