Wie kann ich alle Objekte von einem Amazon-S3-Bucket in einen anderen Bucket kopieren?

Letzte Aktualisierung: 07.01.2022

Ich möchte alle meine Objekte von einem Amazon Simple Storage Service (Amazon S3) Bucket in einen anderen Bucket kopieren oder verschieben. Wie kann ich Objekte zwischen S3 Buckets migrieren?

Kurzbeschreibung

Folgen Sie diesen Schritten, um Objekte von einem S3 Bucket in einen anderen zu kopieren:

1.    Erstellen eines neuen S3 Buckets.

2.    Installieren und Konfigurieren der AWS Command Line Interface (AWS CLI).

3.    Kopieren Sie die Objekte zwischen den S3 Buckets.

Hinweis: Die Verwendung der Befehle aws s3 ls oder aws s3 sync für große Buckets (mit 10 Millionen Objekten oder mehr) kann aufwändig sein und zu einer Zeitüberschreitung führen. Wenn aufgrund eines großen Buckets Zeitüberschreitungen auftreten, sollten Sie die Verwendung von Amazon-CloudWatch-Metriken in Betracht ziehen, um die Größe und Anzahl der Objekte in einem Bucket zu berechnen. Sie können auch erwägen, S3-Batchvorgänge zum Kopieren der Objekte zu verwenden.

4.    Stellen Sie sicher, dass die Objekte kopiert werden.

5.    Aktualisieren Sie vorhandene API-Aufrufe auf den Ziel-Bucket-Namen.

Bevor Sie beginnen, sollten Sie Folgendes beachten:

Auflösung

Erstellen eines neuen S3 Buckets

1.    Öffnen Sie die Amazon-S3-Konsole.

2.    Wählen Sie Bucket erstellen aus.

3.    Wählen Sie einen DNS-kompatiblen Namen für Ihren neuen Bucket.

4.    Wählen Sie Ihre AWS-Region aus.

Tipp: Um Leistungsprobleme durch regionsübergreifenden Datenverkehr zu vermeiden, erstellen Sie den Ziel-Bucket in derselben Region wie den Quell-Bucket.

5.    Wählen Sie optional Einstellungen aus einem vorhandenen Bucket kopieren aus, um die Konfiguration des Quell-Buckets zu spiegeln.

Installieren und Konfigurieren der AWS CLI

1.    Installieren Sie die AWS CLI.

2.    Konfigurieren Sie die AWS CLI, indem Sie folgenden Befehl ausführen:

aws configure

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

3.    Geben Sie Ihre Zugangsschlüssel ein (Zugangsschlüssel-ID und geheimer Zugangsschlüssel).

4.    Drücken Sie die Eingabetaste, um die Optionen für Standardregion und Standard-Output zu überspringen. Weitere Informationen zu Amazon S3-Regionsparametern finden Sie unter AWS-Service-Endpunkte.

Hinweis: Die AWS CLI-Outputs sind JSON, Text oder Tabelle, aber nicht alle Befehle unterstützen jeden Output-Typ. Weitere Informationen finden Sie unter Steuern der Befehlsausgabe von der AWS CLI.

Kopieren Sie die Objekte zwischen den S3 Buckets

1.    Wenn Sie S3-Objekte in der Speicherklasse Amazon Simple Storage Service Glacier archiviert haben, stellen Sie die Objekte wieder her.

2.    Kopieren Sie die Objekte zwischen den Quell- und Ziel-Buckets, indem Sie den folgenden Sync-Befehl mit der AWS CLI ausführen:

aws s3 sync s3://DOC-EXAMPLE-BUCKET-SOURCE s3://DOC-EXAMPLE-BUCKET-TARGET

Hinweis: Aktualisieren Sie den Befehl Synchronisieren, um Ihre Quell- und Ziel-Bucket-Namen einzuschließen.

Der Befehl Synchronisieren verwendet die CopyObject-APIs, um Objekte zwischen S3-Buckets zu kopieren. Der Befehl Synchronisieren listet die Quell- und Ziel-Buckets auf, um Objekte zu identifizieren, die sich im Quell-Bucket, aber nicht im Ziel-Bucket befinden. Der Befehl identifiziert auch Objekte im Quell-Bucket, die andere LastModified-Daten aufweisen als die Objekte, die sich im Ziel-Bucket befinden. Wenn Sie den Befehl Synchronisieren für einen Bucket mit verschiedenen Versionen verwenden, wird nur die aktuelle Version des Objekts kopiert, frühere Versionen werden nicht kopiert. Standardmäßig werden bei diesem Vorgehen Objektmetadaten beibehalten.

Wenn im Quell-Bucket Zugriffskontrolllisten (ACLs) aktiviert sind, werden die ACLs nicht in den Ziel-Bucket kopiert. Dies gilt unabhängig davon, ob die ACLs im Ziel-Bucket aktiviert sind oder nicht. Wenn sowohl im Quell- als auch im Ziel-Bucket ACLs aktiviert sind, gewähren die Zielobjekt-ACLs dem Konto, das den Kopiervorgang ausgeführt hat, FULL_CONTROL. Wenn der Vorgang fehlschlägt, können Sie den Befehl Sync erneut ausführen, ohne zuvor kopierte Objekte zu duplizieren. Informationen zum Beheben von Problemen mit dem Synchronisierungsvorgang finden Sie unter Warum kann ich ein Objekt nicht zwischen zwei Amazon S3 Buckets kopieren?

3.    (Optional) Wenn eine Zeitüberschreitung auftritt, verwenden Sie den Befehl Cloudwatch-Metrikstatistiken abrufen, um die Anzahl der Objekte in Ihrem Bucket zu berechnen:

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name NumberOfObjects --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=AllStorageTypes --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 600 --statistic Average --output json

4.    (Optional) Wenn eine Zeitüberschreitung auftritt, verwenden Sie den Befehl Cloudwatch-Metrikstatistiken abrufen, um die Größe Ihres Buckets abzurufen:

$ aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=DOC-EXAMPLE-BUCKET-SOURCE Name=StorageType,Value=StandardStorage --start-time 2021-05-11T00:00 --end-time 2021-05-11T00:10 --period 3600 --statistics Average --unit Bytes --output json

Hinweis: Listenaufrufe können sehr aufwändig sein, was zu einer Zeitüberschreitung des Befehls führt. Ziehen Sie bei großen Buckets in Betracht, stattdessen Amazon CloudWatch-Metriken zu verwenden, um die Größe des Buckets und die Gesamtanzahl der Objekte zu berechnen. Da Amazon CloudWatch-Metriken jedoch nur einmal täglich abgerufen werden, können die gemeldete Objektanzahl und Bucket-Größe von den Ergebnissen des Befehls Auflisten abweichen.

Stellen Sie sicher, dass die Objekte kopiert werden

1.    Überprüfen Sie den Inhalt der Quell- und Ziel-Buckets, indem Sie die folgenden Befehle ausführen:

aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-SOURCE --summarize > bucket-contents-source.txt
        
aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET-TARGET --summarize > bucket-contents-target.txt

Hinweis: Aktualisieren Sie den Befehl Auflisten, um Ihre Quell- und Ziel-Bucket-Namen einzuschließen.

2.    Vergleichen Sie Objekte, die sich in den Quell- und Ziel-Buckets befinden, indem Sie die Outputs verwenden, die in Dateien im AWS CLI-Verzeichnis gespeichert sind. Ein Beispiel für einen Output finden Sie im Folgenden:

$ aws s3 ls --recursive s3://DOC-EXAMPLE-BUCKET --summarize
2017-11-20 21:17:39      15362 s3logo.png

  Total Objects: 1        Total Size: 15362

Aktualisieren Sie vorhandene API-Aufrufe auf den Ziel-Bucket-Namen

Aktualisieren Sie alle vorhandenen Anwendungen oder Workloads, sodass sie den Ziel-Bucket-Namen verwenden. Bei häufigen Schreibvorgängen müssen Sie möglicherweise Synchronisierungsbefehle ausführen, um Diskrepanzen zwischen Quell- und Ziel-Buckets zu beheben.