it-swarm.com.de

Einen ganzen S3-Bucket herunterladen?

Mir ist aufgefallen, dass es anscheinend keine Möglichkeit gibt, einen vollständigen S3-Bucket von der AWS Management Console herunterzuladen.

Gibt es eine einfache Möglichkeit, alles in einen meiner Eimer zu packen? Ich habe darüber nachgedacht, den Stammordner öffentlich zu machen, ihn mit wget abzurufen und ihn dann wieder privat zu machen, aber ich weiß nicht, ob es einen einfacheren Weg gibt.

581
rugbert

AWS CLI

Dokumentation für AWS CLI

AWS hat kürzlich seine Befehlszeilentools veröffentlicht. Dies funktioniert ähnlich wie boto und kann mit Sudo easy_install awscli oder Sudo pip install awscli installiert werden.

Einmal installiert, können Sie dann einfach ausführen:

Befehl :

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

Zum Beispiel,

aws s3 sync s3://mybucket .

lädt alle Objekte in mybucket in das aktuelle Verzeichnis herunter.

Ausgabe :

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

Dadurch werden alle Ihre Dateien heruntergeladen (One-Way-Synchronisierung). Es werden keine vorhandenen Dateien in Ihrem aktuellen Verzeichnis gelöscht (es sei denn, Sie --delete angeben ), und es wird nicht gelöscht Ändern oder Löschen von Dateien in S3.

Sie können die S3-Bucket-zu-S3-Bucket- oder die lokale S3-Bucket-Synchronisation durchführen.

Schauen Sie sich die Dokumentation und andere Beispiele an:

http://docs.aws.Amazon.com/cli/latest/reference/s3/sync.html

Herunterladen eines Ordners aus einem Eimer

Während im obigen Beispiel ein vollständiger Bucket heruntergeladen wird, können Sie einen Ordner durch Ausführen von auch rekursiv herunterladen

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

Dadurch wird die CLI angewiesen, alle Dateien und Ordnerschlüssel im Verzeichnis PATH/TO/FOLDER im Bucket BUCKETNAME rekursiv herunterzuladen.

1108
Layke

Sie können s3cmd verwenden, um Ihren Bucket herunterzuladen.

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

Update

Es gibt ein anderes Tool, das Sie verwenden können: Rclone . Unten finden Sie ein Codebeispiel in der Rclone-Dokumentation.

rclone sync /home/local/directory remote:bucket
159
Phil M.

Ich habe ein paar verschiedene Methoden verwendet, um Amazon S3-Daten auf einen lokalen Computer zu kopieren, einschließlich s3cmd, und die mit Abstand einfachste ist Cyberduck . Alles, was Sie tun müssen, ist, Ihre Amazon-Anmeldeinformationen einzugeben und über die einfache Benutzeroberfläche Ihre Eimer/Ordner/Dateien herunterzuladen/hochzuladen/zu synchronisieren.

Screenshot

75
wedocando

Zum Herunterladen mit AWS S3 CLI:

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

Verwenden Sie zum Herunterladen mit Code AWS SDK .

Verwenden Sie zum Herunterladen über die Benutzeroberfläche Cyberduck .

Ich hoffe es hilft.. :)

39
Sarat Chandra

Sie haben grundsätzlich viele Möglichkeiten, dies zu tun, aber die beste ist die Verwendung von AWS CLI

Hier ist eine exemplarische Vorgehensweise

  • Schritt 1

Laden Sie AWS CLI herunter und installieren Sie es auf Ihrem Computer

Installieren Sie die AWS-CLI mit dem MSI-Installationsprogramm (Windows)

Installieren Sie die AWS-CLI mit dem mitgelieferten Installationsprogramm (Linux, OS X oder Unix)

  • Schritt 2

Konfigurieren Sie AWS CLI

enter image description here

Stellen Sie sicher, dass Sie einen gültigen Zugriffsschlüssel und geheimen Schlüssel eingeben, den Sie erhalten haben, als Sie haben das Konto erstellt

  • Schritt 3

Synchronisieren Sie den S3-Bucket mit dem folgenden Befehl

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

Ersetzen Sie den obigen Befehl durch die folgenden Daten

yourbucket >> dein S3-Eimer, den du herunterladen möchtest

/local/path >> Pfad in Ihrem lokalen System, in den Sie alle Dateien herunterladen möchten

Hoffe das hilft!

39
Darshan Lila

S3 Browser ist der einfachste Weg, den ich gefunden habe. Es ist eine exzellente Software ... und es ist kostenlos für den nicht kommerziellen Gebrauch. Nur für Windows.

http://s3browser.com/

19
dworrad

Wenn Sie Visual Studio verwenden, laden Sie http://aws.Amazon.com/visualstudio/ herunter

Wechseln Sie nach der Installation zu Visual Studio - AWS Explorer - S3 - Ihr Bucket - Doppelklicken

Im Fenster können Sie alle Dateien auswählen. Klicken Sie mit der rechten Maustaste und laden Sie die Dateien herunter.

18
Ives.me

Eine andere Option, die einigen osx-Benutzern helfen könnte, ist Senden. Es ist ein FTP-Programm, mit dem Sie auch eine Verbindung zu Ihren S3-Dateien herstellen können. Und es gibt die Option Mounten eines beliebigen FTP- oder S3-Speichers als Ordner im Finder. Aber es ist nur für eine begrenzte Zeit.

10
Diederik

Ich habe ein bisschen an der Entwicklung für s3 gearbeitet und ich habe keine einfache Möglichkeit gefunden, einen ganzen Bucket herunterzuladen. Wenn Sie in Java codieren möchten, können Sie mit der jets3t-Bibliothek einfach eine Liste von Buckets erstellen und diese Liste durchlaufen, um sie herunterzuladen.

http://jets3t.s3.amazonaws.com/downloads.html

holen Sie sich zuerst einen öffentlichen privaten Schlüsselsatz von der AWS-Verwaltungskonsole, damit Sie ein S3service-Objekt erstellen können.

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

dann holen Sie sich ein Array Ihrer Eimer-Objekte ...

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

schließlich iterieren Sie über dieses Array, um die Objekte einzeln mit diesem Code herunterzuladen ...

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

Ich habe den Verbindungscode in einen threadsicheren Singleton geschrieben. Die notwendige Try/Catch-Syntax wurde aus offensichtlichen Gründen weggelassen.

Wenn Sie lieber Python eingeben möchten, können Sie stattdessen Boto verwenden.

PS nach dem Umschauen von BucketExplorer mache ich was du willst. https://forums.aws.Amazon.com/thread.jspa?messageID=248429

8
jeremyjjbrown

Verwenden Sie diesen Befehl mit der AWS CLI :

aws s3 cp s3://bucketname. --recursive
7
ashack

Answer by @Layke ist gut, aber wenn Sie eine Menge Daten haben und nicht ewig warten möchten, sollten Sie diese Dokumentation unter So erhalten Sie den AWS S3 CLI-Synchronisierungsbefehl zum Synchronisieren von Buckets mit massive Parallelisierung . Mit den folgenden Befehlen wird die AWS-CLI angewiesen, 1.000 Threads zum Ausführen von Jobs (jeweils eine kleine Datei oder ein Teil einer mehrteiligen Kopie) zu verwenden und 100.000 Jobs vorauszusehen:

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

Nachdem Sie diese ausgeführt haben, können Sie den einfachen Synchronisierungsbefehl wie folgt verwenden:

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

oder

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

Auf einem System mit 4 CPU-Kernen und 16 GB RAM stieg die Synchronisations-/Kopiergeschwindigkeit in Fällen wie meinen (3-50 GB Dateien) von etwa 9,5 MB/s auf 700 + MiB/s, was einer 70-fachen Geschwindigkeitssteigerung gegenüber der Standardkonfiguration entspricht.

7
James

Wenn Sie Firefox mit S3Fox verwenden, können Sie damit alle Dateien auswählen (bei gedrückter Umschalttaste zuerst und zuletzt auswählen) und mit der rechten Maustaste auf alle Dateien klicken und diese herunterladen ... Ich habe es mit über 500 Dateien ohne Problem gemacht

4
jpwynn

Sie können dies mit https://github.com/minio/mc tun:

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

mc unterstützt auch Sessions, wiederkehrende Downloads, Uploads und vieles mehr. mc unterstützt Linux-, OS X- und Windows-Betriebssysteme. Geschrieben in Golang und veröffentlicht unter Apache Version 2.0.

4

Die AWS SDK-API ist nur die beste Option zum Hochladen des gesamten Ordners und Repos auf s3 und zum Herunterladen des gesamten Eimers von s3 auf lokal.

Zum Hochladen des gesamten Ordners auf s3

aws s3 sync . s3://BucketName

zum download ganze s3 bucket lokal

aws s3 sync s3://BucketName . 

sie können auch einen Pfad wie BucketName/Path für einen bestimmten Ordner in s3 zum Herunterladen zuweisen

3
Harsh Manvar

Wenn Sie nur Dateien dort haben (keine Unterverzeichnisse), besteht eine schnelle Lösung darin, alle Dateien auszuwählen (click am ersten, Shift+click am letzten) und Enter oder right click zu drücken und Open auszuwählen. . Die meisten Datendateien werden dabei direkt auf Ihren Computer heruntergeladen.

3

Um eine weitere GUI-Option hinzuzufügen, verwenden wir WinSCPs S3-Funktionalität . Die Verbindung ist sehr einfach und erfordert lediglich Ihren Zugangsschlüssel und Ihren geheimen Schlüssel in der Benutzeroberfläche. Sie können dann alle gewünschten Dateien aus allen zugänglichen Buckets durchsuchen und herunterladen, einschließlich rekursiver Downloads verschachtelter Ordner.

Da es eine Herausforderung sein kann, neue Software durch Sicherheit zu löschen, und WinSCP weit verbreitet ist, kann es sehr nützlich sein, sie nur zu verwenden, anstatt zu versuchen, ein spezialisierteres Dienstprogramm zu installieren.

3
bsplosion

Unter Windows ist Cloudberry Explorer für S3 mein bevorzugtes GUI-Tool. http://www.cloudberrylab.com/free-Amazon-s3-Explorer-cloudfront-IAM.aspx . Hat eine ziemlich polierte Datei-Explorer, FTP-ähnliche Oberfläche.

3
fundead

Sie können es einfach mit s3cmd Befehl bekommen:

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

aws sync ist die perfekte lösung. Es geht nicht in beide Richtungen. Es geht in eine Richtung von der Quelle zum Ziel. Wenn Sie viele Elemente im Bucket haben, empfiehlt es sich, zuerst einen s3-Endpunkt zu erstellen, damit der Download schneller (da der Download nicht über das Internet, sondern über das Intranet erfolgt) und ohne Gebühren erfolgt

1
Deepak

Wenn Sie den Bucket nur von AWS herunterladen möchten, installieren Sie zuerst die AWS-CLI auf Ihrem Computer. Wechseln Sie im Terminal in das Verzeichnis, in das Sie die Dateien herunterladen möchten, und führen Sie diesen Befehl aus.

aws s3 sync s3://bucket-name .

Wenn Sie auch das lokale Verzeichnis und das S3-Verzeichnis synchronisieren möchten (falls Sie einige Dateien im lokalen Ordner hinzugefügt haben), führen Sie diesen Befehl aus:

aws s3 sync . s3://bucket-name
1
Muzammil

Mein Kommentar fügt keine neue Lösung hinzu. Wie viele Leute hier sagten, ist aws s3 sync das Beste. Aber niemand wies auf eine mächtige Option hin: dryrun. Mit dieser Option können Sie sehen, was von/auf s3 heruntergeladen/hochgeladen werden würde, wenn Sie sync verwenden. Dies ist sehr hilfreich, wenn Sie keine Inhalte in Ihrem lokalen oder in einem S3-Bucket überschreiben möchten. So wird verwendet:

aws s3 sync <source> <destination> --dryrun

Ich habe es die ganze Zeit benutzt, bevor ich neue Inhalte in einen Bucket gepusht habe, um keine unerwünschten Änderungen hochzuladen.

1
Perimosh

Hier sind einige Dinge, um alle Eimer herunterzuladen, sie aufzulisten und ihren Inhalt aufzulisten.

    //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());
}

/ ---------------------------- Erweiterungsmethoden --------------- ---------------------- /

//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
John Hanewich
  1. Windows-Benutzer müssen S3Explorer von diesem Link herunterladen, der auch Installationsanweisungen enthält: - http://s3browser.com/download.aspx

  2. Geben Sie anschließend AWS-Anmeldeinformationen wie Secretkey, Accesskey und Region für den s3Explorer ein. Dieser Link enthält Konfigurationsanweisungen für den s3Explorer: Kopieren Einfügen Link in brower: s3browser.com/s3browser-first-run.aspx

  3. Jetzt sind alle S3-Eimer auf der linken Seite des S3-Explorers sichtbar.

  4. Wählen Sie einfach den Bucket aus und klicken Sie oben links auf das Menü Buckets. Wählen Sie dann im Menü die Option Download all files to. Unten ist der Screenshot für das gleiche:

Bucket-Auswahlbildschirm

  1. Durchsuchen Sie anschließend einen Ordner, um den Bucket an einer bestimmten Stelle herunterzuladen

  2. Klicken Sie auf OK und Ihr Download würde beginnen.

1
Patrick R

Wie Neel Bhaat in diesem Blog erklärt hat, gibt es viele verschiedene Werkzeuge, die für diesen Zweck verwendet werden können. Einige werden von AWS bereitgestellt, bei den meisten handelt es sich um Tools von Drittanbietern. Für all diese Tools müssen Sie Ihren AWS-Kontoschlüssel und das zugehörige Geheimnis im Tool selbst speichern. Seien Sie sehr vorsichtig, wenn Sie Tools von Drittanbietern verwenden, da die von Ihnen gespeicherten Anmeldeinformationen Sie und Ihren gesamten Wert kosten und Sie tot umfallen können.

Daher empfehle ich immer die Verwendung von AWS CLI für diesen Zweck. Sie können dies einfach von diesen Link installieren. Führen Sie als Nächstes den folgenden Befehl aus und speichern Sie Ihre geheimen Schlüsselwerte in AWS CLI.

aws configure

Verwenden Sie den folgenden Befehl, um Ihren AWS S3-Bucket mit Ihrem lokalen Computer zu synchronisieren. (Auf dem lokalen Computer sollte AWS CLI installiert sein.)

aws s3 sync <source> <destination>

Beispiele:

1) Für AWS S3 zum lokalen Speicher

aws s3 sync <S3Uri> <LocalPath>

2) Vom lokalen Speicher zu AWS S3

aws s3 sync <LocalPath> <S3Uri>

3) Vom AWS s3-Bucket zum nächsten Bucket

aws s3 sync <S3Uri> <S3Uri> 
1

Versuchen Sie diesen Befehl:

aws s3 sync yourBucketnameDirectory yourLocalDirectory

Wenn Ihr Bucket-Name beispielsweise myBucket und das lokale Verzeichnis c:\local lautet, dann gilt Folgendes:

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

Weitere Informationen zu awscli finden Sie hier aws cli installation

0
PKP

Wenn der Bucket ziemlich groß ist, gibt es einen Befehl namens s4cmd, der parallele Verbindungen herstellt und die Download-Zeit verbessert:

Um es auf Debian wie zu installieren

apt install s4cmd

Wenn Sie pip haben:

pip install s4cmd

Es liest die Datei ~/.s3cfg, falls vorhanden (falls nicht, installieren Sie s3cmd und führen Sie s3cmd --configure aus), oder Sie können --access-key=ACCESS_KEY --secret-key=SECRET_KEY für den Befehl angeben.

Das CLI ähnelt s3cmd. In Ihrem Fall wird ein sync empfohlen, da Sie den Download abbrechen und erneut starten können, ohne die Dateien erneut herunterladen zu müssen.

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

Seien Sie vorsichtig, wenn Sie viele Daten herunterladen (> 1 TB). Dies kann sich auf Ihre Rechnung auswirken. Berechnen Sie zuerst, welche Kosten anfallen.

0
bartomeu

Wie @layke sagte, ist es die beste Methode, die Datei vom S3-Client herunterzuladen. Es ist sicher und sicher. In einigen Fällen müssen die Benutzer jedoch wget verwenden, um die Datei herunterzuladen, und hier ist die Lösung

aws s3 presign s3://<your_bucket_name/>

Mit dieser Option erhalten Sie eine temporäre öffentliche URL, über die Sie Inhalte von S3 mit der Option presign_url herunterladen können, in Ihrem Fall mit wget oder einem anderen Download-Client.

0
Balaji JB

Mit diesem AWS cli-Befehl können Sie den gesamten S3-Bucket-Inhalt in den lokalen Ordner herunterladen

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

Wenn Sie einen solchen Fehler sehen

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

--no-verify-ssl (Boolean)

Standardmäßig verwendet die AWS-CLI SSL für die Kommunikation mit AWS-Diensten. Für jede SSL-Verbindung überprüft die AWS CLI SSL-Zertifikate. Diese Option überschreibt das Standardverhalten beim Überprüfen von SSL-Zertifikaten. Referenz

Verwenden Sie diesen Tag mit dem Befehl - no-verify-ssl

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

AWS CLI ist die beste Option, um einen gesamten S3-Bucket lokal herunterzuladen.

  1. Installieren AWS CLI.

  2. Configure AWS CLI für die Verwendung der Standardsicherheitsanmeldeinformationen und der Standard-AWS-Region.

  3. Verwenden Sie den Befehl, um den gesamten S3-Bucket herunterzuladen

    aws s3 sync s3: // yourbucketname localpath

Referenz zur Verwendung von AWS-CLI für verschiedene AWS-Dienste: https://docs.aws.Amazon.com/cli/latest/reference/

0
singh30