Обновить
Как указывает alberge (+1), в настоящее время превосходный интерфейс командной строки AWS обеспечивает наиболее универсальный подход для взаимодействия (почти) со всем, что связано с AWS - в то же время он охватывает API большинства служб, а также содержит команды S3 более высокого уровня для работы с вашими В частности, см. справочник по интерфейсу командной строки AWS для S3 :
- sync - синхронизирует каталоги и префиксы S3. Использование случай охватываются примером 2 (более мелкозернистое использование с
--exclude
, --include
и обработкой префикса и т.д. также доступен):
Следующая команда синхронизации синхронизирует объекты с указанным префиксом и сегментом с объектами с другим указанным префиксом и сегментом путем копирования объектов s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Для полноты я упомяну, что команды S3 более низкого уровня также по-прежнему доступны через подкоманду s3api , которая позволит напрямую транслировать любое решение на основе SDK в интерфейс командной строки AWS перед тем, как в конечном итоге принять его функциональность более высокого уровня.
Первоначальный ответ
Перемещение файлов между бакетами S3 может быть достигнуто с помощью API PUT Object - Copy (за которым следует DELETE Object ):
Эта реализация операции PUT создает копию объекта, который уже хранится в Amazon S3. Операция копирования PUT аналогична выполнению GET, а затем PUT. Добавление заголовка запроса x-amz-copy-source заставляет операцию PUT копировать исходный объект в целевую корзину. Источник
Существуют соответствующие образцы для всех существующих SDK AWS, см. Копирование объектов за одну операцию . Естественно, решение на основе сценариев будет здесь очевидным первым выбором, поэтому копирование объекта с помощью AWS SDK для Ruby может быть хорошей отправной точкой; Если вы предпочитаете Python, то же самое можно сделать и с помощью boto, конечно, см. метод copy_key()
в документации boto S3 API .
PUT Object
копирует только файлы, поэтому вам нужно будет явно удалить файл через DELETE Object
все еще после успешной операции копирования, но это будет всего лишь несколько строк после того, как общий сценарий, обрабатывающий ведро и имена файлов, будет на месте (есть также соответствующие примеры , см., например, Удаление одного объекта по запросу ).
Новый официальный интерфейс командной строки AWS изначально поддерживает большую часть функциональности
s3cmd
. Раньше я использовалs3cmd
Ruby AWS SDK для подобных вещей, но официальный интерфейс командной строки отлично подходит для этого.http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
источник
aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1
nohup aws s3 sync s3://my-bucket-in-eu-west1 s3://my-bucket-in-eu-central1 --source-region=eu-west-1 --region=eu-central-1 &
thegeekstuff.com/2010/12/5-ways-to-execute-linux-commandЯ потратил дни на написание собственного специального инструмента для распараллеливания копий, необходимых для этого, но затем наткнулся на документацию о том, как получить команду синхронизации CLI AWS S3 для синхронизации сегментов с массовым распараллеливанием . Следующие команды сообщают интерфейсу командной строки AWS использовать 1000 потоков для выполнения заданий (каждый представляет собой небольшой файл или одну часть составной копии) и просматривать 100000 заданий:
После их запуска вы можете использовать простую команду синхронизации следующим образом:
На машине m4.xlarge (в AWS - 4 ядра, 16 ГБ ОЗУ) для моего случая (файлы от 3 до 50 ГБ) скорость синхронизации / копирования увеличилась с 9,5 МБ / с до 700 + МБ / с, прирост скорости составил 70x по сравнению с конфигурацией по умолчанию.
Обновление: обратите внимание, что S3CMD обновлялся на протяжении многих лет, и теперь эти изменения эффективны только при работе с большим количеством небольших файлов. Также обратите внимание, что S3CMD в Windows (только в Windows) серьезно ограничен в общей пропускной способности и может достигать только около 3 Гбит / с на процесс независимо от того, какой размер экземпляра или настройки вы используете. У других систем, таких как S5CMD, такая же проблема. Я говорил об этом с командой S3, и они изучают это.
источник
Для перемещения / копирования из одного ведра в другое или из одного и того же я использую инструмент s3cmd, и он отлично работает. Например:
источник
Пример .NET по запросу:
using (client) { var existingObject = client.ListObjects(requestForExisingFile).S3Objects; if (existingObject.Count == 1) { var requestCopyObject = new CopyObjectRequest() { SourceBucket = BucketNameProd, SourceKey = objectToMerge.Key, DestinationBucket = BucketNameDev, DestinationKey = newKey }; client.CopyObject(requestCopyObject); } }
с клиентом что-то вроде
var config = new AmazonS3Config { CommunicationProtocol = Protocol.HTTP, ServiceURL = "s3-eu-west-1.amazonaws.com" }; var client = AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretAccessKey, config);
Может быть и лучший способ, но это всего лишь небольшой код, который я написал для передачи файлов.
источник
Если у вас есть unix-хост в AWS, используйте s3cmd с s3tools.org. Настройте разрешения так, чтобы ваш ключ был доступом для чтения к вашей корзине разработки. Затем запустите:
источник
s3cmd cp
, вы не примете эту--skip-existing
опцию, однако вы можете запуститьs3cmd sync
вместо этого, пропустив существующийДля меня просто сработала следующая команда:
источник
Вот рубиновый класс для этого: https://gist.github.com/4080793
Пример использования:
источник
На самом деле с недавнего времени я просто использую действие копирования + вставки в интерфейсе AWS s3. Просто перейдите к файлам, которые вы хотите скопировать, нажмите «Действия» -> «Копировать», затем перейдите к целевому сегменту и «Действия» -> «Вставить».
Он передает файлы довольно быстро и кажется менее запутанным решением, не требующим какого-либо программирования или таких сложных решений.
источник
У нас была именно эта проблема с нашими заданиями ETL в Snowplow , поэтому мы извлекли наш код параллельного копирования файлов (Ruby, построенный поверх Fog ) в его собственный гем Ruby, называемый Sluice:
https://github.com/snowplow/sluice
Sluice также обрабатывает удаление, перемещение и загрузку файлов S3; все распараллелено и с автоматической повторной попыткой в случае сбоя операции (что случается на удивление часто). Надеюсь, это пригодится!
источник
Я знаю, что это старый поток, но для других, кто достигает его, я предлагаю создать запланированное задание для копирования контента из производственной корзины в разрабатываемую.
Вы можете использовать Если вы используете .NET, эта статья может вам помочь
https://edunyte.com/2015/03/aws-s3-copy-object-from-one-bucket-or/
источник
Для новой версии aws2.
источник