#python #amazon-web-services #amazon-s3 #aws-lambda
Вопрос:
Я относительно новичок в комбинации Лямбда/Питон и у меня есть следующее требование:
Пример Использования
Следующие файлы расположены во вложенной папке корзины S3.
Database1_backup_2021_09_12_024504_9089261.bak
Database2_backup_2021_09_12_024504_9089261.bak
Database3_backup_2021_09_12_024504_9089261.bak
Database4_backup_2021_09_12_024504_9089261.bak
Database5_backup_2021_09_12_024504_9089261.bak
Database1_backup_2020_09_12_024504_9089261.bak
Database2_backup_2020_09_12_024504_9089261.bak
Database3_backup_2020_09_12_024504_9089261.bak
Database4_backup_2020_09_12_024504_9089261.bak
Database5_backup_2020_09_12_024504_9089261.bak
Я хочу скопировать только самую последнюю «Базу данных 5» в другую подпапку в той же папке, что и источник. Например, адресату потребуется обрезать метку времени в имени файла, например, следующим образом:
База данных 5_backup.bak
Какие-либо рекомендации по функции лямбда-питона, которая удовлетворит этому требованию? Большинство тех же скриптов, которые я нашел, охватывают только копирование всего содержимого папки или не копируют только один из многих файлов.
Примечание: Я также изучаю, где репликация S3 может быть лучшим решением для этого варианта использования.
Комментарии:
1. Репликация, вероятно, была бы лучшим решением вашей проблемы. Вы можете реплицироваться на префиксе, который не обязательно должен заканчиваться
/
разделителем (помните, что папки не являются основной частью хранилища объектов, и косая черта действительно не имеет значения). Если вам нужна лямбда для дополнительных мутаций в данных или что-то в этом роде, вы можете захотеть, чтобы она основывалась на событиях (запускала лямбду при записи резервной копии), а не по расписанию («последняя» резервная копия).2. Извините, но ваши требования неясны. Вы хотите сказать, что «что-то» вызовет функцию AWS Lambda, и она должна заглянуть в определенную подпапку в S3, найти самый последний файл (игнорируя имя) в этом каталоге и скопировать его в другое место?
3. Спасибо всем вам за быстрые ответы! Требование состоит в том, чтобы выполнить поиск в корзине S3 (в определенные будние дни). Ему нужно будет извлечь только определенное имя файла (на основе текстовой строки в имени) и самую последнюю версию этого файла. Моей отправной точкой был следующий код, но было бы чище, если бы репликация S3 могла справиться с этим?
4. импорт boto3 в соответствии с lambda_handler(событие, контекст): имя_файла = событие[‘Записи’][0][‘s3’][‘объект’][‘ключ’]; имя_службы=’s3′ имя_региона=’восток США-2′ aws_access_key_id=» aws_secret_access_key=» s3 = boto3.ресурс( имя_службы=имя_службы, имя_региона=имя_региона, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key ) copy_source = {«Корзина»: «демонстрация», «Ключ»: имя файла } s3.meta.client.copy(copy_source, «папка назначения», имя файла)