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")
のように使えます。便利。
参考:
stackoverflow.com