it-swarm.com.de

Wie durchsuchen Sie einen Amazon s3-Bucket?

Ich habe einen Eimer mit Tausenden von Dateien darin. Wie kann ich den Eimer suchen? Gibt es ein Werkzeug, das Sie empfehlen können? 

118
vinhboy

S3 verfügt nicht über ein natives "search this bucket", da der tatsächliche Inhalt unbekannt ist. Da S3 auf Schlüssel-/Wertbasis basiert, gibt es keine systemeigene Möglichkeit, auf viele Knoten gleichzeitig zuzugreifen, und zwar in mehr traditionellen Datenspeichern, die einen (SELECT * FROM ... WHERE ...) (in a SQL-Modell).

Sie müssen ListBucket ausführen, um eine Liste der Objekte im Bucket zu erhalten, und dann jedes Element durchlaufen, das eine benutzerdefinierte Operation ausführt, die Sie implementieren.

22
Cody Caughlan

Nur eine Anmerkung, die hier hinzugefügt werden muss: Es ist jetzt drei Jahre später, aber dieser Beitrag steht bei Google ganz oben, wenn Sie "Wie man einen S3-Bucket durchsucht" eingibt. 

Vielleicht suchen Sie nach etwas komplexerem, aber wenn Sie hier gelandet sind und herausfinden möchten, wie Sie ein Objekt (eine Datei) anhand des Titels einfach finden können, ist es verrückt einfach:

öffnen Sie den Bucket, wählen Sie rechts "none" aus und geben Sie den Dateinamen ein. 

http://docs.aws.Amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html

227
rhonda bradley

Hier finden Sie eine kurze und unschöne Möglichkeit, Dateinamen mit der AWS CLI zu suchen:

aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-
63
Abe Voelker

Es gibt (mindestens) zwei verschiedene Anwendungsfälle, die als "Bucket durchsuchen" beschrieben werden könnten:

  1. Suche nach etwas inside jedes Objekt, das im Bucket gespeichert ist; Dies setzt ein allgemeines Format für alle Objekte in diesem Bucket (z. B. Textdateien) usw. voraus. Für so etwas müssen Sie das tun, was Cody Caughlan gerade beantwortet hat. Die AWS S3-Dokumente enthalten Beispielcode, der zeigt, wie dies mit dem AWS SDK für Java durchgeführt wird: Auflisten von Schlüsseln mithilfe des AWS SDK für Java (dort finden Sie auch PHP und C # -Beispiele).

  2. Listenelement Suche nach etwas in dem Objekt keys, das in diesem Bucket enthalten ist; S3 do unterstützt partiell in der Form, dass exakte Präfix-Übereinstimmungen zugelassen werden und Übereinstimmungen nach einem Trennzeichen reduziert werden. Dies wird im AWS S3-Entwicklerhandbuch näher erläutert. Dies ermöglicht beispielsweise die Implementierung von "Ordnern" durch Verwendung von Objektschlüsseln wie 

    ordner/Unterordner/Datei.txt
    Wenn Sie diese Konvention befolgen, zeigen Ihnen die meisten S3-GUIs (z. B. die AWS Console) eine Ordneransicht Ihres Buckets. 

21

Es gibt mehrere Optionen, wobei es sich nicht um eine einfache One-Text-Volltextlösung handelt:

  1. Suche nach Schlüsselnamen : Suchen nach Schlüsseln, die mit einem String beginnen - Wenn Sie die Schlüsselnamen sorgfältig entwerfen, haben Sie möglicherweise eine ziemlich schnelle Lösung.

  2. Suche nach Metadaten, die an Schlüsseln angehängt sind : Wenn Sie eine Datei an AWS S3 senden, können Sie den Inhalt bearbeiten, einige Metainformationen extrahieren und diese Metainformationen in Form benutzerdefinierter Header in den Schlüssel einfügen. Auf diese Weise können Sie Schlüsselnamen und Header abrufen, ohne den gesamten Inhalt abrufen zu müssen. Die Suche muss sequentiell erfolgen, es gibt keine "SQL-ähnliche" Suchoption dafür. Bei großen Dateien kann dies viel Netzwerkverkehr und Zeit sparen.

  3. Metadaten in SimpleDB speichern : als vorherigen Punkt, jedoch mit Speichern der Metadaten in SimpleDB. Hier haben Sie SQL-Select-Anweisungen. Bei großen Datensätzen können SimpleDB-Grenzwerte erreicht werden, die überwunden werden können (Partitionsmetadaten über mehrere SimpleDB-Domänen hinweg). Wenn Sie jedoch sehr weit gehen, müssen Sie möglicherweise einen anderen Metadatentyp verwenden.

  4. Sequentielle Volltextsuche des Inhalts - Alle Schlüssel werden einzeln verarbeitet. Sehr langsam, wenn Sie zu viele Schlüssel bearbeiten müssen.

Wir speichern 1440 Versionen einer Datei pro Tag (eine pro Minute) für einige Jahre, wobei der versionierte Bucket verwendet wird. Dies ist problemlos möglich. Aber um ältere Versionen zu bekommen, braucht es Zeit, da man von Version zu Version gehen muss. Irgendwann verwende ich einen einfachen CSV-Index mit Datensätzen, der die Veröffentlichungszeit und die Versions-ID angibt. Dadurch konnte ich relativ schnell zur älteren Version springen.

Wie Sie sehen, ist AWS S3 kein eigenständiger Server für Volltextsuchen, sondern ein einfacher Speicherservice.

18
Jan Vlcinsky

AWS hat einen neuen Service zur Abfrage von S3-Buckets mit SQL veröffentlicht: Amazon Athena https://aws.Amazon.com/athena/

15
hellomichibye

Suche nach Präfix in der S3-Konsole

direkt in der AWS Console-Bucket-Ansicht.

 enter image description here

Gewünschte Dateien mit s3-dist-cp kopieren

Wenn Sie über Tausende oder Millionen von Dateien verfügen, können Sie die gewünschten Dateien auf andere Weise erhalten, indem Sie sie mit Distributed Copy an einen anderen Speicherort kopieren. Sie führen dies auf EMR in einem Hadoop-Job aus. Das Coole an AWS ist, dass sie ihre eigene S3-Version s3-dist-cp anbieten. Sie können gewünschte Dateien mithilfe eines regulären Ausdrucks im Feld groupBy gruppieren. Sie können dies beispielsweise in einem benutzerdefinierten Schritt in EMR verwenden

[
    {
        "ActionOnFailure": "CONTINUE",
        "Args": [
            "s3-dist-cp",
            "--s3Endpoint=s3.amazonaws.com",
            "--src=s3://mybucket/",
            "--dest=s3://mytarget-bucket/",
            "--groupBy=MY_PATTERN",
            "--targetSize=1000"
        ],
        "Jar": "command-runner.jar",
        "Name": "S3DistCp Step Aggregate Results",
        "Type": "CUSTOM_JAR"
    }
]
4
H6.

In Anbetracht der Tatsache, dass Sie sich in AWS befinden ... würde ich meinen, Sie möchten ihre CloudSearch-Tools verwenden. Fügen Sie die Daten, die Sie suchen möchten, in ihren Dienst ein ... weisen Sie auf die S3-Tasten.

http://aws.Amazon.com/cloudsearch/

4
Andrew Siemer

Eine andere Option besteht darin, den S3-Bucket auf Ihrem Webserver zu spiegeln und lokal zu navigieren. Der Trick ist, dass die lokalen Dateien leer sind und nur als Skelett verwendet werden. Alternativ können die lokalen Dateien nützliche Metadaten enthalten, die Sie normalerweise von S3 benötigen (z. B. Dateigröße, Mimetyp, Autor, Zeitstempel, uuid). Wenn Sie eine URL zum Herunterladen der Datei angeben, suchen Sie lokal und geben Sie einen Link zur S3-Adresse an.

Das Durchsuchen lokaler Dateien ist einfach und dieser Ansatz für die S3-Verwaltung ist sprachunabhängig. Durch das Durchlaufen lokaler Dateien wird auch das Verwalten und Abfragen einer Datenbank von Dateien vermieden oder Verzögerungen beim Erstellen einer Reihe von Remote-API-Aufrufen zur Authentifizierung und zum Abrufen des Bucket-Inhalts.

Sie könnten Benutzern erlauben, Dateien direkt über FTP oder HTTP auf Ihren Server hochzuladen und dann zu nicht normalen Zeiten einen Stapel neuer und aktualisierter Dateien an Amazon zu übertragen, indem Sie die Verzeichnisse für Dateien beliebiger Größe einfach neu rekursieren. Ersetzen Sie nach Abschluss der Dateiübertragung an Amazon die Web-Server-Datei durch eine leere Datei mit demselben Namen. Wenn eine lokale Datei über eine Dateigröße verfügt, können Sie sie direkt bereitstellen, da sie auf die Stapelübertragung wartet.

1
Dylan Valade

Wenn Sie unter Windows sind und keine Zeit haben, eine Alternative von Nice grep zu finden, wäre dies ein schneller und schmutziger Weg:

aws s3 ls s3://your-bucket/folder/ --recursive > myfile.txt

und dann eine Schnellsuche in myfile.txt durchführen

Das "Ordner" -Bit ist optional.

P.S. Wenn Sie AWS CLI nicht installiert haben - hier ist ein One-Liner mit Chocolatey Package Manager

choco install awscli

P.P.S. Wenn Sie den Chocolatey-Paketmanager nicht haben, holen Sie ihn! Ihr Leben unter Windows wird 10x besser. (Ich bin in keiner Weise mit Chocolatey verbunden, aber hey, es ist wirklich ein Muss).

1
Alex

Versuchen Sie diesen Befehl:

aws s3api list-objects --bucket your-bucket --prefix sub-dir-path --output text --query 'Contents[].{Key: Key}'

Dann können Sie dies in ein grep -Paket leiten, damit bestimmte Dateitypen mit ihnen beliebige Aktionen ausführen können.

1
Robert Evans

Ich tat etwas wie unten, um Muster in meinem Eimer zu finden 

def getListOfPrefixesFromS3(dataPath: String, prefix: String, delimiter: String, batchSize: Integer): List[String] = {
    var s3Client = new AmazonS3Client()
    var listObjectsRequest = new ListObjectsRequest().withBucketName(dataPath).withMaxKeys(batchSize).withPrefix(prefix).withDelimiter(delimiter)
    var objectListing: ObjectListing = null
    var res: List[String] = List()

    do {
      objectListing = s3Client.listObjects(listObjectsRequest)
      res = res ++ objectListing.getCommonPrefixes
      listObjectsRequest.setMarker(objectListing.getNextMarker)
    } while (objectListing.isTruncated)
    res
  }

Bei größeren Buckets ist dies zu zeitaufwändig, da alle Objektzusammenfassungen von den Aws zurückgegeben werden und nicht nur diejenigen, die dem Präfix und dem Trennzeichen entsprechen. Ich suche nach Möglichkeiten, die Leistung zu verbessern, und bisher habe ich nur festgestellt, dass ich die Schlüssel benennen und sie in Eimern ordnen sollte.

0

Sehen Sie sich diese Dokumentation an: http://docs.aws.Amazon.com/AWSSDKforPHP/latest/index.html#m=amazons3/get_object_list

Sie können einen Perl-kompatiblen regulären Ausdruck (PCRE) verwenden, um die Namen zu filtern.

0
Ragnar

Ich habe es folgendermaßen versucht

aws s3 ls s3://Bucket1/folder1/2019/ --recursive |grep filename.csv

Dies gibt den tatsächlichen Pfad aus, in dem sich die Datei befindet

2019-04-05 01:18:35     111111 folder1/2019/03/20/filename.csv
0
Dheeraj

Status 2018-07: Amazon hat eine native SQL-Suche nach CSV- und Json-Dateien!

https://aws.Amazon.com/blogs/developer/introducing-support-for-Amazon-s3-select-in-the-aws-sdk-for-javascript/

0
JSi

Ich habe es so gemacht: Ich habe Tausende von Dateien in s3 . Ich habe das Eigenschaftenfeld einer Datei in der Liste gesehen. Sie können die URI dieser Datei sehen, und ich kopiere diese in den Browser ein - es war eine Textdatei und sie wurde schön gerendert. Jetzt habe ich die UUID in der URL durch die UUID ersetzt, die ich zur Hand hatte und da boom die Datei ist.

Ich wünschte, AWS hätte eine bessere Möglichkeit, eine Datei zu durchsuchen, aber das hat für mich funktioniert.

0
Rose

Dies ist ein bisschen altes Thema - aber vielleicht helfen Sie jemandem, der noch sucht - ich bin derjenige, der das ein Jahr lang sucht.

Die Lösung könnte " AWS Athena " sein, wo Sie über solche Daten suchen können

'SELECT user_name FROM S3Object WHERE cast(age as int) > 20'

https://aws.Amazon.com/blogs/developer/introducing-support-for-Amazon-s3-select-in-the-aws-sdk-for-javascript/

Derzeit beträgt der Preis 5 US-Dollar für 1-TB-Daten - Wenn Ihre Suchanfrage also dreimal über eine 1-TB-Datei durchsucht wird, betragen Ihre Kosten 15 US-Dollar. Wenn Sie jedoch nur 1 Spalte im konvertierten Spaltenformat lesen möchten, zahlen Sie 1/3 des Preises 1,67 $/TB.

0
BG Bruno