Pobierasz cały segment S3?


705

Zauważyłem, że wydaje się, że nie ma opcji pobrania całego segmentu S3 z konsoli zarządzania AWS.

Czy istnieje prosty sposób na złapanie wszystkiego w jednym z moich wiader? Zastanawiałem się nad upublicznieniem folderu głównego, użyciem go wgetdo pobrania, a następnie nadaniem mu statusu prywatnego, ale nie wiem, czy jest łatwiejszy sposób.


4
Jak wielu tutaj mówiło, aws s3 syncjest najlepsze. Ale nikt nie zauważył potężną opcję: dryrun. Ta opcja pozwala zobaczyć, co będzie pobierane / przesyłane z / do s3 podczas korzystania sync. Jest to bardzo pomocne, gdy nie chcesz zastępować treści ani w lokalnym, ani w wiadrze s3. Oto jak się to stosuje: aws s3 sync <source> <destination> --dryrunkorzystałem z niego cały czas, zanim wypchnąłem nową zawartość do wiadra, aby nie przesyłać niepożądanych zmian.
Perimosh

Odpowiedzi:


1334

AWS CLI

Aby uzyskać więcej informacji, zobacz „ Wykaz poleceń interfejsu wiersza polecenia AWS ”.

AWS niedawno wydało swoje narzędzia wiersza poleceń, które działają podobnie do boto i można je zainstalować za pomocą

sudo easy_install awscli

lub

sudo pip install awscli

Po zainstalowaniu możesz po prostu uruchomić:

aws s3 sync s3://<source_bucket> <local_destination>

Na przykład:

aws s3 sync s3://mybucket .

pobierze wszystkie obiekty mybucketdo bieżącego katalogu.

I wyświetli:

download: s3://mybucket/test.txt to test.txt
download: s3://mybucket/test2.txt to test2.txt

Spowoduje to pobranie wszystkich plików za pomocą synchronizacji w jedną stronę. To będzie nie usuwać żadnych istniejących plików w bieżącym katalogu, chyba że podasz , i nie będzie się zmieniać lub usuwać żadnych plików na S3. --delete

Możesz także wykonać segment S3 do segmentu S3 lub lokalną synchronizację segmentu S3.

Sprawdź dokumentację i inne przykłady .

Podczas gdy powyższy przykład pokazuje, jak pobrać pełny segment, możesz również pobrać folder rekurencyjnie, wykonując

aws s3 cp s3://BUCKETNAME/PATH/TO/FOLDER LocalFolderName --recursive

Spowoduje to, że CLI pobierze rekursywnie wszystkie pliki i klucze folderów z PATH/TO/FOLDERkatalogu w BUCKETNAMEsegmencie.


223
Pierwsze uruchomienie aws configurei dodaj swoją access keyi secret access keyktórą można znaleźć tutaj .
Erwin Rooijakkers

12
Przejdź tutaj dla instalatora systemu Windows aws.amazon.com/cli . Odbiera identyfikator klucza dostępu ze zmiennej środowiskowej „AWS_ACCESS_KEY_ID” i twój tajny klucz z „AWS_SECRET_ACCESS_KEY”.
Matt Bond

7
Próbowałem s3cmdi Cyberduck, ale dla mnie awsclibył to zdecydowanie najszybszy sposób na pobranie ~ 70 000 plików z mojego wiadra.
Arjen

11
Pamiętaj, że chociaż pytanie dotyczy tylko pobierania, uważam, że to polecenie wykona dwukierunkową synchronizację między katalogiem a S3. Jeśli nie próbujesz niczego przesłać, upewnij się, że bieżący katalog jest pusty.
Jesse Crossen

15
@JesseCrossen To aws s3 syncpolecenie niczego nie załaduje , ale usunie pliki lokalnie, jeśli nie istnieją na S3. Zobacz dokumentację .
Flimm

168

Możesz użyć s3cmddo pobrania wiadra:

s3cmd --configure
s3cmd sync s3://bucketnamehere/folder /destination/folder

Istnieje inne narzędzie, którego można użyć, o nazwie rclone. To jest przykładowy kod w dokumentacji Rclone:

rclone sync /home/local/directory remote:bucket

5
To jest dość powolne. Zwłaszcza, jeśli spróbujesz użyć go stopniowo. Czy istnieje rozwiązanie wielowątkowe, które może nasycić przepustowość?
Peter Lada,

rozwiązania poniżej są lepsze, bardziej standardowe i otwarte na więcej platform
abc123

To nie działa, jeśli requester płaci wiadra (patrz arxiv.org/help/bulk_data_s3 ) :-(
Martin Thoma

jak mogę użyć twojego rozwiązania, jeśli muszę wykonać dopasowanie wzorca do pobrania? Moje pytanie: stackoverflow.com/questions/25086722/...
Shrikant Kakani

84

Użyłem kilku różnych metod, aby skopiować dane Amazon S3 na lokalną maszynę, w tym s3cmd, i zdecydowanie najłatwiejsza jest Cyberduck .

Wszystko, co musisz zrobić, to wpisać swoje dane uwierzytelniające Amazon i użyć prostego interfejsu do pobierania, przesyłania, synchronizowania dowolnych wiader, folderów lub plików.

Zrzut ekranu


Działa świetnie! Dostępne dla Windows i Mac (GPL).
craastad

Cyberduck ułatwia także anonimowe pobieranie plików publicznych - s3cmd wydaje się wymagać poświadczeń
chrishiestand

Działa również świetnie z Transmit.
Brak uwagi

Interfejs CLI dawał mi błąd, gdy próbowałem zapisać swój pojemnik, działało to idealnie!
Lazar Kukolj,

Och, to przyszło nieoczekiwanie. Użyłem cyberducka wcześniej do FTP, ale nigdy nie spodziewałem się, że będzie miał łączność S3. Dzięki za świetną wskazówkę!
jskierbi

51

Masz na to wiele opcji, ale najlepszą z nich jest użycie interfejsu AWS CLI.

Oto przewodnik:

  1. Pobierz i zainstaluj AWS CLI na swoim komputerze:

  2. Skonfiguruj interfejs AWS CLI:

    wprowadź opis zdjęcia tutaj

    Upewnij się, że wprowadziłeś poprawny klucz dostępu i tajne klucze, które otrzymałeś podczas tworzenia konta.

  3. Zsynchronizuj łyżkę S3, używając:

    aws s3 sync s3://yourbucket /local/path
    

    W powyższym poleceniu zastąp następujące pola:

    • yourbucket >> twoje wiadro S3, które chcesz pobrać.
    • /local/path >> ścieżka w systemie lokalnym, do którego chcesz pobrać wszystkie pliki.

Użyłem tego zamiast cyberduck, ponieważ cyberduck musi „przygotować” pliki, zanim zacznie się pobieranie. W przypadku dużej liczby plików, które wydawały się trwać wieki i nie mogłem znaleźć informacji o tym, co właściwie robi „przygotowanie”. CLI rozpoczął pobieranie natychmiast
Tashows

upewnij się, że masz ten s3://prefiks w nazwie wiadra !!! Ze aws s3 lsnie trzeba tego s3://prefiksu, ale trzeba do cpkomendy.
cjmling

43

Aby pobrać za pomocą interfejsu AWS S3 CLI:

aws s3 cp s3://WholeBucket LocalFolder --recursive
aws s3 cp s3://Bucket/Folder LocalFolder --recursive

Aby pobrać za pomocą kodu, użyj AWS SDK.

Aby pobrać za pomocą GUI, użyj Cyberduck.


1
Jak zignorować niektóre pliki lub foldery?
Nabin

1
@Nabin możesz użyć opcji --include i --exclude ze znakiem wieloznacznym, aby wykluczyć niektóre pliki lub foldery, w ten sposób: aws s3 cp s3://my-bucket-name ./local-folder --recursive --include "*" --exclude "excludeFolder/*" --exclude "includeFolder/excludeFile.txt"
DarkCenobyte

21

W systemie Windows przeglądarka S3 to najłatwiejszy sposób, jaki udało mi się znaleźć. To doskonałe oprogramowanie i jest bezpłatne do użytku niekomercyjnego.


3
Właśnie wypróbowałem opcję „Pobierz wszystkie pliki do ...” (co, jak zakładam, jest równoważne z opcją „pobierz całe wiadro s3”) i powiedziałem, że potrzebuję wersji Pro.
Jack Ukleja

2
Aktualizacja: Ale udało mi się pobrać cały folder w wiadrze, który był wystarczający na moje potrzeby ...
Jack Ukleja,

tak, darmowa wersja jest dość ograniczona, możesz wybrać wszystko i pobrać, ale ograniczona tylko do 2 jednoczesnych przelewów
Hayden Thring

Szukałem prostej wersji systemu Windows po otrzymaniu błędu obsługi python3 na Ubuntu 17.1 i s3cmd, działało to dobrze.
edencorbin

21

Jeśli korzystasz z programu Visual Studio, pobierz „ AWS Toolkit for Visual Studio ”.

Po zainstalowaniu przejdź do Visual Studio - AWS Explorer - S3 - Twój segment - Kliknij dwukrotnie

W oknie będziesz mógł wybrać wszystkie pliki. Kliknij prawym przyciskiem myszy i pobierz pliki.



12

Inną opcją, która może pomóc niektórym użytkownikom OS X, jest Transmit.

Jest to program FTP, który pozwala również łączyć się z plikami S3. I ma opcję zamontowania dowolnej pamięci FTP lub S3 jako folderu w Finderze, ale to tylko przez ograniczony czas.


12

Odpowiedź @Layke jest dobra, ale jeśli masz mnóstwo danych i nie chcesz czekać wiecznie, przeczytaj „ Konfiguracja AWS CLI S3 ”.

Następujące polecenia powiedzą AWS CLI, aby używał 1000 wątków do wykonywania zadań (każdy mały plik lub część wieloczęściowej kopii) i patrzył w przyszłość 100 000 zadań:

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

Po ich uruchomieniu możesz użyć prostej synckomendy:

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

lub

aws s3 sync s3://source-bucket/source-path c:\my\local\data\path

W systemie z 4 rdzeniami procesora i 16 GB pamięci RAM, w przypadkach takich jak moje (pliki 3-50 GB) prędkość synchronizacji / kopiowania wzrosła z około 9,5 Mb / s do 700 + MiB / s, co oznacza wzrost prędkości 70x w stosunku do domyślnej konfiguracji.


1
to jest prawdziwa odpowiedź. właśnie go przetestowałem, z ec2 przesyłał około 2,3 GB / min. bez równoczesnych opcji około 1 GB / min. ratownik.
Karsten

9

Zrobiłem trochę rozwoju dla S3 i nie znalazłem prostego sposobu na pobranie całego wiadra.

Jeśli chcesz kodować w Javie, biblioteka jets3t lib jest łatwa w użyciu, aby utworzyć listę wiader i iterować tę listę, aby je pobrać.

Najpierw pobierz zestaw publicznego klucza prywatnego z konsoli zarządzania AWS, aby móc utworzyć obiekt S3service:

AWSCredentials awsCredentials = new AWSCredentials(YourAccessKey, YourAwsSecretKey);
s3Service = new RestS3Service(awsCredentials);

Następnie uzyskaj tablicę obiektów segmentów:

S3Object[] objects = s3Service.listObjects(YourBucketNameString);

Na koniec iteruj po tej tablicy, aby pobierać obiekty pojedynczo za pomocą:

S3Object obj = s3Service.getObject(bucket, fileName);
            file = obj.getDataInputStream();

Umieszczam kod połączenia w bezpiecznym wątku singletonie. Niezbędna składnia try / catch została pominięta z oczywistych powodów.

Jeśli wolisz kodować w Pythonie, możesz zamiast tego użyć Boto.

Po rozejrzeniu się po BucketExplorer „ Pobieranie całego wiadra ” może zrobić, co chcesz.


O ile nie potrzebujesz rozwiązania Java, użyj powyższej odpowiedzi aws cli.
jeremyjjbrown

utwórz nowy folder i tak samo
Jisson

7

Interfejs API AWS sdk będzie najlepszą opcją do przesyłania całego folderu i repozytorium do s3 oraz pobierania całego segmentu s3 do lokalnego.

Do przesyłania całego folderu do s3

aws s3 sync . s3://BucketName

do pobrania całego segmentu s3 lokalnie

aws s3 sync s3://BucketName . 

możesz także przypisać ścieżkę Podobnie jak BucketName / Path dla konkretnego folderu w s3 do pobrania


6

Możesz to zrobić za pomocą https://github.com/minio/mc :

mc cp -r https://s3-us-west-2.amazonaws.com/bucketName/ localdir

mc obsługuje także sesje, wznawianie pobierania, przesyłanie i wiele innych. mcobsługuje systemy operacyjne Linux, OS X i Windows. Napisane w Golang i wydane na Apache w wersji 2.0.


5

Jeśli korzystasz z Firefoksa z S3Fox, to NIE pozwala ci wybrać wszystkich plików (wybierz najpierw Shift i Shift) i kliknij prawym przyciskiem myszy i pobierz wszystko ... Zrobiłem to z ponad 500 plikami bez problemu


Nie działa to w przypadku podfolderów w segmencie, nawet jeśli „pseudo foldery” zostały utworzone w konsoli AWS. (W chwili pisania tego komentarza)
Wesley

Potwierdzono, że nie działa, mam około 12 000 kluczy najwyższego poziomu = podfolderów), S3Fox nawet się nie uruchamia. Domagaj się również pozwolenia na wylistowanie wszystkich wiader!
Peter Lada,


3

Jeśli masz tam tylko pliki (bez podkatalogów), szybkim rozwiązaniem jest wybranie wszystkich plików ( clickpierwszego, Shift+clickostatniego) i naciśnięcie Enterlub right clicki wybranie Open. W przypadku większości plików danych zostanie to pobrane bezpośrednio na komputer.


3

Aby dodać kolejną opcję GUI, używamy funkcjonalności S3 WinSCP . Połączenie jest bardzo łatwe, wymaga tylko klucza dostępu i tajnego klucza w interfejsie użytkownika. Następnie możesz przeglądać i pobierać dowolne pliki z dowolnych dostępnych segmentów, w tym rekurencyjne pobieranie zagnieżdżonych folderów.

Ponieważ usunięcie oprogramowania za pomocą zabezpieczeń może być wyzwaniem, a WinSCP jest dość powszechny, może być bardzo korzystne, aby po prostu z niego korzystać, zamiast instalować bardziej wyspecjalizowane narzędzie.


1
  1. Użytkownik systemu Windows musi pobrać S3EXPLORER z tego łącza, które zawiera również instrukcje instalacji: - http://s3browser.com/download.aspx

  2. Następnie podaj poświadczenia AWS, takie jak klucz tajny, klucz dostępu i region do s3explorer, ten link zawiera instrukcję konfiguracji dla s3explorer: Kopiuj wklej link w przeglądarce: s3browser.com/s3browser-first-run.aspx

  3. Teraz wszystkie wiadra s3 będą widoczne na lewym panelu s3explorer.

  4. Po prostu wybierz wiadro i kliknij menu Wiadra w lewym górnym rogu, a następnie wybierz z menu opcję Pobierz wszystkie pliki do. Poniżej znajduje się zrzut ekranu dla tego samego:

Ekran wyboru łyżki

  1. Następnie przejrzyj folder, aby pobrać wiadro z określonego miejsca

  2. Kliknij OK, a pobieranie się rozpocznie.


1

aws sync to idealne rozwiązanie. Nie działa dwukierunkowo. Jest to jedna droga od źródła do miejsca docelowego. Ponadto, jeśli masz wiele elementów w wiadrze, dobrym pomysłem będzie utworzenie najpierw punktu końcowego s3, aby pobieranie odbywało się szybciej (ponieważ pobieranie nie odbywa się przez Internet, ale przez intranet) i bez opłat


1

Oto kilka rzeczy, aby pobrać wszystkie wiadra, wymienić je, wymienić ich zawartość.

    //connection string
    private static void dBConnection() {
    app.setAwsCredentials(CONST.getAccessKey(), CONST.getSecretKey());
    conn = new AmazonS3Client(app.getAwsCredentials());
    app.setListOfBuckets(conn.listBuckets());
    System.out.println(CONST.getConnectionSuccessfullMessage());
    }

    private static void downloadBucket() {

    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            app.setBucketKey(objectSummary.getKey());
            app.setBucketName(objectSummary.getBucketName());
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                //DOWNLOAD
                try 
                {
                    s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
                    s3Client.getObject(
                            new GetObjectRequest(app.getBucketName(),app.getBucketKey()),
                            new File(app.getDownloadedBucket())
                            );
                } catch (IOException e) {
                    e.printStackTrace();
                }

                do
                {
                     if(app.getBackUpExist() == true){
                        System.out.println("Converting back up file");
                        app.setCurrentPacsId(objectSummary.getKey());
                        passIn = app.getDataBaseFile();
                        CONVERT= new DataConversion(passIn);
                        System.out.println(CONST.getFileDownloadedMessage());
                    }
                }
                while(app.getObjectExist()==true);

                if(app.getObjectExist()== false)
                {
                    app.setNoObjectFound(true);
                }
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
}

/ ---------------------------- Metody rozszerzenia ------------------- ------------------ /

//Unzip bucket after download 
public static void unzipBucket() throws IOException {
    unzip = new UnZipBuckets();
    unzip.unZipIt(app.getDownloadedBucket());
    System.out.println(CONST.getFileUnzippedMessage());
}

//list all S3 buckets
public static void listAllBuckets(){
    for (Bucket bucket : app.getListOfBuckets()) {
        String bucketName = bucket.getName();
        System.out.println(bucketName + "\t" + StringUtils.fromDate(bucket.getCreationDate()));
    }
}

//Get the contents from the auto back up bucket
public static void listAllBucketContents(){     
    do {
        for (S3ObjectSummary objectSummary : app.getS3Object().getObjectSummaries()) {
            if(objectSummary.getKey().contains(CONST.getDesiredKey())){
                System.out.println(objectSummary.getKey() + "\t" + objectSummary.getSize() + "\t" + StringUtils.fromDate(objectSummary.getLastModified()));
                app.setBackUpCount(app.getBackUpCount() + 1);   
            }
        }
        app.setS3Object(conn.listNextBatchOfObjects(app.getS3Object()));
    } 
    while (app.getS3Object().isTruncated());
    System.out.println("There are a total of : " + app.getBackUpCount() + " buckets.");
}

}


1

Możesz to po prostu uzyskać za pomocą polecenia s3cmd :

s3cmd get --recursive --continue s3://test-bucket local-directory/

1

Jak wyjaśnił Neel Bhaat na tym blogu , istnieje wiele różnych narzędzi, które można wykorzystać w tym celu. Niektóre są dostarczane z AWS, a większość z nich to narzędzia innych firm. Wszystkie te narzędzia wymagają zapisania klucza i hasła do konta AWS w samym narzędziu. Zachowaj ostrożność podczas korzystania z narzędzi innych firm, ponieważ dane uwierzytelniające, które zaoszczędzisz, mogą cię kosztować, całą twoją wartość i spowodować śmierć.

Dlatego zawsze zalecam używanie do tego celu interfejsu AWS CLI . Możesz po prostu zainstalować to z tego linku . Następnie uruchom następujące polecenie i zapisz swój klucz, tajne wartości w interfejsie AWS CLI.

aws configure

I użyj następującego polecenia, aby zsynchronizować łyżkę AWS S3 z komputerem lokalnym. (Komputer lokalny powinien mieć zainstalowany interfejs AWS CLI)

aws s3 sync <source> <destination>

Przykłady:

1) W przypadku AWS S3 do pamięci lokalnej

aws s3 sync <S3Uri> <LocalPath>

2) Z lokalnego magazynu do AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) Z łyżki AWS s3 do innej łyżki

aws s3 sync <S3Uri> <S3Uri> 

Na przykład 3, czy mogę wskazać folder segmentu do innego folderu segmentu? Właściwie chcę zsynchronizować folder segmentu z innym folderem segmentu.
lukai

@lukai tak. Oto, co podałem w przykładzie 3. Musisz po prostu mieć identyfikatory URI segmentu s3 źródła i miejsca docelowego
Keet Sugathadasa

1

Jeśli chcesz tylko pobrać segment z AWS, najpierw zainstaluj interfejs AWS CLI na swoim komputerze. W terminalu zmień katalog, do którego chcesz pobrać pliki i uruchom to polecenie.

aws s3 sync s3://bucket-name .

Jeśli chcesz również zsynchronizować katalogi lokalne i katalogi s3 (w przypadku dodania niektórych plików do folderu lokalnego), uruchom następującą komendę:

aws s3 sync . s3://bucket-name


1

Za pomocą tego polecenia cli AWS można pobrać całą zawartość segmentu S3 do folderu lokalnego

aws s3 sync s3://your-bucket-name "Local Folder Path"

Jeśli widzisz taki błąd

fatal error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

--no-Verify-ssl (boolean)

Domyślnie interfejs AWS CLI używa protokołu SSL podczas komunikacji z usługami AWS. Dla każdego połączenia SSL interfejs AWS CLI zweryfikuje certyfikaty SSL. Ta opcja zastępuje domyślne zachowanie weryfikacji certyfikatów SSL. odniesienie

Użyj tego znacznika z poleceniem --no-Verify-ssl

aws s3 sync s3://your-bucket-name "Local Folder Path" --no-verify-ssl

Korzystanie z s3 syncjest już wielokrotnie omówione powyżej. + Sugerowanie użycia --no-verify-sslbez wyjaśnienia konsekwencji dla bezpieczeństwa jest przestępstwem.
Martin Prikryl

Dziękujemy za informację o bezpieczeństwie. Napotkałem
Dimuthu

1

Jeśli segment jest dość duży, wywoływane jest polecenie, s4cmdktóre wykonuje połączenia równoległe i skraca czas pobierania:

Aby zainstalować go na Debian Like

apt install s4cmd

Jeśli masz pip:

pip install s4cmd

Odczyta ~/.s3cfgplik, jeśli jest obecny (jeśli nie jest zainstalowany s3cmdi uruchomiony s3cmd --configure) lub możesz określić --access-key=ACCESS_KEY --secret-key=SECRET_KEYw poleceniu.

Cli jest podobny do s3cmd. W twoim przypadku synczaleca się opcję a, ponieważ możesz anulować pobieranie i rozpocząć je ponownie bez konieczności ponownego pobierania plików.

s4cmd [--access-key=ACCESS_KEY --secret-key=SECRET_KEY] sync s3://<your-bucket> /some/local/dir

Zachowaj ostrożność, jeśli pobierzesz dużo danych (> 1 TB), może to wpłynąć na rachunek, najpierw obliczyć, który będzie kosztem


0

Jak powiedział @layke, najlepszą praktyką jest pobieranie pliku z S3 cli, jest to bezpieczne. Ale w niektórych przypadkach ludzie muszą użyć wget, aby pobrać plik, a oto rozwiązanie

aws s3 presign s3://<your_bucket_name/>

Spowoduje to otrzymanie tymczasowego publicznego adresu URL, którego możesz użyć do pobrania treści z S3 przy użyciu presign_url, w twoim przypadku przy użyciu wget lub innego klienta pobierania.


0

Wypróbuj to polecenie:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

Na przykład jeśli nazwa wiadra to myBucketi katalog lokalny to c:\local:

aws s3 sync s3://myBucket c:\local

Aby uzyskać więcej informacji o awscli, sprawdź tę instalację aws cli

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.