Ich habe nach einem Tool gesucht, mit dem ich den Inhalt eines AWS S3-Buckets in einen zweiten AWS S3-Bucket kopieren kann, ohne den Inhalt zuerst in das lokale Dateisystem herunterzuladen.
Ich habe versucht, die Kopieroption für die AWS S3-Konsole zu verwenden, aber dies führte dazu, dass einige verschachtelte Dateien fehlten.
Ich habe versucht, die Transmit-App (von Panic) zu verwenden. Der Befehl duplicate lädt die Dateien zuerst auf das lokale System herunter und lädt sie dann zurück in den zweiten Bucket, was ziemlich ineffizient ist.
amazon-s3
copy
amazon-web-services
cnicolaou
quelle
quelle
aws configure set default.s3.max_concurrent_requests 200
Antworten:
Zwischen S3-Buckets kopieren
AWS hat (erst kürzlich) eine Befehlszeilenschnittstelle zum Kopieren zwischen Buckets veröffentlicht.
http://aws.amazon.com/cli/
Dadurch wird von einem Ziel-Bucket in einen anderen Bucket kopiert .
Siehe die Dokumentation hier: S3 CLI-Dokumentation
quelle
A client error (PermanentRedirect) occurred when calling the ListObjects operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
Ein vereinfachtes Beispiel mit dem Juwel aws-sdk:
Wenn Sie die Kopie zwischen verschiedenen Buckets ausführen möchten, geben Sie den Namen des Ziel-Buckets an:
quelle
Sie können dies jetzt über die S3-Administrationsoberfläche tun. Gehen Sie einfach in einen Eimer und wählen Sie alle Ihre Ordner aus
actions->copy
. Dann ziehen Sie in Ihren neuen Eimeractions->paste
.quelle
Es ist mit dem neuesten aws-sdk- Juwel möglich, siehe Codebeispiel:
Weitere Details: Kopieren von Dateien über Buckets mit aws-s3 gem
quelle
Kopieren Sie zwischen Eimern in verschiedenen Regionen
Der obige Befehl kopiert eine Datei aus einem Eimer in Europa (eu-west-1) nach Japan (ap-nordost-1). Mit dem folgenden Befehl können Sie den Codenamen für die Region Ihres Buckets abrufen:
Die Verwendung von Kopieren und Einfügen in der S3-Webkonsole ist übrigens einfach, scheint jedoch aus dem Quell-Bucket in den Browser herunterzuladen und dann in den Ziel-Bucket hochzuladen. Die Verwendung von "aws s3" war für mich viel schneller.
quelle
Ich habe eine ausführbare Docker-Datei von s3s3mirror erstellt Tools . Ein Dienstprogramm zum Kopieren und Spiegeln von einem AWS S3-Bucket in einen anderen.
Es ist ein Thread, der paralleles Kopieren ermöglicht und sehr speichereffizient ist. Es ist dort erfolgreich, wo s3cmd vollständig ausfällt.
Verwendung:
Eine vollständige Liste der Optionen finden Sie unter:
quelle
Überprüfen Sie die Dokumentation unten. Ich denke, das ist es, wonach du suchst. http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html
Das S3Interface von RightAws gem verfügt über Kopierfunktionen, die die oben genannten Funktionen ausführen.
http://rubydoc.info/gems/right_aws/3.0.0/RightAws/S3Interface#copy-instance_method
quelle
Ich würde mir vorstellen, dass Sie wahrscheinlich schon eine gute Lösung gefunden haben, aber für andere, die auf dieses Problem stoßen (wie ich es kürzlich getan habe), habe ich ein einfaches Dienstprogramm speziell für den Zweck entwickelt, einen S3-Bucket in einen anderen zu spiegeln eine sehr gleichzeitige und dennoch CPU- und speichereffiziente Art und Weise.
Es ist auf Github unter einer Apache-Lizenz hier: https://github.com/cobbzilla/s3s3mirror
Wenn Sie einen sehr großen Eimer haben und nach maximaler Leistung suchen, lohnt es sich möglicherweise, ihn auszuprobieren.
Wenn Sie es versuchen möchten, lassen Sie es mich bitte wissen, wenn Sie Feedback haben.
quelle
Wenn Sie sich in der Shell befinden und mehrere Dateien, aber nicht alle Dateien kopieren möchten: s3cmd cp --recursive s3: // BUCKET1 / OBJECT1 s3: // BUCKET2 [/ OBJECT2]
quelle
Ich habe ein Skript geschrieben, das einen S3-Bucket sichert: https://github.com/roseperrone/aws-backup-rake-task
Ich benutze dies in einer Rechenaufgabe (für eine Rails-App):
quelle
Ich habe gehört, dass es dafür ein Knotenmodul gibt, wenn Sie sich für Javascript interessieren: p
Aus den Knox-Copy- Dokumenten:
quelle
Ich wurde informiert, dass Sie dies auch mit s3distcp in einem EMR-Cluster tun können. Bei Daten mit großen Dateien soll es schneller sein. Bei kleinen Datenmengen funktioniert es gut genug - aber angesichts der Lernkurve, die erforderlich war, um so wenig Daten einzurichten, hätte ich eine andere Lösung vorgezogen (ich habe noch nie zuvor mit EMR gearbeitet).
Hier ist ein Link aus der AWS-Dokumentation: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
Update: Für denselben Datensatz war s3s3mirror viel schneller als s3distcp oder die AWS-CLI. Viel einfacher einzurichten.
quelle
Es ist ziemlich einfach, von einem S3-Bucket in denselben oder einen anderen S3-Bucket zu kopieren, ohne ihn auf den lokalen Download herunterzuladen. Verwenden Sie den folgenden Shell-Befehl.
Dadurch werden alle Dateien aus dem
SourceFoldername
Ordner des Quell-Buckets in den Ordner des Ziel-Buckets kopiertTargetFoldername
. In dem obigen Code, bitte ersetzenAccessKey
,SecurityKey
undExternalBucket
mit entsprechenden Werten.quelle
hdfs
?von AWS cli https://aws.amazon.com/cli/ könnten Sie tun
aws s3 ls
- Dadurch werden alle S3-Buckets aufgelistetaws cp --recursive s3://<source bucket> s3://<destination bucket>
- Dadurch werden die Dateien von einem Bucket in einen anderen kopiertHinweis * Sehr nützlich beim Erstellen von bereichsübergreifenden Replikations-Buckets. Wenn Sie die oben genannten Schritte ausführen, werden alle Dateien nachverfolgt und eine Aktualisierung der Quellregionsdatei wird an den replizierten Bucket weitergegeben. Alles außer den Dateilöschungen wird synchronisiert.
Stellen Sie für CRR sicher, dass die Versionierung für die Buckets aktiviert ist.
quelle
Wie wäre es mit
aws s3 sync
cli Befehl. aws s3 sync s3: // Bucket1 / s3: // Bucket2 /quelle
Wie Neel Bhaat in diesem Blog erklärt hat , gibt es viele verschiedene Tools, die für diesen Zweck verwendet werden können. Einige werden von AWS bereitgestellt, wobei die meisten Tools von Drittanbietern sind. Für alle diese Tools müssen Sie Ihren AWS-Kontoschlüssel und Ihr Geheimnis im Tool selbst speichern. Seien Sie sehr vorsichtig, wenn Sie Tools von Drittanbietern verwenden, da die Anmeldeinformationen, die Sie speichern, Sie, Ihren gesamten Wert und Sie umbringen können.
Daher empfehle ich immer, die AWS CLI für diesen Zweck zu verwenden. Sie können dies einfach über diesen Link installieren . Führen Sie als Nächstes den folgenden Befehl aus und speichern Sie Ihre geheimen Schlüsselwerte in AWS CLI.
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.)
Beispiele:
1) Für AWS S3 zum lokalen Speicher
2) Vom lokalen Speicher zum AWS S3
3) Vom AWS s3-Bucket zu einem anderen Bucket
quelle
Der beste Weg, um einen S3-Bucket zu kopieren, ist die Verwendung der AWS-CLI .
Es umfasst diese 3 Schritte:
Wenn Sie Buckets zwischen zwei AWS-Konten kopieren, müssen Sie jedem Bucket die richtige Richtlinie hinzufügen.
Verwenden Sie danach diesen Befehl, um von einem Bucket in einen anderen zu kopieren.
Die Details von Schritt 2 und Schritt 3 finden Sie unter diesem Link:
quelle
Sie können eine Java-App schreiben - möglicherweise sogar eine GUI-SWING-App, die die AWS-Java-APIs verwendet.
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/CopyObject.java
quelle