【问题标题】:s3 timing out when counting number of objects in buckets3在计算存储桶中的对象数时超时
【发布时间】:2019-07-25 03:24:32
【问题描述】:

我编写了一个脚本来计算 s3 存储桶中的对象数量和每个存储桶的总大小。当我针对几个测试存储桶运行代码时,该代码可以工作,但是当我包含所有生产存储桶时会超时。数以千计的对象。

import boto3
s3 = boto3.resource('s3')

bucket_list = []
bucket_size = {}

bucket_list = s3.buckets.all()

skip_list = ('some-test-bucket')

for bu in bucket_list:
    if bu.name not in skip_list:
        bucket_size[bu.name] = [0, 0]
        print(bu.name)
        for obj in bu.objects.all():
            bucket_size[bu.name][0] += 1
            bucket_size[bu.name][1] += obj.size

print("{0:30} {1:15} {2:10}".format("bucket", "count", "size"))

for i,j in bucket_size.items():
    print("{0:30} {1:15} {2:10}".format(i, j[0], j[1]))

它开始运行,移动,然后像这样挂在某些桶上:

botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL:

没有像这样快速获取元数据的方法吗?从某种意义上说,这是一种艰难的方式——计算每个对象。

所以,我问的是是否有更好的脚本,而不是为什么它会超时。当我点击一些超时的存储桶时,我注意到那里有一些 .gz 文件。不知道为什么会很重要。

当然,我查看了文档,但我发现很难获得有意义的可操作信息。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html

【问题讨论】:

标签: python-3.x amazon-web-services amazon-s3 boto3


【解决方案1】:

如果您只想知道存储桶中的对象数量,可以使用 Amazon CloudWatch 中的指标。

来自Monitoring Metrics with Amazon CloudWatch - Amazon Simple Storage Service

BucketSizeBytes

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

NumberOfObjects

除 GLACIER 存储类之外的所有存储类的存储桶中存储的对象总数。该值是通过计算存储桶中的所有对象(当前和非当前对象)以及所有未完成的分段上传到存储桶的部分总数来计算的。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2018-09-17
    • 2017-01-12
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多