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

Lesedauer: 4 Minute
0

Ich möchte alle meine Objekte von einem Amazon Simple Storage Service (Amazon S3)-Bucket in einen anderen Bucket kopieren oder verschieben.

Kurzbeschreibung

Wähle eine der folgenden Optionen, um Objekte von einem S3-Bucket in einen anderen Bucket zu kopieren:

  • Den sync-Befehl über die AWS Command Line Interface (AWS CLI) ausführen
  • Verwendung von S3-Batch Operationen bei Buckets, die viele Objekte enthalten

Der sync-Befehl funktioniert gut bei Buckets, die nicht sehr groß sind. Es ist jedoch kostspielig, den sync-Befehl auszuführen, um große Buckets mit Millionen von Objekten zu kopieren, und beim Kopiervorgang kann es zu einer Zeitüberschreitung kommen. Wenn es beim Kopieren eines Buckets zu Zeitüberschreitungen kommt, verwende Amazon CloudWatch-Metriken, um die Größe und Anzahl der Objekte im Bucket zu berechnen. Wenn du Millionen von Objekten in deinem S3-Bucket hast, ist es eine bewährte Methode, S3-Batch-Operationen zum Kopieren der Objekte zu verwenden.

Hinweis: Um Objekte aus deinem Bucket in einen Bucket zu kopieren, der einem anderen AWS-Konto gehört, verwende AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement), um kontoübergreifende Berechtigungen einzurichten. Stelle sicher, dass deine IAM-Rolle über s3:GetObjectTagging-Berechtigungen für Quellobjekte und s3:PutObjectTagging-Berechtigungen für Zielobjekte verfügt.

Führe einen oder mehrere der folgenden Schritte aus, um die Synchronisierungsleistung zu erhöhen und die Objekte schneller zu kopieren:

Lösung

Hinweis: Wenn du beim Ausführen von AWS CLI-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Kopieren von Objekten zwischen den S3-Buckets

Gehe wie folgt vor, um Objekte von einem Bucket in einen anderen Bucket zu kopieren:

  1. Wenn du S3-Objekte in der Amazon Simple Storage Service Glacier-Speicherklasse archiviert hast, stelle die Objekte wieder her.

  2. Führe den folgenden sync-Befehl aus, ersetze jedoch example_source_bucket und example_target_bucket durch deinen S3-Bucket-Namen:

    aws s3 sync s3://example_source_bucket s3://example_target_bucket

    Hinweis: Der sync-Befehl kopiert nur die Objekte, die sich noch nicht im Ziel-Bucket befinden. Um jedes Objekt explizit zu kopieren, verwende den cp-Befehl anstelle des sync-Befehls. Wenn du den sync-Befehl für einen versionierten Bucket verwendest, wird nur die aktuelle Version jedes Objekts kopiert. Standardmäßig werden bei diesem Verhalten Objektmetadaten beibehalten.

  3. (Optional) Wenn eine Zeitüberschreitung auftritt, verwende den CloudWatch-Befehl get-metric-statistics, um die Bucket-Größe und die Anzahl der Objekte zu berechnen.

    Führe den folgenden Befehl aus, um die Größe des Buckets zu berechnen:

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

    Führe den folgenden Befehl aus, um die Anzahl der Objekte im Bucket zu berechnen:

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

    Wenn dein Bucket groß ist und Millionen von Objekten enthält, verwende den sync-Befehl nicht. Verwende stattdessen S3-Batch-Operationen, wenn du deinen Bucket kopierst.

Wichtig: Zugriffssteuerungslisten (ACLs) werden nicht vom Quell-Bucket in den Ziel-Bucket kopiert, wenn du den sync-Befehl ausführst. Wenn es sowohl für den Quell- als auch für den Ziel-Bucket aktive ACLs gibt, gewähren die Zielobjekt-ACLs dem Konto, das den Kopiervorgang durchgeführt hat, FULL_CONTROL. Informationen zur Problembehandlung mit dem sync-Befehl findest du unter Warum kann ich kein Objekt zwischen zwei Amazon S3-Buckets kopieren?

Sicherstellen, dass die Objekte kopiert wurden

Gehe wie folgt vor, um zu überprüfen, ob die Objekte kopiert wurden:

  1. Führe die folgenden Is-Befehle aus, um den Inhalt der Quell- und Ziel-Buckets zu überprüfen:
    aws s3 ls --recursive s3://example_source_bucket --summarize > bucket-contents-source.txt
    aws s3 ls --recursive s3://example_target_bucket --summarize > bucket-contents-target.txt
    Hinweis: Beim ls-Befehl kann es bei großen Buckets zu einer Zeitüberschreitung kommen. Verwende bei großen Buckets anstelle des ls-Befehls CloudWatch-Metriken, um die Größe des Buckets und die Gesamtzahl der Objekte zu berechnen. Da Amazon CloudWatch-Metriken jedoch nur einmal täglich abgerufen werden, können die CloudWatch-Ergebnisse von den Ergebnissen des ls-Befehls abweichen.
  2. Verwende die Textdateien, die mit den vorherigen ls-Befehlen ausgegeben wurden, um Objekte zwischen dem Quell- und dem Ziel-Bucket zu vergleichen. Die Ausgabe ähnelt dem folgenden Beispiel:
    2017-11-20 21:17:39      15362 s3logo.png
    
      Total Objects: 1        Total Size: 15362

Hinweis: Wenn du Anwendungen oder Workloads hast, die API-Aufrufe an den Quell-Bucket tätigen, aktualisiere diese API-Aufrufe an den Ziel-Bucket. Möglicherweise musst du sync-Befehle ausführen, um Diskrepanzen zwischen Quell- und Ziel-Buckets zu beheben, wenn du häufig Schreibvorgänge durchführst.

Ähnliche Informationen

Amazon S3-Preise

Objekt in einen Verzeichnis-Bucket kopieren

Wie behebe ich einen nicht reagierenden Listenbefehl, nachdem ich einen großen Löschvorgang in Amazon S3 durchgeführt habe?

Wie kopiere ich Amazon S3-Objekte von einem anderen AWS-Konto?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten