LoginSignup
0
0

More than 3 years have passed since last update.

S3の特定のキーを持つオブジェクトのサイズを集計する

Posted at

概要

S3の特定のキーを含むオブジェクトのサイズを集計するメモです。
ポイントはコード内にコメントしたので、必要であればご参照ください。

コード

count_s3_objects.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import boto3

client = boto3.client('s3', aws_access_key_id='', aws_secret_access_key='', region_name='')
size = 0
start_after = ''

def getObjectList(size, start_after=''):
    next_start = ''

    param = {
        'Bucket': 'hoge',
        # 一部分まででOK
        # 2020を含むオブジェクトが取得対象になります
        'Prefix': 'access-log/2020',
        # 指定したKEYの次から取得するようになる
        'StartAfter': start_after
    }

    # s3.Bucket().objects.all()は非推奨のため、list_objects_v2を使います
    # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.list_objects_v2
    res = client.list_objects_v2(**param)

    # オブジェクトがなければContentsは空になります
    if 'Contents' in res:

        # オブジェクトの数
        print('object counts:' + str(len(res['Contents'])))

        for con in res['Contents']:
            # サイズを加算する
            size += con['Size']
            next_start = con['Key']

        # 一度に1000までしか取得しないため、1000ある場合はTrueになる
        # その場合は次の処理で継続して取得する
        # Falseの場合は削除し、再帰処理を停止させる
        if res['IsTruncated'] == False:
            next_start = ''

    return size, next_start

# 初回実行
size, start_after = getObjectList(size, start_after)

# 後続がある場合は、再帰処理で取得する
while start_after != '':
    print('start_after: ' + start_after)
    size, start_after = getObjectList(size, start_after)

# 合計サイズを表示
print('size:' + str(size))
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0