So extrahieren Sie Dateien aus einem Zip-Archiv in S3

9

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

    
Rpj 03.02.2015, 04:38
quelle

1 Antwort

17

S3 ist nicht wirklich dafür ausgelegt; normalerweise müssten Sie die Datei herunterladen, verarbeiten und die extrahierten Dateien hochladen.

Allerdings kann es ein paar Optionen geben:

  1. Sie könnten den S3-Bucket als lokales Dateisystem mit s3fs und FUSE mounten (siehe Artikel und github-Website ). Dies erfordert immer noch, dass die Dateien heruntergeladen und hochgeladen werden, aber es versteckt diese Operationen hinter einer Dateisystemschnittstelle.

  2. Wenn Sie vor allem vermeiden möchten, dass Daten von AWS auf Ihren lokalen Computer heruntergeladen werden, können Sie die Daten natürlich auch auf eine entfernte EC2 Instanz und die Arbeit dort erledigen, 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. Verwenden Sie dazu AWS Lambda .

Sie müssen ein kleines Programm erstellen, verpacken und hochladen, das in node.js geschrieben ist, um auf die Dateien zuzugreifen, sie zu dekomprimieren und hochzuladen. Diese Verarbeitung findet im Hintergrund in der AWS-Infrastruktur statt, so dass Sie keine Dateien auf Ihren Computer herunterladen müssen. Weitere Informationen finden Sie in den häufig gestellten Fragen .

Schließlich müssen Sie einen Weg 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-Dokumentation .

Dies ist jedoch eine ziemlich aufwendige Methode, um 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 eine maximale Dauer von 5 Minuten begrenzt sind ( Standard-Timeout beträgt 3 Sekunden), sodass die Funktion möglicherweise ausläuft Zeit, wenn Ihre Dateien extrem groß sind - aber da der Arbeitsspeicher in /tmp auf 500 MB begrenzt ist, ist auch Ihre Dateigröße begrenzt.

    
DNA 18.02.2015, 15:28
quelle