2015-11-05 2 views
0

У меня есть доступ к ведерке S3. Я не владею ведром. Мне нужно проверить, были ли добавлены новые файлы в ведро, чтобы отслеживать его.Как контролировать ведро AWS S3 с помощью python с помощью boto?

Я видел, что ведра могут запускать события и что можно использовать Лямбду Amazon для наблюдения и реагирования на эти события. Однако я не могу изменить настройки ведра, чтобы это разрешить.

Моей первой идеей было просеять все файлы и получить последнюю версию. Однако в этом ковше много файлов, и этот подход оказался крайне неэффективным.

Конкретные вопросы:

  1. Есть ли способ, чтобы эффективно получить самый новый файл в ведре?
  2. Есть ли способ отслеживать загрузку в ведро с помощью boto?

Менее конкретный вопрос:

  • Как бы вы подойти к этой проблеме? Скажем, вам нужно было получить самый новый файл в ведре и напечатать его имя, как бы вы это сделали?

Спасибо!

ответ

0

Вы правы, что AWS Lambda может быть запущен, когда объекты добавляются в ведро Amazon S3 или удаляются из него. Также можно отправить сообщение Amazon SNS и Amazon SQS. Эти параметры должны быть настроены кем-либо, у кого есть необходимые разрешения на ведро.

Если у вас нет таких разрешений, но вы можете позвонить GetBucket(), то вы можете получить список объектов в ведре. Это возвращает до 1000 объектов за вызов API.

Существует no API call доступно для "получения новейших файлов".

Существует нет необработанного кода для «мониторинга» загрузки в ведро. Вам нужно будет написать код, который отображает содержимое ведра, а затем идентифицирует новые объекты.

Как бы я подошел к этой проблеме? Я бы попросил владельца ковша добавить некоторые функции для запуска Lambda/SNS/SQS или для подачи файлов. Если это невозможно, я бы написал свой собственный код, который сканирует весь ведро и запускает его в обычном расписании.

+0

Здравствуйте. Спасибо за ответ! Я сделал что-то похожее на ваше предложение/мою первоначальную идею. В цикле while я получаю список элементов, сортирую их по дате и извлекаю первый. Я также сохраняю последний новый файл. Если текущий новейший файл отличается от последнего новейшего файла, это новый файл, поэтому я делаю что-то с ним. Тем не менее, я не думаю, что этот подход является элегантным вообще, он занимает около половины минуты, чтобы заказать все предметы в ковше. Итерация только один раз, чтобы найти новейшую, также не является чем-то вроде улучшения. – RandomGuyqwert

+0

Да, есть лучшие способы сделать это (Lambda, SQS, SNS или даже хранить информацию в таблице DynamoDB), но все они требуют разрешения для самого ведра. Имея только разрешения на чтение, есть только ограниченные возможности. –

Смежные вопросы