Мне нужно распаковать большие zip-файлы (приблизительный размер ~ 10 ГБ) и положить их обратно на S3. У меня ограничение памяти 512 МБ.
Я попробовал этот код и получил MemoryError
на line: 9
, где он загружает все содержимое файла в память и, следовательно, эту ошибку памяти. Как получить кусок zip-файла, разархивировать его и загрузить обратно на S3?
import json
import boto3
import io
import zipfile
def lambda_handler(event, context):
s3_resource = boto3.resource('s3')
zip_obj = s3_resource.Object(bucket_name="bucket.name", key="test/big.zip")
buffer = io.BytesIO(zip_obj.get()["Body"].read())
z = zipfile.ZipFile(buffer)
for filename in z.namelist():
s3_resource.meta.client.upload_fileobj(
z.open(filename),
Bucket="bucket.name",
Key=f'{"test/" + filename}'
)
Пожалуйста, дайте мне знать