lambdaでboto3を使いs3を階層的に探索する

AWS S3はkey-value型のストレージであり、基本的にはディレクトリなどの階層的な概念がない。aws-cliなどではS3を擬似階層的に使用できるが、boto3はkeyに対応するobjectを取得という形が基本であるので、PrefixとDellimiterをうまく使いS3を階層的に使う。

import boto3

client = boto3.client('s3')
result = client.list_objects(Bucket_name=<BUCKET_NAME>, Prefix=<PREFIX>, Delimiter='/')
for o in result.get('CommonPrefixes'):
    print(o.get('Prefix'))

これで特定の階層のディレクトリ(ファイル)一覧を取得できる。最上位の階層の場合はPrefixはいらない。 それ以下の階層の場合はPrefixにそれ以前のkey値を入れる。