Более быстрое дублирование ведро 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>