我已经使用无服务器框架实现了 AWS lambda 来接收 S3 ObjectCreated
事件并解压缩tar.gz
文件。我注意到在 S3 中复制提取的文件需要很长时间并且超时。.tar.gz
文件的大小为 ~ 18M,压缩文件中的文件数量为 ~ 12000
。我尝试使用超时500s
ThreadPoolExecutor
。关于如何解决此问题的任何建议
在python中实现的lambda代码:https://gist.github.com/arjunurs/7848137321148d9625891ecc1e3a9455
在您共享的要点中,有许多更改。
我建议避免读取内存中提取的 tar 文件,您可以在其中将其内容直接流式传输到 S3 存储桶。
def extract(filename):
upload_status = 'success'
try:
s3.upload_fileobj(
tardata.extractfile(filename),
bucket,
os.path.join(path, tarname, filename)
)
except Exception:
logger.error(
'Failed to upload %s in tarfile %s',
filename, tarname, exc_info=True)
upload_status = 'fail'
finally:
return filename, upload_status