Команда aws s3 cp
использует некоторый специальный код в CLI AWS, чтобы выяснить, куда копируются объекты. Затем он выполняет обычные вызовы Amazon S3 API для копирования фактических данных:
- Если источником и местом назначения являются сегменты S3, он использует
CopyObject()
, чтобы указать S3 напрямую копировать объект между сегментами (без загрузка / выгрузка) - Если источником является локальный компьютер, а местом назначения является сегмент S3, он использует
PutObject()
- Если источником является сегмент S3, а местом назначения является локальный компьютер , он использует
GetObject()
Команда aws s3 sync
выполняет аналогичные действия (но сначала сравнивает исходные / целевые файлы).
A ближе к Амазонке Конечные точки S3 (например, выполнение команд из экземпляра Amazon EC2 в том же регионе) позволят минимизировать нагрузку на сеть, возможно, сделав копии объектов более эффективными.
Запуск команд в параллельный определенно сделает вещи go быстрее, поскольку S3 может копировать файлы параллельно. Я часто открываю два терминала windows для экземпляра EC2 и выдаю команды в каждом окне. Они работают независимо друг от друга, так что это должно значительно ускорить процесс. (Это не обязательно так, если объекты загружаются или загружаются, поскольку существуют ограничения пропускной способности сети. Но, поскольку ваш скрипт просто выдает команды Copy
, это не имеет значения.)
Альтернатива: используйте aws s3 mv
Если вы хотите переместить объекты (а не просто скопировать их), вы можете использовать aws s3 mv
. На самом деле он выполняет CopyObject()
, а затем DeleteObject()
в исходном файле.