【问题标题】:Uploading data from a lambda job to s3 is very slow将数据从 lambda 作业上传到 s3 非常慢
【发布时间】:2019-09-13 00:11:45
【问题描述】:

我已经使用无服务器框架实现了一个 AWS lambda,以接收 S3 ObjectCreated 事件并解压缩 tar.gz 文件。我注意到在 S3 中复制提取的文件需要很长时间并且超时。 .tar.gz 文件大小约为 18M,压缩文件中的文件数约为 12000。我尝试使用 ThreadPoolExecutor500s 超时。关于如何解决此问题的任何建议

在python中实现的lambda代码: https://gist.github.com/arjunurs/7848137321148d9625891ecc1e3a9455

【问题讨论】:

    标签: python-3.x amazon-web-services amazon-s3 aws-lambda serverless-framework


    【解决方案1】:

    在您分享的要点中,有许多变化。

    我建议避免在内存中读取提取的 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
    

    【讨论】:

    • 当我没有读取内存中提取的文件时,我得到了这个。 ``` raise ValueError('Fileobj must implement read') ```
    • 我无法追踪错误tardata.extractfile(filename) 应该返回一个tarfile.ExFileObject 实例并实现read 方法。错误来自哪里?你能追踪到它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2018-07-13
    • 2023-02-13
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多