Перемістити файли безпосередньо з одного облікового запису S3 в інший?


90

Досить основне питання, але я не зміг знайти відповідь. За допомогою Transit я можу «переміщати» файли з одного сегмента S3 в одному обліковому записі AWS в інший сегмент S3 в іншому обліковому записі AWS, але насправді він завантажує файли з першого, а потім завантажує їх у другий.

Чи є спосіб перемістити файли безпосередньо з одного облікового запису S3 в інший, не завантажуючи їх між ними?

Відповіді:


22

Якщо ви просто шукаєте готове рішення, є кілька рішень, які можуть це зробити. Bucket Explorer працює на Mac і Windows і може копіювати з одного облікового запису на інший, як Cloudberry S3 Explorer і S3 Browser, але це лише Windows, тому для вас це може не працювати.

Я підозрюю, що консоль AWS також може робити це з відповідними налаштуваннями дозволів, але я не тестував цього.

Ви також можете зробити це за допомогою API AWS , якщо ви надали обліковий запис AWS, який використовуєте дозволи на запис у цільовий сегмент.


+1 для Bucket Explorer. Набагато простіше, ніж консоль управління AWS або s3cmd, копіювати сегмент між обліковими записами. Другий набір вказівок спрацював для мене з їх безкоштовною пробною версією
LennonR

Морошка - це шлях. Безкоштовно, крім того, це легке перетягування після ще більш простого налаштування. І ні, я там не працюю :)
skidadon

3
Чи завантажує та повторно завантажує дані Bucket Explorer, чи переміщує дані безпосередньо між серверами Amazon?
Вутер

Зверніть увагу, що пробна версія Cloudberry (принаймні версія 5.0.0.32) має обмеження на передачу 5 ГБ!
DarthPablo

123

Так, є спосіб. І це досить просто, хоча його важко знайти. 8)

Наприклад, припустимо, що ваше перше ім’я користувача облікового запису - acc1@gmail.com, а друге - acc2@gmail.com.

Відкрийте AWS Management Console як acc1. Перейдіть до властивостей сегмента Amazon S3 і на вкладці "Дозволи" натисніть "Додати більше дозволів". Потім додайте дозволи на перегляд та перегляд для "Авторизованих користувачів".

Далі, в AWS IAM (до нього можна потрапити з вкладки консолі) acc2 створіть користувача з повним доступом до сегмента S3 (щоб бути більш безпечним, ви можете встановити точні дозволи, але я волію створити тимчасового користувача для передачі а потім видаліть його).

Тоді ви можете використовувати s3cmd (використовуючи облікові дані новоствореного користувача в acc2), щоб зробити щось на зразок:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

Всі передачі будуть здійснюватися на стороні Amazon.


8
Чудова порада! rsyncВи також можете використовувати для синхронізації цілі відра по меню s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll

6
Якщо у вас є проблеми з 403 AccessDenied під час копіювання файлів з цільового на хост, перегляньте цю публікацію. Можливо, існує інший спосіб це зробити, але результати тут спрацювали для мене. alfielapeter.com/posts/…
crlane

а як щодо дещо великих ковшів? скажімо в області 50 Гб, це створює у вас якісь проблеми?
ianstarz

4
s3cmdтакож можна встановити з саморобкою, fyi
ianstarz

3
якщо цільовий сегмент призначений для публічного обслуговування файлів .. Ви можете додати --acl-publicінакше, всі файли є приватними (принаймні це було для мене, коли я виконував команду). з такою кількістю приватних файлів, мені довелося додати в відро політику, щоб зробити їх усі загальнодоступними
choonkeat

58

Використовуйте aws cli (я використовував екземпляр ubuntu 14 ec2) і просто запустіть таку команду:

aws s3 sync s3://bucket1 s3://bucket2

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

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


3
На дуже великому відрі мені пощастило з цим. s3cmd, здається, зупинився, створивши список файлів у першому сегменті. Можливо, це закінчилося, але я нетерплячий.
передумати

2
Я мав такий самий досвід; з будь-якої причини, aws s3 syncздається, працює приблизно на порядок швидше, ніж s3cmd cp.
pix0r

2
Це спрацювало для мене. Якщо у вас виникли проблеми з дозволами, спробуйте скористатися цією --grantsопцією. Більше інформації в документації: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen

3
Під час синхронізації дозволи не копіюються, тому вам доведеться вказати --grants. Я дізнався про це після копіювання тонни даних, а потім довелося переробити синхронізацію до нового сегмента. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersвстановлює дозвіл на читання для загальнодоступних користувачів.
Ден Сандленд,

Це працювало приблизно в 10 разів швидше, ніж s3cmdдля мене, а також може синхронізувати файли змін, а не повторно копіювати все, якщо вам потрібно буде повторно запустити команду в майбутньому - набагато краще!
nfm

5

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


3

У Mac OS XI використовувалася програма Transmit від Panic. Я відкрив одне вікно для кожного облікового запису S3 (використовуючи ключі та секрети API). Потім я міг перетягнути з одного відра в одне вікно в інше відро в іншому вікні. Не потрібно спочатку завантажувати файли локально .

Ендрю правильно, Transmit завантажує файли локально, а потім завантажує файли.


2
У мене є Transmit, і я на 99% впевнений, що передача, яку ви описуєте, завантажує файли в тимчасову папку, а потім завантажує на інший сервер. Ви впевнені, що файли не протікали через ваш комп'ютер?
Ендрю

1
Хтось може це підтвердити?
Девід Маурісіо

2
Я підтверджую. Передайте завантаження та завантаження. Це робить речі надзвичайно повільними, але має величезну перевагу зберігати скопійований вміст під потрібним власником.
Фабіо Руссо

3

Перемістіть файли S3 з одного облікового запису на інший

Давайте розглянемо два джерела облікового запису та цільовий рахунок. І два відра source-bucketі destination bucket. Ми хочемо перемістити всі файли з source-bucketна destination-bucket. Ми можемо зробити це наступними кроками:

  1. aws configure
    • Налаштуйте цільовий обліковий запис, використовуючи облікові дані або роль IAM.
  2. Створіть політику користувача для користувача цільового облікового запису.
  3. Надайте цільовому користувачеві доступ до сегмента джерела, змінивши політику сегмента джерела та додавши до нього політику користувача облікового запису призначення. Таким чином, цільовий користувач матиме доступ до відра-джерела.
  4. aws s3 ls s3://source-bucket/
    • це перевірить, чи має цільовий обліковий запис доступ до вихідного сегмента. Для підтвердження зробіть це.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • це скопіює всі файли джерела-сегмента у сегмент призначення. Усі файли копіюються за допомогою --recursive прапора.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • це перемістить усі файли з вихідного сегмента в сегмент призначення.

Альтернативно ви можете використовувати команду синхронізації - aws s3 sync s3://source-bucket s3://detination-bucket

Для кращого пояснення перейдіть за посиланням


2

CrossFTP може копіювати файли S3 прямо з одного сегмента в інший, не завантажуючи їх. Це клієнт графічного інтерфейсу S3, який працює на Windows, Mac та Linux.


4
Слід зазначити, що це можливо лише в платній версії. Це не безкоштовне рішення.
Майкл Брук

2

Ви можете користуватися Cyberduck (з відкритим кодом)


У магазині Windows вони беруть щось, щоб завантажити це, але зі свого веб-сайту ви можете отримати це безкоштовно. Після створення ідентифікатора ключа доступу AWS та секретного ключа доступу мені вдалося підключитися до мого сховища S3. Ще нічого не тестував, але, схоже, це може спрацювати.
Wouter

1

Для нещодавно створених файлів (НЕ існуючих об’єктів) ви можете скористатися новою функціональністю AWS. Це реплікація між регіонами (у розділі "Версія" для сегмента S3). Ви можете створити політику, яка дозволить копіювати нові об’єкти у відро в іншому обліковому записі.

Для існуючих об'єктів вам все одно доведеться копіювати ваші об'єкти за допомогою іншого методу - якщо AWS не введе для цього вбудовану функціональність.


0

Це можна зробити, запустивши наступне:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. Приєднайте політику сегмента до вихідного сегмента у вихідному обліковому записі.

  2. Приєднайте політику керування ідентифікацією та доступом (IAM) AWS до користувача або ролі в цільовому обліковому записі.

  3. Використовуйте користувача IAM або роль у цільовому обліковому записі для переміщення між обліковими записами.

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