So bewegen Sie den S3-Löffel an einen anderen Ort

20

Wir verwenden S3, um Millionen von Einträgen in unserer Web-App zu speichern. Jetzt verschieben wir das Ganze auf EC2, EU-Server, und wir möchten diese S3-Daten auch in die EU verschieben. Der von uns verwendete Bucket befindet sich jedoch in den USA, und es scheint kein Tool zu geben, mit dem der gesamte Bucket-Inhalt in einen anderen Bucket verschoben werden kann.

Es gibt auch ein Problem bei der späteren Synchronisierung der Daten, wenn wir auf EU-Bucket umstellen. Diese Daten werden während der Migration erstellt.

Skrat
quelle

Antworten:

18

Die neue offizielle AWS CLI unterstützt nativ die meisten Funktionen von s3cmd.

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1 --region us-west-2
AB
quelle
Wo finden Sie eine Liste mit Regionsnamen?
Bart
Die S3-Regionen finden Sie hier: docs.aws.amazon.com/general/latest/gr/rande.html#s3_region Diese sind fast identisch mit den EC2-Regionen, aus denen Sie stammen aws ec2 describe-regions, sie werden jedoch us-east-1auch als US-Standard für S3 bezeichnet aus historischen Gründen etwas anders.
AB
5

Ich denke, Sie können laufen:

s3cmd --recursive cp s3://oldbucket/ s3://newbucket

Es sollte es direkt kopieren.

Alexey
quelle
CLI sagt: "Befehl nicht gefunden"
Bart
3

Ich kenne keine gepackte Lösung, um dies zu tun, aber es ist im Wesentlichen nur eine Bucket-LIST und kopiert dann jedes Objekt aus dem US-Bucket in den EU-Bucket. Die PUT-copy-API unterstützt "if-modified-since" und "if-none-match", sodass Sie sie wiederholt ausführen können, ohne den Aufwand zu duplizieren: http://docs.amazonwebservices.com/AmazonS3/2006-03-01/ API / index.html? RESTObjectCOPY.html

Für eine Live-Migration würde ich den folgenden Ansatz vorschlagen:

  1. Optionaler erster Schritt: Wenn Sie eine große Datenmenge migrieren müssen, können Sie den ersten Schnappschuss der Daten auf einem physischen Gerät in den USA mit AWS Import / Export erfassen und physisch in die EU versenden. Dies kann Ihnen Zeit und Geld sparen.
    • Richten Sie ein Skript für die Migration von Daten aus den USA in die EU ein. Verwenden Sie dazu die oben beschriebenen Optionen if-modified-since oder if-none. Machen Sie es sich schlau genug, frische EU-Daten nicht mit veralteten US-Daten zu vermengen (sobald Sie Schritt 5 weiter unten erreicht haben). Führen Sie es kontinuierlich in einer Schleife durch, bis sich die beiden Eimer ungefähr im selben Zustand befinden.
    • Ändern Sie Ihre Web-App gleichzeitig in PUT-Daten für US- und EU-Buckets, während Sie weiterhin Daten ausschließlich aus den USA abrufen.
    • Führen Sie Ihr Migrationsskript so lange aus, bis Sie sicher sind, dass sich die Buckets in genau demselben Zustand befinden (oder so nah wie möglich sind, wenn die Konsistenz gegeben ist).
    • Ändern Sie die Web-App erneut, um Daten ausschließlich aus dem EU-Bucket abzurufen.
    • Sie können Ihr Migrationsskript jetzt deaktivieren.
    • Suchen Sie nach eventuellen Konsistenzanomalien und beseitigen Sie diese.
    • Ändern Sie die Web-App, um die Übertragung von Daten in den US-Bucket zu beenden.
    • LÖSCHE alles im US-Bucket.

Möglicherweise möchten Sie S3 Reduced Redundancy Storage während der Migration in Ihrem EU-Bucket verwenden, um günstigere Datenraten und schnellere Antwortzeiten zu erzielen, da die Daten nur ein Duplikat der US-Daten sind.

user44700
quelle
0

Ich habe viel mit S3 gearbeitet und bin noch nie auf ein Tool gestoßen, das dies von Haus aus erledigt. Es wäre jedoch nicht allzu schwierig, ein paar s3cmd-sync- Synchronisationsskripten zu verwenden, um zwei Buckets miteinander zu synchronisieren.

EEAA
quelle
Ja, das würde funktionieren, aber wir müssen alles lokal herunterladen, während die S3-API das Verschieben / Kopieren von Einträgen unterstützt, ohne sie herunterzuladen.
Skrat