我正在尝试找到一种动态提取S3中的.gz文件的方法,无需将其下载到本地,提取然后将其推回S3。
使用boto3 + lambda,我如何实现我的目标?
我在boto3文档中没有看到任何摘录部分。
最佳答案
Amazon S3是一项存储服务。没有内置的功能来处理文件的内容。
但是,您可以使用AWS Lambda函数从S3检索对象,将其解压缩,然后再次上传内容。但是,请注意,Lambda的临时磁盘空间限制为500MB,因此请避免解压缩太多数据。
您可以将S3存储桶配置为在存储桶中创建新文件时触发Lambda函数。然后,Lambda函数将:
使用boto3(假设您喜欢Python)下载新文件
使用zipfile
Python库提取文件
使用boto3上传生成的文件
样例代码
import boto3
s3 = boto3.client('s3', use_ssl=False)
s3.upload_fileobj(
Fileobj=gzip.GzipFile(
None,
'rb',
fileobj=BytesIO(
s3.get_object(Bucket=bucket, Key=gzip_key)['Body'].read())),
Bucket=bucket,
Key=uncompressed_key)
关于amazon-web-services - 如何使用boto3快速提取S3中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51276201/