Я хочу загрузить список файлов s3 и сжать его в файл, но список файлов может быть очень большим и занимать много места в памяти.
Непосредственное решение - загрузить все файлы, сжать их и загрузить в s3
def upload_zip_file(event,context):
s3 = boto3.client('s3')
list_keys = event['list_keys']
data_io = BytesIO()
filename = "file.pdf"
zf = zipfile.ZipFile(data_io, 'w')
for key in list_keys:
s3_object = s3.get_object(Bucket=DATA_BUCKET_NAME, Key=key)
body = s3_object['Body'].read()
zf.writestr(filename,body, compress_type=zipfile.ZIP_DEFLATED)
zf.close()
s3.upload_fileobj(data_io, ZIP_BUCKET_NAME, filename)
При таком решении, когда я загружаю все данные, общий размер zip-файла сохраняется в памяти и может превышать 1 ГБ. Как я могу загрузить почтовый индекс небольшими частями, не достигнув полного размера?.