Przenieść pliki bezpośrednio z jednego konta S3 na drugie?

90

Dość podstawowe pytanie, ale nie udało mi się znaleźć odpowiedzi. Używając Transit mogę "przenosić" pliki z jednego zasobnika S3 na jednym koncie AWS do innego zasobnika S3 na innym koncie AWS, ale to, co faktycznie robi, to pobieranie plików z pierwszego, a następnie przesyłanie ich do drugiego.

Czy istnieje sposób na przeniesienie plików bezpośrednio z jednego konta S3 na drugie bez pobierania ich pomiędzy nimi?

Andrzej
źródło

Odpowiedzi:

22

Jeśli szukasz tylko gotowego rozwiązania, istnieje kilka rozwiązań, które mogą to zrobić. Bucket Explorer działa na komputerach Mac i Windows i może kopiować między kontami, podobnie jak Cloudberry S3 Explorer i S3 Browser, ale są one dostępne tylko w systemie Windows, więc mogą nie działać dla Ciebie.

Podejrzewam, że konsola AWS również mogłaby to zrobić z odpowiednimi ustawieniami uprawnień, ale nie testowałem tego.

Możesz to również zrobić za pomocą interfejsu API AWS, o ile nadałeś kontu AWS, którego używasz, uprawnienia do zapisu w docelowym zasobniku.

Geoff Appleford
źródło
+1 dla Bucket Explorer. Znacznie łatwiejsze niż konsola zarządzania AWS lub s3cmd do kopiowania wiadra między kontami. Drugi zestaw wskazówek zadziałał dla mnie z ich bezpłatną wersją
LennonR
Moroszka to droga do zrobienia. Bezpłatnie, a ponadto można ją łatwo przeciągnąć i upuścić po jeszcze łatwiejszej konfiguracji. I nie, nie pracuję tam :)
skidadon
3
Czy Bucket Explorer pobiera i ponownie przesyła dane, czy też przenosi dane bezpośrednio między serwerami Amazon?
Wouter
Pamiętaj, że wersja próbna Cloudberry (przynajmniej wersja 5.0.0.32) ma limit transferu 5 GB!
DarthPablo
123

Tak, jest sposób. Jest to dość proste, choć trudno je znaleźć. 8)

Na przykład załóżmy, że pierwsza nazwa użytkownika konta to [email protected], a druga to [email protected].

Otwórz konsolę zarządzania AWS jako acc1. Przejdź do właściwości zasobnika Amazon S3 i na karcie „Uprawnienia” kliknij „Dodaj więcej uprawnień”. Następnie dodaj uprawnienia do listy i wyświetlania dla „uwierzytelnionych użytkowników”.

Następnie w AWS IAM (jest dostępne z poziomu zakładek konsoli) acc2 stwórz użytkownika z pełnym dostępem do wiadra S3 (aby być bezpieczniejszym, możesz ustawić dokładne uprawnienia, ale ja wolę stworzyć tymczasowego użytkownika do transferu a następnie usuń go).

Następnie możesz użyć s3cmd (używając poświadczeń nowo utworzonego użytkownika w acc2), aby zrobić coś takiego:

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

Cały transfer zostanie wykonany po stronie Amazon.

side2k
źródło
9
Świetna wskazówka! rsyncMożesz także użyć do synchronizowania całych zasobników à la s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll
6
Jeśli masz problemy z 403 AccessDenied podczas kopiowania plików z miejsca docelowego do hosta, zobacz ten post. Być może istnieje inny sposób, aby to zrobić, ale wyniki tutaj zadziałały. alfielapeter.com/posts/ ...
crlane
a co z nieco dużymi wiadrami? powiedz w obszarze 50 GB, czy powoduje to jakieś problemy?
ianstarz
4
s3cmdmoże być również zainstalowany z homebrew,
fyi
3
jeśli twój docelowy zasobnik ma udostępniać pliki publicznie ... możesz chcieć dodać w --acl-publicprzeciwnym razie, wszystkie pliki są prywatne (przynajmniej było to dla mnie, kiedy wykonałem polecenie). przy tak wielu plikach prywatnych musiałem dodać politykę do wiadra, aby ponownie je wszystkie upublicznić
choonkeat
58

Użyj aws cli (użyłem instancji ubuntu 14 ec2) i po prostu uruchom następujące polecenie:

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

Będziesz musiał określić szczegóły konta dla jednego i mieć publiczny dostęp do zapisu lub publiczny dostęp do odczytu dla drugiego.

Spowoduje to zsynchronizowanie dwóch zasobników. Możesz użyć tego samego polecenia później, aby szybko zsynchronizować. Najlepsze jest to, że nie wymaga żadnej przepustowości (np. Pliki nie przechodzą przez lokalny komputer).

Programista
źródło
3
Na bardzo dużym wiadrze miałem z tym więcej szczęścia. Wydaje się, że s3cmd wstrzymuje generowanie listy plików w pierwszym segmencie. Może się skończyło, ale niecierpliwiłem się.
overthink
2
Miałem to samo doświadczenie; z jakiegoś powodu aws s3 syncwydaje się działać o rząd wielkości szybciej niż s3cmd cp.
pix0r
2
To zadziałało dla mnie. Jeśli napotkasz problemy z uprawnieniami, spróbuj użyć --grantsopcji. Więcej informacji w dokumentacji: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen
3
Uprawnienia nie są kopiowane podczas synchronizacji, więc musisz je określić --grants. Nauczyłem się tego po skopiowaniu mnóstwa danych, a następnie musiałem powtórzyć synchronizację do nowego zasobnika. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersustawia uprawnienia do odczytu dla użytkowników publicznych.
Dan Sandland
To działało około 10 razy szybciej niż s3cmdw moim przypadku, a także jest w stanie zsynchronizować pliki zmian zamiast ponownego kopiowania wszystkiego, jeśli zajdzie potrzeba ponownego uruchomienia polecenia w przyszłości - znacznie lepiej!
Nfm
5

boto działa dobrze. Zobacz ten wątek . Używając boto, kopiujesz obiekty bezpośrednio z jednego zasobnika do drugiego, zamiast pobierać je na komputer lokalny i przesyłać do innego zasobnika.

Rose Perrone
źródło
połączona dyskusja nie wydaje się odpowiadać na to pytanie, ponieważ OP pyta konkretnie o kopiowanie z jednego konta AWS na drugie.
TolkienWASP
3

W systemie Mac OS XI użyłem aplikacji Transmit from Panic. Otworzyłem jedno okno dla każdego konta S3 (używając kluczy API i sekretów). Mogłem wtedy przeciągnąć z jednego wiadra w jednym oknie do drugiego w drugim oknie. Nie musisz najpierw pobierać plików lokalnie .

Andrew ma rację, Transmit pobiera pliki lokalnie, a następnie przesyła je.

One Giant Leap AB
źródło
2
Mam Transmit i jestem w 99% przekonany, że transfer, który opisujesz, pobiera pliki do folderu tymczasowego, a następnie przesyła je na inny serwer. Czy jesteś pewien, że pliki nie przepłynęły przez Twój komputer?
Andrew,
1
Czy ktoś może to potwierdzić?
David Mauricio,
2
Potwierdzam. Przesyłaj pliki do pobrania i przesłane. To sprawia, że ​​wszystko jest strasznie powolne, ale ma ogromną zaletę w postaci przechowywania skopiowanych treści pod odpowiednim właścicielem.
Fabio Russo,
3

Przenieś pliki S3 z jednego konta na inne konto

Rozważmy, że istnieją dwa konta, konto źródłowe i konto docelowe. I dwa wiadra source-bucketi destination bucket. Chcemy przenieść wszystkie pliki z source-bucketdo destination-bucket. Możemy to zrobić wykonując następujące kroki:

  1. aws configure
    • Skonfiguruj konto docelowe przy użyciu poświadczeń lub roli IAM.
  2. Utwórz zasady użytkownika dla użytkownika konta docelowego.
  3. Daj użytkownikowi docelowemu dostęp do zasobnika źródłowego, modyfikując zasadę zasobnika źródłowego i dodając do niej zasady użytkownika konta docelowego. W ten sposób użytkownik docelowy będzie miał dostęp do zasobnika źródłowego.
  4. aws s3 ls s3://source-bucket/
    • to sprawdzi, czy konto docelowe ma dostęp do zasobnika źródłowego. Tylko dla potwierdzenia zrób to.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • spowoduje to skopiowanie wszystkich plików z zasobnika źródłowego do zasobnika docelowego. Wszystkie pliki są kopiowane przy użyciu flagi --recursive.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • spowoduje to przeniesienie wszystkich plików z zasobnika źródłowego do zasobnika docelowego.

Alternatywnie możesz użyć polecenia synchronizacji - aws s3 sync s3://source-bucket s3://detination-bucket

Aby uzyskać lepsze wyjaśnienie, kliknij łącze

Anand Tripathi
źródło
2

CrossFTP może kopiować pliki S3 bezpośrednio z jednego zasobnika do drugiego bez ich pobierania. Jest to klient GUI S3, który działa w systemach Windows, Mac i Linux.

Gatorhall
źródło
4
Należy zauważyć, że jest to możliwe tylko w wersji płatnej. To nie jest darmowe rozwiązanie.
Michael Brook
2

Możesz używać Cyberduck (open source)

Marco Delavegua
źródło
W sklepie Windows pobierają opłatę za pobranie tego, ale z ich strony internetowej można to pobrać za darmo. Po utworzeniu identyfikatora klucza dostępu AWS i tajnego klucza dostępu udało mi się połączyć z moim magazynem S3. Nie testowałem jeszcze kopiowania niczego, ale wygląda na to, że może zadziałać.
Wouter
1

W przypadku nowo utworzonych plików (NIE istniejących obiektów) możesz skorzystać z nowej funkcjonalności AWS. Jest to replikacja między regionami (w sekcji „Wersjonowanie” zasobnika S3). Możesz utworzyć politykę, która pozwoli ci replikować nowe obiekty do zasobnika na innym koncie.

W przypadku istniejących obiektów nadal będziesz musiał skopiować swoje obiekty przy użyciu innej metody - chyba że AWS wprowadzi natywną funkcjonalność do tego w przyszłości.

ciekawski George
źródło
0

Można to zrobić wykonując następujące czynności:

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

  1. Dołącz zasadę zasobnika do zasobnika źródłowego na koncie źródłowym.

  2. Dołącz zasady AWS Identity and Access Management (IAM) do użytkownika lub roli na koncie docelowym.

  3. Użyj użytkownika IAM lub roli na koncie docelowym, aby wykonać przeniesienie między kontami.

svikramjeet
źródło