Masowe kopiowanie, przenoszenie i synchronizacja plików z Amazon S3: mv, cp i sync.

Jak skopiować, przenieść lub zsynchronizować przechowywane lokalnie pliki z usługą storage’u obiektowego Amazon S3? W tym poradniku pokażemy jak zrobić to przy pomocy narzędzia aws-cli.

Wymagania wstępne

Aby móc korzystać narzędzi mv, cp oraz sync konieczne jest:

  • Zainstalowanie i skonfigurowanie narzędzia AWS-CLI (przeczytaj poradnik)
  • Posiadanie lub utworzenie bucketa w usłudze Amazon S3

Ponieważ wszystkie polecenia wykonywane są z poziomu tekstowej konsoli, należy również mieć podstawowe umiejętności w zakresie posługiwania się nią, w szczególności przechodzenia między katalogami (folderami) w systemie plików.

Przenoszenie plików – aws s3 mv

Zacznijmy od przenoszenia plików, czyli inaczej skopiowania ich do lokalizacji docelowej i usunięcia z lokalizacji źródłowej. Służy do tego narzędzie s3 mv wchodzące w skład zestawu AWS CLI.

Przeniesienie plików z komputera do Amazon S3

Podstawowa składnia polecenia służącego do przenoszenia plików z komputera do Amazon S3 prezentuje się następująco:

aws s3 mv [plik] s3://[bucket] 
  • [plik] – zastąpić ścieżką do pliku
  • [bucket] – zastąpić nazwą bucketa

Przykład #1: przeniesienie pojedynczego pliku

Korzystając z podanego powyżej polecenia, przenieśmy plik test.txt znajdującego się w katalogu /home/ubuntu/plik.txt do bucketa moj-bucket. Służyć do tego będzie polecenie:

aws s3 mv /home/ubuntu/test.txt s3://moj-bucket 

Jeśli wszystko przebiegnie prawidłowo, powinien wyświetlić się następujący komunikat:

move: test.txt to s3://moj-bucket/test.txt 

Dla pewności można sprawdzić obecność pliku w buckecie z użyciem dostępnej poprzez przeglądarkę Konsoli AWS.

Przykład #2: przeniesienie pojedynczego pliku ze zmianą nazwy

Chcąc zmienić nazwę pliku w lokalizacji docelowej (w tym przypadku: w buckecie usługi S3), należy podać jego nową nazwę po nazwie bucketa. Na podanym poniżej przykładzie zmieniamy nazwę pliku test.txt na nowy-test.txt:

aws s3 mv /home/ubuntu/test.txt s3://moj-bucket/nowy-test.txt 

Przykład #3: przeniesienie zawartości katalogu

Polecenie aws s3 mv umożliwia również przenoszenie katalogów korzystając z parametru –recursive. Warto tu jednak zauważyć, że przenoszeniu ulegają jedynie pliku znajdujące się w danym katalogu i jego podkatalogach, ale nie katalog i jego podkatalogi. S3, jako usługa storage’u obiektowego, używa katalogów jedynie jako pewnej abstrakcji ułatwiającej porządkowanie danych, nie operuje jednak na nich na poziomie programistycznym. Przenieśmy katalog moj-katalog znajdujący się w lokalizacji /home/ubuntu/ do bucketa moj-bucket:

aws s3 mv /home/ubuntu/moj-katalog/ s3://moj-bucket --recursive 

Ciekawą opcją jest możliwość wyłączenia pewnych plików z przeniesienia przy pomocy parametru –exclude. W następujący sposób można przenieść wszystkie pliki w danym katalogu za wyjątkiem tych z rozszerzeniem .jpg.

aws s3 mv /home/ubuntu/moj-katalog/ s3://moj-bucket --recursive --exclude "*.jpg"

Przeniesienie plików z Amazon S3 na komputer

Wypróbujmy teraz odwrotność przedstawionego powyżej sposobu na przeniesienie plików. Tym razem przeniesiemy je z bucketa w usłudze S3 na komputer. Służące do tego polecenie ma następującą składnię:

aws s3 mv s3://[bucket]/[plik] [lokalizacja]
  • [bucket] – zastąpić nazwą bucketa
  • [plik] – zastąpić nazwą przenoszonego pliku
  • [lokalizacja] – zastąpić lokalizacją docelową

Przykład #1 – przenoszenie pojedynczego pliku

Aby przenieść plik o nazwie test.txt znajdujący się w bukecie moj-bucket do katalogu docelowego (tj. katalogu na komputerze, w którym chcemy znaleźć przenoszony plik) /home/ubuntu/, należy wykonać polecenie:

aws s3 mv s3://moj-bucket/test.txt /home/ubuntu/

Przykład #2: przenoszenie całej zawartości bucketa

Możliwe jest również przeniesienie całej zawartości bucketa do wybranego katalogu docelowego. Naturalnie nie podajemy tu nazwy konkretnego pliku. Ponownie posłużymy się parametrem –recursive:

aws s3 mv s3://moj-bucket/ /home/ubuntu/ --recursive 

Kopiowanie plików – aws s3 cp

Skoro omówiliśmy przenoszenie, czas na kopiowanie. Składnia poleceń i parametry są tu niemal identyczne do przedstawionego powyżej sposobu na przeniesienie danych, przy czym aws s3 mv zastępujemy poprzez aws s3 cp. Z tego względu podam jedynie po jednym przykładzie zastosowania tych poleceń – inne znajdziesz we wcześniejszym rozdziale dotyczącym przenoszenia danych. Należy stosować je odpowiednio zastępując mv przez cp.

Kopiowanie plików z komputera na Amazon S3

Podstawowa składnia polecenia służącego do skopiowania plików z komputera do bucketa w usłudze Amazon S3:

aws s3 cp [plik] s3://[bucket] 

Przykład: skopiowanie pojedynczego pliku

aws s3 cp test.txt s3://moj-bucket 

Kopiowanie plików z Amazon S3 na komputer

Podstawowa składnia polecenia służącego do skopiowania plików z bucketa w usłudze Amazon S3 na komputer:

aws s3 cp s3://[bucket]/[plik] [lokalizacja]

Przykład: skopiowanie całej zawartości bucketa

aws s3 cp s3://moj-bucket /home/ubuntu/ 

Synchronizacja plików – aws s3 sync

Narzędzie aws s3 sync działa w sposób rekursywny, co umożliwia oszczędzenie czasu i kosztów transferu danych. Pobierane lub wysyłane są jedynie te dane, które nie istnieją w lokalizacji docelowej lub których rozmiar lub data modyfikacji są inne. Może ono w pewnym sensie być uważane za pewną odmianę dobrze znanego i przedstawionego wyżej kopiowania, wykonywanego tu jednak w sposób nieco bardziej inteligentny – kopiowaniu nie ulegną bowiem dane już istniejące w lokalizacji docelowej.

Synchronizacja plików z komputera na Amazon S3

Zacznijmy od synchronizacji plików z komputera do bucketa w usłudze Amazon S3. Służy do tego polecenie, którego podstawowa składnia bardzo przypomina opisane wcześniej mv i cp. Z tą różnicą, że teraz operujemy na katalogach zawierających pliki, nie na (głównie) samych plikach.

aws s3 sync [katalog] s3://[bucket] 
  • [katalog] – scieżka do katalogu lokalnego, który ma ulec synchronizacji
  • [bucket] – nazwa katalogu w usłudze S3

Przykład 1: prosta synchronizacja zawartości katalogu

Sprawdźmy, jak zsynchronizować zawartość katalogu moj-katalog znajdującego się w lokalizacji /home/ubuntu do bucketu moj-bucket:

aws s3 sync /home/ubuntu/moj-katalog/ s3://moj-bucket

Przykład 2: synchronizacja zawartości katalogu do katalogu w buckecie

Amazon S3 umożliwia tworzenie katalogów w ramach bucketu. Aby umieścić synchronizowane dane z naszego katalogu lokalnego moj-katalog w katalogu S3 o przykładowej nazwie moj-katalog-s3, należy wykonać polecenie:

aws s3 sync /home/ubuntu/moj-katalog/ s3://moj-bucket/moj-katalog-s3/ 

Synchronizacja z Amazon S3 na komputer

Składnia polecenia służącego do przenoszenia danych z usługi Amazon S3 do katalogu lokalnego wymaga podania nazwy bucketu w pierwszej kolejności, a następnie katalogu, do którego dane mają trafić:

aws s3 sync s3://[bucket] [lokalizacja]
  • [bucket] – nazwa bucketu w usłudze S3
  • [lokalizacja] – lokalizacja docelowa

Przykład: prosta synchronizacja zawartości bucketa

Zsynchronizujmy dane z bucketa o nazwie moj-bucket do katalogu lokalnego /home/ubuntu/.

aws s3 sync s3://moj-bucket /home/ubuntu/

Brak uprawnień?

Niekiedy zdarza się, że pliki nie mogą ulec synchronizacji ze względu na brak uprawnień. Dzieje się tak m.in. przy próbie synchronizacji baz danych MySQL. Problemu tego nie rozwiąże polecenie sudo w Linuksie i MySQL. Należy skorzystać z polecenia sudo -E umożliwiającego zachowanie środowiska użytkownika – AWS CLI go bowiem nie rozpoznaje.

Przykład:

sudo -E aws s3 sync /moja-baza-mysql/ s3://moj-bucket 

Więcej informacji

Więcej informacji o użyciu poleceń s3 mv, cp oraz sync znajdziesz w oficjalnej dokumentacji AWS. Znajdują się tam również dodatkowe parametry i przykłady. Dokumentacja jest dostępna w języku angielskim.

Dokumentacja s3 cp
Dokumentacja s3 mv
Dokumentacja s3 sync

Udostępnij ten artykuł
Skopiuj powyższy link
Poprzedni

Jak zainstalować i skonfigurować AWS CLI?

Następny

Azure już w Polsce. Microsoft uruchamia pierwsze DC w naszym regionie.