将数据从 lambda 任务上传到 s3 非常慢



我已经使用无服务器框架实现了 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

最新更新