Извлечение gzip-файла из корзины S3 в другую корзину S3 - PullRequest
0 голосов
/ 24 февраля 2020

я пытаюсь скопировать gzip-файл из одной корзины S3 и извлечь его содержимое в другую корзину S3 с помощью библиотеки gzip. я получаю сообщение об ошибке

Поиск с конца не поддерживается

import boto3, json
from io import BytesIO
import gzip

def lambda_handler():
    try:
        s3 = boto3.resource('s3')
        copy_source = {
            'Bucket': 'srcbucket',
            'Key': 'samp.gz'
            }
        bucket = s3.Bucket('destbucket')
        bucketSrc = s3.Bucket('srcbucket')

        s3Client = boto3.client('s3', use_ssl=False)

        s3Client.upload_fileobj(                      # upload a new obj to s3
            Fileobj=gzip.GzipFile(              # read in the output of gzip -d
                None,                           # just return output as BytesIO
                'rb',                           # read binary
                fileobj=BytesIO(s3Client.get_object(Bucket='srcbucket', Key='samp.gz')['Body'].read())),
            Bucket='destbucket',                      # target bucket, writing to
            Key="")               # target key, writing to

    except Exception as e:
        print(e)

1 Ответ

0 голосов
/ 24 февраля 2020

Вы не можете разархивировать ZIP-файл и загрузить его составляющие так, как вы пытаетесь.

Вы можете разархивировать весь ZIP-файл на локальный диск Lambda в /tmp (обратите внимание, что ограничение в 512 МБ дискового пространства), затем загрузите файл за файлом. Или, если он не помещается на диск или вы предпочитаете не сохранять его на рабочем столе, вы можете передавать содержимое файла ZIP в память, файл за файлом, а затем загружать каждый поток на S3). В обоих решениях вам нужно будет предоставить соответствующий ключ для каждой загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...