Dateien direkt von einem S3-Konto auf ein anderes verschieben?

90

Ziemlich einfache Frage, aber ich konnte keine Antwort finden. Mit Transit kann ich Dateien von einem S3-Bucket in einem AWS-Konto in einen anderen S3-Bucket in einem anderen AWS-Konto "verschieben". Tatsächlich werden jedoch die Dateien vom ersten heruntergeladen und dann in den zweiten hochgeladen.

Gibt es eine Möglichkeit, Dateien direkt von einem S3-Konto auf ein anderes zu verschieben, ohne sie dazwischen herunterzuladen?

Andrew
quelle

Antworten:

22

Wenn Sie nur nach einer fertigen Lösung suchen, gibt es einige Lösungen, die dies tun können. Bucket Explorer funktioniert auf Mac und Windows und kann über Konten kopieren , wie kann Moltebeeren S3 Explorer und S3 Browser , aber sie sind nur Windows so möglicherweise nicht für Sie arbeiten.

Ich vermute, dass die AWS-Konsole dies auch mit den entsprechenden Berechtigungseinstellungen tun könnte, aber ich habe dies nicht getestet.

Sie können dies auch über die AWS-API tun, sofern Sie dem AWS-Konto, das Sie verwenden, Schreibberechtigungen für den Zielbereich erteilt haben .

Geoff Appleford
quelle
+1 für Bucket Explorer. Viel einfacher als AWS Management Console oder s3cmd zum Kopieren eines Buckets zwischen Konten. Die zweite Reihe von Anweisungen funktionierte für mich mit ihrer kostenlosen Testversion: bucketexplorer.com/documentation/…
LennonR
Cloudberry ist der richtige Weg. Kostenlos und einfach per Drag & Drop nach einer noch einfacheren Einrichtung. Und nein, ich arbeite dort nicht :)
Skidadon
3
Lädt Bucket Explorer die Daten herunter und lädt sie erneut hoch oder verschiebt es die Daten direkt zwischen den Amazon-Servern?
Wouter
Beachten Sie, dass die Testversion von Cloudberry (mindestens Version 5.0.0.32) ein Übertragungslimit von 5 GB hat!
DarthPablo
123

Ja, es gibt einen Weg. Und es ist ziemlich einfach, obwohl es schwer zu finden ist. 8)

Angenommen, Ihr erster Kontonutzername lautet [email protected] und der zweite [email protected].

Öffnen Sie die AWS Management Console als acc1. Rufen Sie die Amazon S3-Bucket-Eigenschaften auf und klicken Sie auf der Registerkarte "Berechtigungen" auf "Weitere Berechtigungen hinzufügen". Fügen Sie dann Listen- und Ansichtsberechtigungen für "Authentifizierte Benutzer" hinzu.

Als Nächstes erstellen Sie in AWS IAM (auf das über die Konsolenregisterkarten zugegriffen werden kann) von acc2 einen Benutzer mit vollem Zugriff auf den S3-Bucket (um sicherer zu sein, können Sie genaue Berechtigungen einrichten, ich bevorzuge jedoch die Erstellung eines temporären Benutzers für die Übertragung und dann löschen).

Dann können Sie s3cmd (unter Verwendung der Anmeldeinformationen des neu erstellten Benutzers in acc2) verwenden, um Folgendes zu tun:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

Die gesamte Übertragung erfolgt auf Amazon-Seite.

side2k
quelle
8
Toller Tipp! rsyncSie können auch ganze Buckets à la synchronisieren s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll
6
Wenn Sie beim Kopieren von Dateien vom Ziel zum Host Probleme mit einem 403 AccessDenied haben, lesen Sie diesen Beitrag. Es mag einen anderen Weg geben, aber die Ergebnisse hier haben für mich funktioniert. alfielapeter.com/posts/…
Crlane
Was ist mit etwas großen Eimern? Sagen wir im 50-GB-Bereich, gibt es Ihnen irgendwelche Probleme?
Ianstarz
4
s3cmdkann auch mit Homebrew installiert werden, fyi
ianstarz
3
Wenn Ihr Ziel-Bucket dazu bestimmt ist, Dateien öffentlich bereitzustellen, möchten Sie möglicherweise etwas --acl-publicanderes hinzufügen . Alle Dateien sind privat (zumindest für mich, als ich den Befehl ausgeführt habe). Bei so vielen privaten Dateien musste ich eine Richtlinie in den Bucket
einfügen
59

Verwenden Sie die aws cli (ich habe die Ubuntu 14 ec2-Instanz verwendet) und führen Sie einfach den folgenden Befehl aus:

aws s3 sync s3://bucket1 s3://bucket2

Sie müssen die Kontodetails für das eine angeben und über öffentlichen Schreib- oder Lesezugriff auf das andere verfügen.

Dadurch werden die beiden Buckets synchronisiert. Sie können denselben Befehl später erneut verwenden, um eine schnelle Synchronisierung durchzuführen. Das Beste daran ist, dass anscheinend keine Bandbreite erforderlich ist (z. B. werden Dateien nicht über den lokalen Computer übertragen).

Programmierer
quelle
3
Auf einem sehr großen Eimer hatte ich damit mehr Glück. s3cmd schien die Generierung der Dateiliste im ersten Bucket zu blockieren. Es mag abgeschlossen sein, aber ich wurde ungeduldig.
Überdenken Sie den
2
Ich hatte die gleiche Erfahrung; aus welchem ​​Grund auch immer, aws s3 syncscheint um eine Größenordnung schneller zu laufen als s3cmd cp.
pix0r
2
Das hat bei mir funktioniert. Wenn Sie auf Berechtigungsprobleme stoßen, verwenden Sie die --grantsOption. Weitere Informationen in der Dokumentation: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen
3
Berechtigungen werden beim Synchronisieren nicht kopiert, daher müssen Sie angeben --grants. Ich habe dies gelernt, nachdem ich eine Menge Daten kopiert hatte und dann die Synchronisierung in einen neuen Bucket wiederholen musste. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersLegt die Leseberechtigung für öffentliche Benutzer fest.
Dan Sandland
Dies lief ungefähr 10x schneller als s3cmdbei mir und ist auch in der Lage, Änderungsdateien zu synchronisieren, anstatt alles erneut zu kopieren, wenn Sie den Befehl in Zukunft erneut ausführen müssen - viel besser!
NFM
5

Boto funktioniert gut. Siehe diesen Thread . Mit boto kopieren Sie Objekte direkt von einem Bucket in einen anderen, anstatt sie auf den lokalen Computer herunterzuladen und in einen anderen Bucket hochzuladen.

Rose Perrone
quelle
3

Unter Mac OS XI wurde die Transmit-App von Panic verwendet. Ich habe ein Fenster für jedes S3-Konto geöffnet (unter Verwendung der API-Schlüssel und Geheimnisse). Ich könnte dann von einem Eimer in einem Fenster zu einem anderen Eimer im anderen Fenster ziehen. Sie müssen die Dateien nicht zuerst lokal herunterladen .

Andrew ist korrekt. Transmit lädt die Dateien lokal herunter und lädt sie dann hoch.

Ein Riesensprung AB
quelle
2
Ich habe Transmit und bin zu 99% sicher, dass die von Ihnen beschriebene Übertragung die Dateien in einen temporären Ordner herunterlädt und dann auf den anderen Server hochlädt. Sind Sie sicher, dass die Dateien nicht durch Ihren Computer geflossen sind?
Andrew
1
Kann jemand dies bestätigen?
David Mauricio
2
Ich bestätige. Übertragen Sie Downloads und Uploads. Dies macht die Dinge furchtbar langsam, hat aber den großen Vorteil, kopierte Inhalte unter dem richtigen Eigentümer zu speichern.
Fabio Russo
3

Verschieben Sie S3-Dateien von einem Konto in ein anderes Konto

Angenommen, es gibt zwei Konten, Quellkonto und Zielkonto. Und zwei Eimer source-bucketund destination bucket. Wir wollen alle Dateien von source-bucketnach verschieben destination-bucket. Wir können dies durch die folgenden Schritte tun:

  1. aws configure
    • Konfigurieren Sie Ihr Zielkonto mithilfe der Anmeldeinformationen oder der IAM-Rolle.
  2. Erstellen Sie eine Benutzerrichtlinie für den Zielkontonutzer.
  3. Gewähren Sie dem Zielbenutzer Zugriff auf den Quell-Bucket, indem Sie die Quell-Bucket-Richtlinie ändern und die Benutzerrichtlinie des Zielkontos hinzufügen. Auf diese Weise hat der Zielbenutzer Zugriff auf den Quell-Bucket.
  4. aws s3 ls s3://source-bucket/
    • Dadurch wird überprüft, ob das Zielkonto Zugriff auf den Quell-Bucket hat. Nur zur Bestätigung tun Sie dies.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • Dadurch werden alle Dateien im Quell-Bucket in den Ziel-Bucket kopiert. Alle Dateien werden mit dem Flag --recursive kopiert.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • Dadurch werden alle Dateien vom Quell-Bucket in den Ziel-Bucket verschoben.

Alternativ können Sie den Befehl sync verwenden - aws s3 sync s3://source-bucket s3://detination-bucket

Zur besseren Erklärung folgen Sie dem Link

Anand Tripathi
quelle
2

CrossFTP kann S3-Dateien direkt von einem Bucket in einen anderen kopieren, ohne sie herunterzuladen. Es ist ein GUI S3-Client, der unter Windows, Mac und Linux funktioniert.

Gatorhall
quelle
4
Es ist zu beachten, dass dies nur mit der kostenpflichtigen Version möglich ist. Es ist keine freie Lösung.
Michael Brook
2

Sie können Cyberduck (Open Source) verwenden

Marco Delavegua
quelle
Im Windows Store berechnen sie etwas, um dies herunterzuladen, aber von ihrer Website können Sie es kostenlos erhalten. Nach dem Erstellen einer AWS-Zugriffsschlüssel-ID und eines geheimen Zugriffsschlüssels konnte ich eine Verbindung zu meinem S3-Speicher herstellen. Ich habe noch nichts getestet, aber es sieht so aus, als würde es funktionieren.
Wouter
1

Für neu erstellte Dateien (NICHT vorhandene Objekte) können Sie die neuen Funktionen von AWS nutzen. Es handelt sich um eine bereichsübergreifende Replikation (unter "Versionierung" für den S3-Bucket). Sie können eine Richtlinie erstellen, mit der Sie neue Objekte in einen Bucket in einem anderen Konto replizieren können.

Für vorhandene Objekte müssen Sie Ihre Objekte weiterhin mit einer anderen Methode kopieren - es sei denn, AWS führt in Zukunft native Funktionen dafür ein.

neugieriger George
quelle
0

Man kann es so mit folgendem Laufen machen:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. Fügen Sie dem Quell-Bucket im Quellkonto eine Bucket-Richtlinie hinzu.

  2. Fügen Sie einem Benutzer oder einer Rolle im Zielkonto eine IAM-Richtlinie (AWS Identity and Access Management) hinzu.

  3. Verwenden Sie den IAM-Benutzer oder die IAM-Rolle im Zielkonto, um die kontenübergreifende Verschiebung durchzuführen.

svikramjeet
quelle