Более быстрое дублирование S3 Bucket - PullRequest
86 голосов
/ 12 января 2011

Я пытался найти лучший инструмент командной строки для дублирования сегментов, чем s3cmd . s3cmd может дублировать сегменты, не загружая и не загружая каждый файл. Команда, которую я обычно запускаю для дублирования сегментов с помощью s3cmd:

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

Это работает, но очень медленно, поскольку копирует каждый файл через API по одному. Если бы s3cmd мог работать в параллельном режиме, я был бы очень счастлив.

Есть ли другие опции, доступные в качестве инструментов командной строки или кода, которые люди используют для дублирования сегментов, которые работают быстрее, чем s3cmd?

Редактировать: Похоже, s3cmd-модификация это именно то, что я ищу. Жаль, что это не работает. Есть ли другие варианты?

Ответы [ 6 ]

141 голосов
/ 10 мая 2014

AWS CLI, кажется, отлично справляется со своей задачей и имеет преимущество в качестве официально поддерживаемого инструмента.

aws s3 sync s3://mybucket s3://backup-mybucket

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

По умолчанию поддерживает одновременную передачуСм. http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests

Чтобы быстро передать огромное количество небольших файлов, запустите сценарий из экземпляра EC2, чтобы уменьшить задержку, и увеличьте max_concurrent_requests, чтобы уменьшить влияние задержки.Например:

aws configure set default.s3.max_concurrent_requests 200
63 голосов
/ 06 октября 2012

Если вы не возражаете против использования консоли AWS, вы можете:

  1. Выберите все файлы / папки в первом сегменте
  2. Нажмите Действия> Копировать
  3. Создайте новое ведро и выберите его
  4. Нажмите Действия> Вставить

Это все еще довольно медленно, но вы можете оставить это в покое и позволить ему делать свое дело.

23 голосов
/ 04 ноября 2014

Я попытался клонировать два сегмента с помощью веб-консоли AWS, s3cmd и интерфейса командной строки AWS.Хотя эти методы работают большую часть времени, они мучительно медленны.

Затем я нашел s3s3mirror: специализированный инструмент для синхронизации двух сегментов S3.Он многопоточный и намного быстрее, чем другие подходы, которые я пробовал.Я быстро переместил гигабайты данных из одного региона AWS в другой.

Проверьте это на https://github.com/cobbzilla/s3s3mirror, или загрузите контейнер Docker с https://registry.hub.docker.com/u/pmoust/s3s3mirror/

9 голосов
/ 06 марта 2017

Для решения adhoc используйте aws cli для синхронизации между сегментами:

aws s3 sync скорость зависит от:
- задержка вызова API к конечной точке S3
- количество вызовов API, выполненных одновременно

Чтобы увеличить скорость синхронизации:
- запустить aws s3 sync из экземпляра AWS (c3.large на FreeBSD в порядке ;-))
- обновите ~ / .aws / config с помощью:
- max_concurrent_requests = 128
- max_queue_size = 8096

со следующей конфигурацией и типом экземпляра я смог синхронизировать корзину (309 ГБ, 72 КБ, us-east-1) в течение 474 секунд.

Для более общего решения рассмотрите возможность межрегиональной репликации AWS DataPipeLine или S3.

3 голосов
/ 05 сентября 2011

Поскольку речь идет о первом обращении Google по этому вопросу, добавлении дополнительной информации.

'Cyno' сделал более новую версию s3cmd-модификации, которая теперь поддерживает параллельную синхронизацию между сегментами.Именно то, чего я ждал, тоже.

Запрос на извлечение на https://github.com/pcorliss/s3cmd-modification/pull/2,, его версия на https://github.com/pearltrees/s3cmd-modification

3 голосов
/ 12 января 2011

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

Выберите любой язык и Amazon SDK / Toolkit, которые вы предпочитаете.Тогда вам просто нужно перечислить / извлечь содержимое исходного блока и скопировать каждый файл (очевидно, параллельно)

Глядя на источник для s3cmd-модификации (и я признаю, что ничего не знаю о Python), похоже, что они не распараллеливали код от корзины к корзине, но, возможно, вы могли бы использовать стандартный параллельный код загрузки / выгрузки в качестве отправной точки для этого.

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