Загрузка данных из лямбда-задания в s3 очень медленная - PullRequest
1 голос
/ 23 апреля 2019

Я реализовал лямбду AWS с использованием Serverless Framework для получения события S3 ObjectCreated и распаковки tar.gz файлов. Я заметил, что копирование извлеченных файлов в S3 занимает много времени и времени. Размер файла .tar.gz составляет ~ 18 МБ, а количество файлов в сжатом файле - ~ 12000. Я пытался использовать ThreadPoolExecutor с 500s таймаутом. Любые предложения о том, как я могу обойти эту проблему

Лямбда-код, реализованный на python: https://gist.github.com/arjunurs/7848137321148d9625891ecc1e3a9455

1 Ответ

1 голос
/ 23 апреля 2019

В вашей общей сути есть ряд изменений.

Я предлагаю избегать чтения извлеченного 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
...