У меня есть несколько сотен 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), и это действие доступно только для чтения.