HOME/Articles/

[Python]boto3でs3バケット内のすべてのobject情報を取得する

Article Outline

awsを使っていると何かとapiで情報を取得したくなることがよくある。 今回は特に使用頻度が高いS3を例に上げて取得サンプルを記載してみる。

boto3の場合、s3.list_objects_v2()を使用するのが良いと思う。 メタ情報もついてくるので取得した後に時刻ソートとかできる。

以下サンプル↓

import boto3

def get_objects_list(bucket='test_bucket):
    #s3clientのインスタンス化
    s3 = boto3.client('s3')
    contents = []
    response = s3.list_objects_v2(
        Bucket=bucket,
    )
    contents.extend(response["Contents"])
    #次ページが有る場合、NextContinuationTokenがresponseに含まれているため、次のリクエスト時に'ContinuationToken'に指定している。
    while 'NextContinuationToken' in response:
        token = response['NextContinuationToken']
        response = s3.list_objects_v2(
            Bucket=bucket,
            ContinuationToken=token,
        )
        contents.extend(response["Contents"])
    # responseに最後の更新時刻('LastModified')が含まれているのでそれでソート
    main_contents = sorted(contents, key=lambda x: x['LastModified'])


    return main_contents

見ての通りなんてことはないコード。 初めて使う場合はNextContinuationTokenの存在を忘れていて全件取得を忘れていたりしたので一応その備忘録として記録する。