2015-02-03 17 views
8

Ich habe ein Zip-Archiv in S3 an einem bestimmten Speicherort hochgeladen (zB /foo/bar.zip) Ich möchte die Werte in bar.zip extrahieren und unter/foo, ohne die extrahierten Dateien herunterzuladen oder erneut hochzuladen. Wie kann ich das tun, so dass S3 ziemlich wie ein Dateisystem behandelt wirdSo extrahieren Sie Dateien aus einem Zip-Archiv in S3

Antwort

14

S3 ist nicht wirklich entworfen, um dies zu ermöglichen; normalerweise müssten Sie die Datei herunterladen, verarbeiten und die extrahierten Dateien hochladen.

Allerdings kann es ein paar Optionen sein:

  1. Sie können die S3 Eimer als lokales Dateisystem mounten mit s3fs und FUSE (siehe article und github site). Dies erfordert immer noch, dass die Dateien heruntergeladen und hochgeladen werden, aber es versteckt diese Operationen hinter einer Dateisystemschnittstelle.

  2. Wenn Ihr Hauptanliegen ist es, Daten aus AWS auf Ihrem lokalen Rechner zu vermeiden, das Herunterladen, dann natürlich können Sie die Daten auf einem entfernten EC2 instance herunterladen und die Arbeit dort tun, mit oder ohne s3fs. Dadurch bleiben die Daten in Amazon-Rechenzentren erhalten.

  3. Möglicherweise können Sie Remote-Vorgänge für die Dateien ausführen, ohne sie auf Ihren lokalen Computer herunterzuladen, indem Sie AWS Lambda verwenden.

Sie müßten, Paket erstellen und ein kleines Programm in node.js dem Zugriff geschrieben laden, entpacken und die Dateien hochgeladen werden. Diese Verarbeitung findet im Hintergrund in der AWS-Infrastruktur statt, so dass Sie keine Dateien auf Ihren Computer herunterladen müssen. Siehe die FAQs.

Schließlich müssen Sie eine Möglichkeit finden, diesen Code auszulösen - normalerweise würde dies in Lambda automatisch durch den Upload der ZIP-Datei auf S3 ausgelöst. Wenn die Datei bereits vorhanden ist, müssen Sie sie möglicherweise manuell über den von der AWS-API bereitgestellten Befehl invoke-async auslösen. Siehe AWS Lambda walkthroughs und API docs.

Dies ist jedoch eine ziemlich aufwendige Möglichkeit, Downloads zu vermeiden, und es lohnt sich wahrscheinlich nur, wenn Sie eine große Anzahl von Zip-Dateien verarbeiten müssen! Beachten Sie auch, dass Lambda-Funktionen auf 5 Minuten maximale Dauer begrenzt sind (default timeout ist 3 Sekunden), so kann die Zeit ausgehen, wenn Ihre Dateien extrem groß sind - aber da der Speicherplatz in /tmp auf 500 MB begrenzt ist, ist Ihre Dateigröße ebenfalls begrenzt.

+1

Jetzt ist die Grenze Ausführungszeit auf AWS Lambda 5 Minuten (pro https://serifandsemaphore.io/aws-lambda-going-beyond-5-minutes-34e381e71231#.blrcnlxpk). Toll zu beachten. – thadk

+0

/tmp scratch Raum in Lambda ist auch nur 500mb (perhttps: //aws.amazon.com/lambda/faqs/) – thadk

+0

@thadk Danke für die Zeiger - haben die Antwort aktualisiert! – DNA

Verwandte Themen