boto3に普通にありそうな機能だけど見付からなかったので実装。
def download_object_from_s3(remote_path: str) -> io.BytesIO: """S3からオブジェクトをダウンロードしてreturnする Args: remote_path (str): ダウンロード元のS3のパス Returns: S3からダウンロードしたオブジェクト """ data: io.BytesIO = io.BytesIO() s3: ServiceResource = boto3.resource('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_ACCESS_KEY) s3.Bucket(BUCKET).download_fileobj(remote_path, data) data.seek(0) return data def download_object_list_from_s3(pattern: str) -> List[S3Object]: regex = re.compile(pattern) s3: ServiceResource = boto3.resource('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_ACCESS_KEY) objects = s3.Bucket(BUCKET).objects.all() result: list = [] for a_object in objects: if regex.match(a_object.key): content: io.BytesIO = download_object_from_s3(a_object.key) result.append(S3Object(a_object.key, content)) return result
download_object_list_from_s3("mydir/.+.jpg")
のように使えます。便利。
参考: