list_objects_v2 を使用して S3 から 1000 を超えるオブジェクトを取得するにはどうすればよいでしょうか? 質問する

list_objects_v2 を使用して S3 から 1000 を超えるオブジェクトを取得するにはどうすればよいでしょうか? 質問する

S3に500,000以上のオブジェクトがあります。各オブジェクトのサイズを取得しようとしています。そのために次のPythonコードを使用しています。

import boto3

bucket = 'bucket'
prefix = 'prefix'

contents = boto3.client('s3').list_objects_v2(Bucket=bucket,  MaxKeys=1000, Prefix=prefix)["Contents"]

for c in contents:
    print(c["Size"])

しかし、上位 1000 個のオブジェクトのサイズが示されただけです。ドキュメントによると、1000 個を超えるサイズを取得することはできません。それ以上のサイズを取得する方法はありますか?

ベストアンサー1

組み込みのboto3Paginatorクラスは、の1000レコード制限を克服する最も簡単な方法ですlist-objects-v2。これは次のように実装できます。

s3 = boto3.client('s3')

paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket='bucket', Prefix='prefix')

for page in pages:
    for obj in page['Contents']:
        print(obj['Size'])

詳細については:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Paginator.ListObjectsV2

おすすめ記事