zipファイルの生成からS3にアップロードするまで
言語はPythonを使用。そのため、AWS SDKはboto3を使用します。
ローカルにある複数のファイルをzip圧縮しますが、今回はBytesIO(メモリ上)にzipを生成するため、実際のzipファイルは作成せず、S3にアップロー
ドするサンプルコードを記載します。
from io import BytesIO
import zipfile
import pathlib
from glob import glob
import boto3
s3 = boto3.resource(
's3',
aws_access_key_id='your-access-key',
aws_secret_access_key='your-secret-access-key',
region_name='your-region-name')
bucket = s3.Bucket('your-bucket')
zip_obj = BytesIO()
target_files = glob(f'dir/*.txt')
with zipfile.ZipFile(zip_obj, 'w', compression=zipfile.ZIP_DEFLATED) as zf:
for file in target_files:
file_obj = pathlib.Path(file)
zf.write(file, arcname=file_obj.name)
zip_obj.seek(0)
bucket.upload_fileobj(zip_obj, 'your-zip-key-name.zip')
注目はこちらの1行です。
zip_obj.seek(0)
この1行がないと、思ってたzipファイルは生成されないので注意が必要です。
ついでなので、ダウンロードからzip解凍まで記載します。
こちらもzipファイル自体をローカルに作ることはありません。
s3_obj = bucket.Object('your-zip-key-name.zip').get()
with zipfile.ZipFile(BytesIO(s3_obj['Body'].read())) as zf:
zf.extractall('target-local-dir/')
こっちは簡単ですね笑