Более быстрое дублирование ведро s3

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

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

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

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

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

Ответ 1

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

Ответ 2

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

  • Выберите все файлы/папки в первом ковше
  • Нажмите "Действия" > "Копировать"
  • Создайте новое ведро и выберите его
  • Нажмите "Действия" > "Вставить"

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

Ответ 3

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

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

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

Ответ 4

Для решения 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

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

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

Ответ 5

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

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

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

Ответ 6

Как это касается Google, впервые попал на эту тему, добавив дополнительную информацию.

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

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

Ответ 7

Как объяснил Нил Баат в этом блоге, для этой цели можно использовать много разных инструментов. Некоторые из них предоставляются AWS, а большинство - сторонними инструментами. Все эти инструменты требуют сохранения ключа учетной записи AWS и секрета в самом инструменте. Будьте очень осторожны при использовании сторонних инструментов, поскольку учетные данные, которые вы сохраняете, могут стоить вам, вашей полной стоимости и даже замертво.

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

aws configure

И используйте следующую команду для синхронизации вашего AWS S3 Bucket с вашим локальным компьютером. (На локальном компьютере должен быть установлен AWS CLI)

aws s3 sync <source> <destination>

Примеры:

1) Для AWS S3 в локальном хранилище

aws s3 sync <S3Uri> <LocalPath>

2) Из локального хранилища в AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) Из ведра AWS s3 в другое ведро

aws s3 sync <S3Uri> <S3Uri>