やりたいこと
AWS S3のとあるバケットのとあるフォルダ以下に保存しているファイル名を全て知りたい。
このとき、とあるバケットのとあるフォルダ以下にはファイルが1000件以上ある。
注意点
list_objectは1000件までしか取得しないので、ファイル情報を取得する処理を工夫する必要がある。
方法
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html
に記されている通り。
コード
※awsのコンフィグは設定しておく。
※python3で実行する。
sample.py
import boto3
MY_REGION = 'リージョン名';
MY_BUCKET = 'バケット名';
# バケット以下のディレクトリ
TARGET_PATH = 'tmp/YYYY/MM/DD/';
client = boto3.client('s3', region_name=MY_REGION)
paginator = client.get_paginator('list_objects')
# フィルタリング設定
operation_parameters = {
'Bucket': MY_BUCKET,
'Prefix': TARGET_PATH
}
page_iterator = paginator.paginate(**operation_parameters)
# S3のオブジェクトキーを出力
for page in page_iterator:
for content in page['Contents']:
print(content['Key'])
上記コードの出力例
tmp/YYYY/MM/DD/0001.txt
tmp/YYYY/MM/DD/0002.txt
tmp/YYYY/MM/DD/0003.txt
....
tmp/YYYY/MM/DD/1000.txt
tmp/YYYY/MM/DD/1001.txt
tmp/YYYY/MM/DD/1002.txt
memo
・個人的に1000件以上あるファイルの情報を取得するのが難しかった記憶があったが、最近は簡単にできるんだと少し感動したので記事にしました。
・また、特定のフォルダ以下というようなフィルタリングも指定できるのを知らなかったので、メモメモ。