Самый эффективный способ обработать в пакетном режиме удаляет Файлы S3

Я не предоставил доступ ни к одному из моих серверов, которыми я управляю. Но мне предоставили доступ в нескольких случаях.

Мне дали прямой RDP, SSh и один используемый logmein.com. С точки зрения безопасности я думаю, что обслуживание logmein.com было лучшим. B/c это был уровень безопасности перед ударом приглашения ко входу в систему Windows. Если Вы не можете сделать чего-то как этот. RDP будет работать. И затем можно отключить доступ после факта.

Так как Вы не можете гарантировать, что они не сделают никого злонамеренного, после того как они идут там. Необходимо взять хорошие материально-технические ресурсы учетных записей пользователей и сервисов, работающих перед передачей учетной записи. Полное резервное копирование всегда является хорошей идеей также.

Когда он сделан, можно отключить учетную запись. Затем можно сравнить Вас, новый сервер указывает с материально-техническими ресурсами, что Вы взяли. Можно также сделать поиск файла в Windows или Linux и искать датой, измененной для наблюдения, каких файлов они коснулись.

Другой шаг, который можно сделать, дают им очень простые пользовательские права, никакого администратора. Затем нарастите полномочия, в которых они нуждаются как погружение в проблему. Проблема с выполнением этого является этим, будет стоить Вам b/c, займет больше времени диагностировать проблему.

15
задан 2 April 2015 в 07:58
8 ответов

AWS поддерживает массовое удаление до 1000 объектов на запрос с использованием S3 REST API и его различных оболочек. Этот метод предполагает, что вы знаете ключи объекта S3, которые хотите удалить (то есть он не предназначен для обработки чего-то вроде политики хранения, файлов, превышающих определенный размер и т. Д.).

S3 REST API может указать до 1000 файлов, которые должны быть удалены в одном запросе, что должно быть быстрее, чем выполнение отдельных запросов. Помните, что каждый запрос - это HTTP-запрос (то есть TCP). Таким образом, каждый запрос несет накладные расходы. Вам просто нужно знать ключи объектов и создать HTTP-запрос (или используйте оболочку на выбранном вами языке). AWS предоставляет отличную информацию об этой функции и ее использовании . Просто выберите наиболее удобный для вас метод!

Я предполагаю, что ваш вариант использования предполагает, что конечные пользователи указывают несколько конкретных файлов для одновременного удаления. Вместо того, чтобы инициировать такую ​​задачу, как «очистить все объекты, которые относятся к файлам изображений» или «очистить все файлы старше определенной даты» (которые, как я считаю, легко настроить отдельно в S3).

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

Если нет, вы можете изучить асинхронные вызовы API. Вы можете прочитать немного о том, как они будут работать в целом, из этой записи в блоге или поискать, как это сделать, на любом языке по вашему выбору. Это позволит запросу на удаление занять свой собственный поток, а остальная часть кода может выполняться, не заставляя пользователя ждать. Или вы можете выгрузить запрос в очередь. . . Но оба эти варианта без нужды усложняют либо ваш код (асинхронный код может раздражать), либо вашу среду (вам понадобится служба / демон / контейнер / сервер для обработки очереди. Поэтому я бы по возможности избегал этого сценария.

Изменить: у меня нет репутации, чтобы размещать более двух ссылок. Но вы можете увидеть комментарии Amazon о скорости запросов и производительности здесь: http://docs.aws.amazon.com/AmazonS3/latest/dev /request-rate-perf-considerations.html И в s3 faq комментируется, что массовое удаление - это способ, если это возможно.

10
ответ дан 2 December 2019 в 20:47

Там уже упоминание приблизительно s3 sync команда прежде, но без примера и слово приблизительно --delete опция.

я нашел самым быстрым способом удалить содержание папки в S3 блок my_bucket:

aws s3 sync --delete "local-empty-dir/" "s3://my_bucket/path-to-clear"

0
ответ дан 2 December 2019 в 20:47

Не зная, как вы управляете бакетами s3, это может быть или не быть особенно полезным.

В инструментах AWS CLI есть опция под названием «синхронизация», которая может быть особенно эффективной, чтобы гарантировать, что s3 имеет правильные объекты. Если вы или ваши пользователи управляете S3 из локальной файловой системы, вы можете сэкономить массу работы, определяя, какие объекты необходимо удалить, с помощью инструментов CLI.

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

0
ответ дан 2 December 2019 в 20:47

Я был разочарован производительностью веб-консоли для этой задачи. Я обнаружил, что команда AWS CLI делает это хорошо. Например:

aws s3 rm --recursive s3: // my-bucket-name / huge-directory-full-of-files

Для большой файловой иерархии это может занять значительное время. Вы можете установить это в сеансе tmux или screen и проверить позже.

3
ответ дан 2 December 2019 в 20:47

мучительно медленная опция - s3 rm --recursive , если вам действительно нравится ждать.

Запуск параллельно s3 rm - рекурсивный с разными шаблонами - include немного быстрее, но много времени по-прежнему тратится на ожидание, поскольку каждый процесс индивидуально выбирает весь список ключей для локального выполнения - include сопоставление с образцом.

Ввести массовое удаление.

Я обнаружил, что могу добиться максимальной скорости, удаляя 1000 ключей за раз, используя aws s3api delete-objects .

Вот пример:

cat file-of-keys | xargs -P8 -n1000 bash -c 'aws s3api delete-objects --bucket MY_BUCKET_NAME --delete "Objects=[$(printf "{Key=%s}," "$@")],Quiet=true"' _
  • Параметр -P8 в xargs управляет параллелизмом. В данном случае это восемь, что означает 8 экземпляров по 1000 удалений за раз.
  • Параметр -n1000 указывает xargs объединять 1000 ключей для каждого aws s3api delete- объекты вызывают.
  • Удаление , Quiet = true или изменение его на false приведет к выдаче ответов сервера.
  • Примечание: есть легко пропустить _ в конце этой командной строки. @VladNikiforov опубликовал отличный комментарий о том, для чего он нужен, в комментарии , поэтому я собираюсь просто дать ссылку на него.

Но как получить файл ключей ?

Хорошо, если у вас уже есть список ключей. Работа завершена.

Если нет, я предполагаю, что вот один способ:

aws s3 ls "s3://MY_BUCKET_NAME/SOME_SUB_DIR" | sed -nre "s|[0-9-]+ [0-9:]+ +[0-9]+ |SOME_SUB_DIR|p" >file-of-keys
15
ответ дан 2 December 2019 в 20:47

Изящный трюк - использовать правила жизненного цикла для обработки удаления за вас. Вы можете поставить правило в очередь для удаления нужного префикса или объектов, и Amazon просто позаботится об удалении.

https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html

2
ответ дан 2 December 2019 в 20:47

Я обнаружил, что rclone работает довольно быстро, поскольку использует S3 API.

https://rclone.org/

rclone delete --progress --transfers=1000 :

0
ответ дан 30 November 2020 в 15:31

Я знаю, что этот пост действительно устарел на данный момент, но если вам нужно сделать это сегодня, на панели инструментов AWS теперь есть функция «Пусто» на странице поиска корзины, которая будет выполнять массовое удаление (1000 за раз). ) для вас:

Image of AWS Dashboard - S3 Empty Button Highlighted

0
ответ дан 14 April 2021 в 16:43

Теги

Похожие вопросы