Оновлення
Як зазначив alberge (+1), на сьогодні чудовий інтерфейс командного рядка AWS забезпечує найбільш універсальний підхід для взаємодії з (майже) усіма речами AWS - він тим часом охоплює API більшості служб, а також має команди вищого рівня S3 для роботи з вашими конкретно, див. довідник AWS CLI для S3 :
- sync - Синхронізує каталоги та префікси S3. Ваш випадок використання розглядається в Прикладі 2 ( також доступні більш дрібні деталі з використанням
--exclude
, --include
обробкою префіксів тощо):
Наступна команда синхронізації синхронізує об’єкти під вказаним префіксом та сегментом із об’єктами під іншим вказаним префіксом та сегментом, копіюючи об’єкти s3. [...]
aws s3 sync s3://from_my_bucket s3://to_my_other_bucket
Для повноти я згадаю, що команди нижчого рівня S3 також все ще доступні через підкоманду s3api , яка дозволить безпосередньо перевести будь-яке рішення на основі SDK в AWS CLI, перш ніж врешті застосувати його функціонал вищого рівня.
Початкова відповідь
Переміщення файлів між сегментами S3 можна здійснити за допомогою об'єкта PUT - Copy API (за яким слід DELETE Object ):
Ця реалізація операції PUT створює копію об’єкта, який уже зберігається в Amazon S3. Операція копіювання PUT - це те саме, що виконувати GET, а потім PUT. Додавання заголовка запиту, x-amz-copy-source, змушує операцію PUT копіювати вихідний об’єкт у сегмент призначення. Джерело
Існують відповідні зразки для всіх наявних SDK AWS, див. Копіювання об’єктів за одну операцію . Звичайно, рішення на основі сценаріїв буде очевидним першим вибором тут, тому скопіювати об’єкт, використовуючи AWS SDK для Ruby, може бути гарною відправною точкою; якщо замість цього ви віддаєте перевагу Python, цього ж, звичайно, можна домогтися і за допомогою boto , див. метод copy_key()
у документації API S3 до boto .
PUT Object
копіює лише файли, тож вам потрібно буде явно видалити файл через DELETE Object
ще після успішної операції копіювання, але це буде лише ще кілька рядків, як тільки буде встановлений загальний сценарій, що обробляє імена сегментів та файлів (є також відповідні приклади , див., наприклад, Видалення одного об’єкта на запит ).