【发布时间】:2021-03-12 12:24:16
【问题描述】:
我有一个大约 6GB 的大文件,当使用 Python 和 Boto3 将文件上传到 S3 存储桶时,我使用 AWS lambda 触发器解压缩文件,但是在使用 ByteIO 将文件解压缩到缓冲区中时出现内存错误。
# zip file is in output dir
if '-output' in file.key:
# get base path other the zip file name
save_base_path = file.key.split('//')[0]
# starting unzip process
zip_obj = s3_resource.Object(bucket_name=source_bucket, key=file.key)
buffer = BytesIO(zip_obj.get()["Body"].read())
z = zipfile.ZipFile(buffer)
print(f'Unziping....')
for filename in z.namelist():
file_info = z.getinfo(filename)
try:
response = s3_resource.meta.client.upload_fileobj(
z.open(filename),
Bucket=target_bucket,
Key=f'{save_base_path}/{filename}'
)
except Exception as e:
print(e)
print('unziping process completed')
# deleting zip file after unzip
s3_resource.Object(source_bucket, file.key).delete()
my_bucket.delete_object()
print("iteration completed")
else:
print('Zip file invalid position')
s3_resource.Object(source_bucket, file.key).delete
print(f'{file.key} deleted...')
问题 1
- 当我读取字节时它给我内存错误
- 我已在 AWS lambda 函数的常规配置中将内存设置为 10240(10GB)
问题 2
- 我想从 s3 中删除对象,它可以正常运行代码并且没有给出任何错误,但也没有删除文件
有什么办法可以解决我的解压问题
【问题讨论】:
-
这可能是一个愚蠢的问题,但文件 6GB 是压缩的还是解压缩的?如果压缩后是 6GB,您可能无法从 lambda 解压缩它
-
另外,您需要足够的 RAM 来存储 zip 文件及其解压缩版本。如果 zip 文件为 6gb,并且包含一个文件,这意味着您需要至少 12gb 的 RAM,可能更多。
-
它是 6GB 压缩包,我是 AWS 新手,有什么我可以研究的解决方案对我有很大帮助
-
您可以在 EC2 上运行它。启动、运行脚本、终止。
标签: amazon-web-services amazon-s3 aws-lambda