Szukałem narzędzia, które pomogłoby mi skopiować zawartość zasobnika AWS S3 do drugiego zasobnika AWS S3 bez wcześniejszego pobierania zawartości do lokalnego systemu plików.
Próbowałem użyć opcji kopiowania konsoli AWS S3, ale spowodowało to brak niektórych zagnieżdżonych plików.
Próbowałem użyć aplikacji Transmit (od Panic). Duplikat polecenia najpierw pobiera pliki do systemu lokalnego, a następnie przesyła je z powrotem do drugiego zasobnika, co jest dość nieefektywne.
amazon-s3
copy
amazon-web-services
cnicolaou
źródło
źródło
aws configure set default.s3.max_concurrent_requests 200
Zobacz ten post, aby uzyskać więcej informacji i opcji stackoverflow.com/questions/4663016/…Odpowiedzi:
Kopiuj między zasobnikami S3
AWS (niedawno) wypuściło interfejs wiersza poleceń do kopiowania między zasobnikami.
http://aws.amazon.com/cli/
Spowoduje to skopiowanie z jednego zasobnika docelowego do innego zasobnika.
Zobacz dokumentację tutaj: Dokumentacja S3 CLI
źródło
A client error (PermanentRedirect) occurred when calling the ListObjects operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Uproszczony przykład wykorzystujący gem aws-sdk:
Jeśli chcesz wykonać kopię między różnymi zasobnikami, określ nazwę zasobnika docelowego:
źródło
Możesz to teraz zrobić z poziomu interfejsu administratora S3. Po prostu przejdź do jednego zasobnika i wybierz wszystkie swoje foldery
actions->copy
. Następnie przejdź do nowego wiadraactions->paste
.źródło
Jest to możliwe dzięki najnowszemu klejnotowi aws-sdk , zobacz przykład kodu:
więcej szczegółów: Jak skopiować plik między zasobnikami za pomocą narzędzia aws-s3 gem
źródło
Kopiuj między zasobnikami w różnych regionach
Powyższe polecenie kopiuje plik z zasobnika w Europie (eu-west-1) do Japonii (ap-północny-wschód-1). Możesz uzyskać nazwę kodową regionu swojego wiadra za pomocą tego polecenia:
Nawiasem mówiąc, użycie funkcji Kopiuj i wklej w konsoli internetowej S3 jest łatwe, ale wydaje się, że pobiera się z zasobnika źródłowego do przeglądarki, a następnie przesyła do zasobnika docelowego. Korzystanie z „aws s3” było dla mnie znacznie szybsze.
źródło
Stworzyłem Docker wykonywalny z s3s3mirror narzędzia. Narzędzie do kopiowania i tworzenia kopii lustrzanych z zasobnika AWS S3 na inny.
Jest wątkowany, umożliwiając równoległe kopiowanie i bardzo wydajny w pamięci, udaje się tam, gdzie s3cmd całkowicie zawodzi.
Stosowanie:
Aby zobaczyć pełną listę opcji, wypróbuj:
źródło
Sprawdź dokumentację poniżej. Myślę, że tego właśnie szukasz. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
Interfejs S3Interface firmy RightAws gem ma funkcje kopiowania, które wykonują powyższe czynności.
http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method
źródło
Wyobrażam sobie, że prawdopodobnie znalazłeś już dobre rozwiązanie, ale dla innych, którzy napotykają ten problem (tak jak niedawno), stworzyłem proste narzędzie specjalnie do celów tworzenia kopii lustrzanych jednego wiadra S3 do drugiego w wysoce współbieżny, ale efektywny procesora i pamięci.
Jest na github na licencji Apache tutaj: https://github.com/cobbzilla/s3s3mirror
Jeśli masz bardzo dużą łyżkę i szukasz maksymalnej wydajności, warto spróbować.
Jeśli zdecydujesz się spróbować, daj mi znać, jeśli masz jakieś uwagi.
źródło
Jeśli jesteś w powłoce i chcesz skopiować wiele plików, ale nie wszystkie pliki: s3cmd cp --recursive s3: // BUCKET1 / OBJECT1 s3: // BUCKET2 [/ OBJECT2]
źródło
Napisałem skrypt, który tworzy kopię zapasową wiadra S3: https://github.com/roseperrone/aws-backup-rake-task
Używam tego w zadaniu rake (dla aplikacji Railsowej):
źródło
Słyszałem, że jest do tego moduł węzła, jeśli interesujesz się javascript: p
Z dokumentów Knox-Copy :
źródło
Poinformowano mnie, że możesz to również zrobić za pomocą s3distcp na klastrze EMR. Ma działać szybciej dla danych zawierających duże pliki. Działa wystarczająco dobrze na małych zestawach danych - ale wolałbym inne rozwiązanie, biorąc pod uwagę krzywą uczenia się potrzebną do skonfigurowania tak małych danych (nigdy wcześniej nie pracowałem z EMR).
Oto link z Dokumentacji AWS: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
Aktualizacja: dla tego samego zestawu danych s3s3mirror był znacznie szybszy niż s3distcp lub AWS cli. Dużo łatwiejsze do skonfigurowania.
źródło
Kopiowanie z jednego zasobnika S3 do tego samego lub innego zasobnika S3 bez pobierania do lokalnego jest całkiem proste. Użyj poniższego polecenia powłoki.
Spowoduje to skopiowanie wszystkich plików z
SourceFoldername
folderu zasobnika źródłowego do folderu zasobnika docelowegoTargetFoldername
. W powyższym kodzie, należy wymienićAccessKey
,SecurityKey
aExternalBucket
ze swoimi odpowiednimi wartościami.źródło
hdfs
?z AWS cli https://aws.amazon.com/cli/, co możesz zrobić
aws s3 ls
- Spowoduje to wyświetlenie wszystkich łyżek S3aws cp --recursive s3://<source bucket> s3://<destination bucket>
- Spowoduje to skopiowanie plików z jednego zasobnika do drugiegoUwaga * Bardzo przydatne podczas tworzenia zasobników replikacji między regionami, wykonując powyższe czynności, wszystkie pliki są śledzone, a aktualizacja pliku regionu źródłowego zostanie propagowana do zasobnika replikowanego. Synchronizowane są wszystko oprócz usunięcia plików.
W przypadku CRR upewnij się, że masz włączoną obsługę wersji w zasobnikach.
źródło
Co powiesz na
aws s3 sync
polecenie CLI. aws s3 sync s3: // bucket1 / s3: // bucket2 /źródło
Jak wyjaśnił Neel Bhaat na tym blogu , istnieje wiele różnych narzędzi, których można użyć w tym celu. Niektóre z nich są dostarczane przez AWS, a większość z nich to narzędzia innych firm. Wszystkie te narzędzia wymagają zapisania klucza i tajnego konta AWS w samym narzędziu. Zachowaj ostrożność podczas korzystania z narzędzi stron trzecich, ponieważ dane uwierzytelniające, które zapisujesz, mogą cię kosztować całą twoją wartość i spowodować śmierć.
Dlatego zawsze zalecam używanie do tego celu AWS CLI . Możesz to po prostu zainstalować z tego linku . Następnie uruchom następujące polecenie i zapisz klucz, tajne wartości w interfejsie wiersza polecenia AWS.
I użyj następującego polecenia, aby zsynchronizować wiadro AWS S3 z komputerem lokalnym. (Na komputerze lokalnym powinien być zainstalowany interfejs wiersza poleceń AWS)
Przykłady:
1) W przypadku AWS S3 do pamięci lokalnej
2) Z lokalnego magazynu do AWS S3
3) Z wiadra AWS s3 do innego wiadra
źródło
Najlepszym sposobem skopiowania zasobnika S3 jest użycie interfejsu wiersza polecenia AWS .
Obejmuje następujące 3 kroki:
Jeśli kopiujesz zasobniki między dwoma kontami AWS, musisz dołączyć odpowiednią politykę do każdego zasobnika.
Następnie użyj tego polecenia, aby skopiować z jednego zasobnika do drugiego.
Szczegóły kroku 2 i kroku 3 są podane w tym linku:
źródło
Możesz napisać aplikację Java - może nawet aplikację GUI SWING, która korzysta z API AWS Java. Aby skopiować obiekty, zobacz -
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/CopyObject.java
źródło