Як переміщувати файли між двома відрами S3 з мінімальними витратами?


44

У мене є мільйони файлів у відрі Amazon S3, і я хотів би перенести ці файли в інші відра і папки з мінімальною вартістю або, якщо це можливо, без витрат. Всі відра знаходяться в одній зоні.

Як я міг це зробити?

Відповіді:


53

Мільйони - це велика кількість - я до цього повернусь пізніше.

Незалежно від вашого підходу, основний механізм повинен копіювати безпосередньо з одного відра в інше - таким чином (оскільки ваші відра знаходяться в одному регіоні) ви не несете ніякої плати за пропускну здатність. Будь-який інший підхід просто неефективний (наприклад, завантаження та перезавантаження файлів).

Копіювання між відрами здійснюється за допомогою "PUT copy" - тобто запиту PUT, який включає заголовку "x-amz-copy-source" - я вважаю, що це класифікується як запит COPY. Це скопіює файл і за замовчуванням пов'язані метадані. Ви повинні включити "x-amz-acl" з правильним значенням, якщо ви хочете одночасно встановити ACL (інакше він буде за замовчуванням приватним). З вас будуть стягнуті ваші запити COPY (0,01 дол. США / 1000 запитів). Ви можете видалити непотрібні файли після їх копіювання (DELETE-запити не стягуються). (Мені не зовсім зрозуміло, чи не вимагає запит COPY також стягувати GET-запит, оскільки об’єкт спочатку повинен бути отриманий з вихідного відра - якщо це так, заряд буде додатково 0,01 $ / 10000 запити).

Вищезазначені звинувачення, здавалося б, неминучі - на мільйон предметів ви шукаєте приблизно 10 доларів (або 11 доларів). Оскільки зрештою потрібно створити файли у відрізці призначення, інші підходи (наприклад, tar-gzipping файлів, Amazon Import / Export тощо) не обійдуть ці витрати. Незважаючи на це, можливо, варто звернутися до Amazon, якщо у вас є кілька мільйонів об'єктів для передачі.

З огляду на вищезазначене (неминуча ціна), наступне, на що слід звернути увагу - час, який стане великим фактором при копіюванні «мільйонів файлів». Усі інструменти, які можуть виконувати пряму копію між відрами, несуть однакову плату. На жаль, вам потрібен один запит на файл (для копіювання), один запит на видалення та, можливо, один запит для читання даних ACL (якщо ваші файли мають різні ACL). Найкраща швидкість вийде з того, що може виконати найбільш паралельні операції.

Є кілька підходів до командного рядка, які можуть бути цілком життєздатними:

  • s3cmd-модифікація (цей специфічний запит на потяг) включає паралельні команди cp та mv і має стати хорошим варіантом для вас.
  • Консоль AWS може виконати копію безпосередньо - я не можу говорити про те, наскільки це паралельно.
  • Aws- скрипт Тіма Кей може зробити копію - але це не паралельно - вам потрібно буде її сценарій, щоб виконати потрібну повну копію (мабуть, це не найкращий варіант у цьому випадку - хоча, це чудовий сценарій).
  • CloudBerry S3 Explorer , Bucket Explorer і CloudBuddy усі повинні мати можливість виконувати завдання, хоча я не знаю, як ефективність кожної з них зростає. Я вважаю, що багатопотокові функції більшості з них вимагають придбання програмного забезпечення.
  • Сценаріюйте за допомогою одного з доступних SDK.

Існує певна можливість, що s3fs може працювати - це досить паралельно, підтримує копії між одним і тим же відром - НЕ підтримує копії між різними відрами, але може підтримувати переміщення між різними відрами.

Я б почав з модифікації s3cmd і побачив, чи маєте ви успіх у цьому, або зв’яжіться з Amazon для кращого рішення.


Програма Explorer Bucket, здається, працює для мене (переміщення файлів між двома відрами на даний момент)
Локшина

3
Де aws s3 sync s3://source s3://destinationвміщується?
Олів’є Лалонде

7

Стара тема, але це для тих, хто досліджує той самий сценарій. Разом із часом, який мені знадобилося, для 20 000+ об’єктів. Працює на AWS Linux / Centos, кожен об'єкт здебільшого є зображеннями, а також деякими відео та різними медіафайлами.

Використання інструментів AWS CLI для копіювання файлів із відра А в відро B.

A. Створіть нове відро

$ aws s3 mb s3://new-bucket-name

B. Синхронізуйте старе відро з новим

$ aws s3 sync s3://old-bucket-name s3://new-bucket-name

Копіювання 20 000+ об’єктів ...

Почав 17:03

Закінчився 17:06

Загальний час для 20 000+ об'єктів = приблизно 3 хвилини

Після правильного налаштування нового відра, тобто дозволів, політики тощо, і ви хочете видалити старе.

C. Вийміть / видаліть старе відро

$ aws s3 rb --force s3://old-bucket-name

Рятувальник життя. Я копіюю 300 + ГБ. Порада: якщо ви копіюєте з відра в одному регіоні, це швидше, ніж в іншому регіоні (а я читаю його менш дорого).
Марсело Агімовель

У мене виникла проблема з вашим методом: конфіденційність файлів була налаштована на ПРИВАТНУ, навіть більшість об'єктів публічних, що відбувається?
Марсело Агімовель

5

Я не впевнений, що це найкращий підхід, але консоль управління AWS має функцію вирізання / копіювання / вставки. дуже простий у використанні та ефективний.


6
Це, швидше за все, не спрацює з мільйоном файлів.
Джеймс

@James може болісно підтвердити це;)
пограбувати

3

Я думаю, що ви, мабуть, знайшли хороше рішення до цього часу, але для інших, хто стикається з цією проблемою (як я нещодавно), я створив просту утиліту спеціально для того, щоб відобразити одне відро S3 до іншого в дуже одночасний, але в той же час процесор і пам'ять.

Це на Github під ліцензією Apache тут: https://github.com/cobbzilla/s3s3mirror

Якщо ви вирішите спробувати, будь ласка, повідомте мене, чи є у вас відгуки.


У мене був великий досвід роботи з s3s3mirror. Мені вдалося встановити його на m1.small EC2-вузол і скопіювати 1,5 мільйона об'єктів приблизно за 2 години. Установка була трохи жорсткою через мою незнайомість з Maven та Java, але для встановлення всього було потрібно лише кілька команд apt-get на Ubuntu. Останнє зауваження: Якщо (як і я) ви турбуєтеся про те, щоб запустити невідомий скрипт на великому важливому відрізку s3, створіть спеціального користувача з доступом лише для читання у відрі для копіювання та використовуйте ці облікові дані. Нульовий шанс випадкового видалення.
Міхей

Чи можна це застосувати до відра між різними обліковими записами?
Олівер Бурдекін

@OliverBurdekin так, є --cross-account-copyваріант ( -Cкоротко) зробити це. Зауважте, що при копіюванні через облікові записи ACL не копіюються; власник відрізка призначення матиме повні дозволи на скопійовані дані.
cobbzilla

Дякую @rfcreader Як я можу оцінити вартість цього? Мені відомо про калькулятор витрат AWS, але поняття не маю, що цей процес буде задіяний з точки зору кількості отриманих запитів і т.п. Я думаю, що досить легко підрахувати ці показники за допомогою CLI, але якщо ви знаєте більше, будь ласка, зв’яжіться з нами. Підтримка AWS запропонувала "запитувач платить". га!
Олівер Бурдекін

@OliverBurdekin s3s3mirror відстежує кількість запитів AWS за типом (GET, COPY, DELETE тощо). Ці статистичні дані друкуються періодично під час запуску, і останній раз в кінці. Ви можете зробити обмежений / тестовий запуск, щоб скопіювати невелику підмножину об'єктів, це повинно дати вам загальне уявлення про те, скільки загальних запитів буде потрібно для копіювання всього набору даних.
cobbzilla

2

AWS CLI пропонує спосіб копіювання одного відра в інший при паралельних процесах. Взяте з https://stackoverflow.com/a/40270349/371699 :

Наступні команди дадуть команду AWS CLI використовувати 1000 потоків для виконання завдань (кожен невеликий файл або одну частину багаточастинкової копії) і заздалегідь розглянути 100 000 завдань:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

Запустивши їх, ви можете використовувати просту команду синхронізації наступним чином:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

На машині m4.xlarge (в AWS - 4 ядра, 16 Гб оперативної пам’яті) для мого випадку (файли 3-50 ГБ) швидкість синхронізації / копіювання пішла приблизно від 9,5 Мбіт / с до 700 + МіБ / с, збільшення швидкості 70 разів за конфігурацією за замовчуванням.


0

У програмувальному відрі виберіть файл (и), який ви хочете скопіювати в інше відро.

  • У розділі Дії виберіть "Копіювати".
  • Перейдіть до набраного відра.
  • У розділі Дії виберіть "Вставити"

1
Навіщо повторювати рішення, про яке згадували інші за рік до цього?
Бенджамін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.