Архивирование файлов в s3 с помощью AWS Lambda (Python) - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть несколько сотен PDF-файлов в s3 Bucket, и я хочу лямбда-функцию, которая создает zip-файл для всех моих PDF-файлов.

Выполнение этого на моем локальном Python, очевидно, достаточно просто, и я предполагал, что логика перейдет на AWS Lambda довольно простым способом. Но до сих пор мне не удалось заставить это работать.

Я использую библиотеку Python zipfile, а также boto3. Моя логика так же проста, как поиск всех файлов, добавление их в список 'files_to_zip' и последующая итерация по этому списку с записью каждого из них в новый zip-файл.

Это, однако, породило ряд проблем. и я думаю, что это из-за моего недолгого понимания того, как в Lambda работают вызов и загрузка файлов.

Вот код, который я пробовал до сих пор

    import os
    import boto3
    from io import BytesIO, StringIO
    from zipfile import ZipFile, ZIP_DEFLATED

    def zipping_files(event, context):
        s3 = boto3.resource('s3')

        BUCKET = 'BUCKET NAME'
        PREFIX_1 = 'KEY NAME'
        new_zip = r'NEW KEY NAME' 
        s3_client = boto3.client('s3')
        files_to_zip = []
        response = s3_client.list_objects_v2(Bucket=BUCKET, Prefix=PREFIX_1)

        all = response['Contents']     
        for i in all:
            files_to_zip.append(str(i['Key']))



        with ZipFile(new_zip, 'w',  compression=ZIP_DEFLATED, allowZip64=True) as new_zip:
            for file in files_to_zip:
                new_zip.write(file) 

Я получаю сообщения об ошибкахнапример, моя строка new_zip не существует (FileNotFoundError), и это действие доступно только для чтения.

1 Ответ

0 голосов
/ 04 ноября 2019

Этот пример кода пытается создать локальный файл NEW KEY NAME в локальной файловой системе контейнера функции Lambda, в каталоге по умолчанию (который /var/task afaik).

Шаг 1: сделать достойныйпуть к файлу в каталоге /tmp, то есть os.path.join('/tmp', target_filename).

Шаг 2: ваш код не загружает zip-файл на S3. добавить вызов s3_client.put_object.

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