Replizieren von Objekten

Mit der Replikation können Sie Regeln für das automatische, asynchrone Kopieren von Objekten aus einem Quellbereich in einen Zielbereich desselben Kontos festlegen. Außerdem können Sie Objekte aus einem Bereich in einen anderen Bereich in verschiedenen Konten kopieren.

Was ist Replikation?

Die Replikation kopiert neu erstellte Objekte und Objektaktualisierungen von einem Quellbereich in einen Zielbereich.

  • Nur neue Objekte oder neue Versionen vorhandener Objekte (die nach dem Hinzufügen der Replikationsregel zum Bucket erstellt wurden) werden in den Ziel-Bucket kopiert. Vorhandene Objekte können durch Kopieren auf sich selbst repliziert werden, wodurch eine neue Version entsteht, die repliziert wird.
  • Die Metadaten des Quellobjekts werden auf das replizierte Objekt übertragen.
  • Für die bidirektionale Replikation zwischen zwei Buckets müssen die Regeln in beiden Buckets aktiv sein.
  • Filter (bestehend aus Präfixen und/oder Tags) können verwendet werden, um die Replikationsregel nur auf eine Teilmenge von Objekten anzuwenden. Es können mehrere Regeln in einer einzigen Richtlinie definiert werden, und diese Regeln können unterschiedliche Ziele angeben. Auf diese Weise können verschiedene Objekte im selben Bucket an verschiedene Ziele repliziert werden.

Warum die Replikation?

  • Bewahren Sie eine Kopie der Daten in einem Bucket an einem anderen geografischen Standort auf.
  • Erfüllen Sie Compliance-Vorschriften zur Datenhoheit, indem Sie Replikationsregeln definieren, die Replikate nur an den zulässigen Standorten speichern.
  • Halten Sie Produktions- und Testdaten synchron, da bei der Replikation Objekt-Metadaten wie die Zeit der letzten Änderung, die Versions-ID usw. erhalten bleiben.
  • Verwalten Sie die Speicherklasse und die Lebenszyklusrichtlinien für die replizierten Objekte unabhängig von der Quelle, indem Sie eine andere Speicherklasse und/oder Lebenszyklusregeln für den Ziel-Bucket definieren. Ebenso können Sie Replikate in einem Bucket in einer separaten Serviceinstanz oder sogar in einem IBM Cloud-Konto speichern und auch den Zugriff auf die Replikate unabhängig steuern.

Erste Schritte mit der Replikation

Für die ersten Schritte müssen einige Voraussetzungen erfüllt sein:

  • Legen Sie die Plattformrolle Writer oder Manager für den Quell-Bucket fest, oder weisen Sie eine benutzerdefinierte Rolle mit den entsprechenden Replikationsaktionen (z. B. cloud-object-storage.bucket.put_replication) zu.
  • Sie brauchen keinen Zugriff auf den Ziel-Bucket, müssen aber über ausreichende Plattformrollen verfügen, um neue IAM-Richtlinien zu erstellen, die es dem Quell-Bucket erlauben, in den Ziel-Bucket zu schreiben.
  • Der Ziel-Bucket darf keine Legacy-Bucket-Firewall aktiviert haben, kann aber kontextbasierte Einschränkungen verwenden.
  • Mit SSE-C verschlüsselte Objekte können nicht repliziert werden, obwohl verwaltete Verschlüsselung(SSE-KMS)wie Key Protect vollständig mit der Replikation kompatibel ist.
  • Objekte in einem archivierten Zustand können nicht repliziert werden.
  • Wenn sich die Quell- und Ziel-Buckets in unterschiedlichen IBM Konten befinden, müssen Sie die Buckets in jedem Konto erstellen.
  • Aktivieren Sie die Versionierung sowohl für den Quell- als auch für den Ziel-Bucket.

Da die Versionierung eine Voraussetzung für die Replikation ist, ist es nicht möglich, Objekte in Buckets zu replizieren, die mit der Richtlinie Immutable Object Storage konfiguriert sind.

Verwendung eines IBM Kontos

Um Objekte zwischen Buckets im selben IBM-Konto zu replizieren, gehen Sie wie folgt vor:

  1. Nachdem Sie zu dem von Ihnen gewählten Quell-Bucket navigiert haben, klicken Sie auf die Registerkarte Konfiguration.
  2. Suchen Sie nach Bucket-Replikation und klicken Sie auf die Schaltfläche Replikation einrichten.
  3. Wählen Sie Replikationsquelle und klicken Sie auf Weiter.
  4. Wählen Sie die Instanz und den Bucket aus den Dropdown-Menüs aus. Alternativ dazu können Sie die Optionsschaltfläche auf Nein setzen und die CRN des Zielbereichs einfügen.
  5. Klicken Sie auf die Schaltfläche Berechtigungen prüfen.

Nun müssen Sie dem Quell-Bucket Writer Berechtigungen für den Ziel-Bucket erteilen. Es gibt mehrere Möglichkeiten, dies zu tun, aber die einfachste ist, die IBM Cloud Shell und die IBM Cloud CLI zu verwenden.

  1. Öffnen Sie ein IBM Cloud Shell in einem neuen Fenster oder Tab.
  2. Kopieren Sie den in der Object Storage Console angezeigten CLI-Befehl IBM Cloud und fügen Sie ihn in die neue Shell ein.
  3. Kehren Sie zum Fenster oder zur Registerkarte für die Eimerkonfiguration zurück, und klicken Sie erneut auf die Schaltfläche Berechtigungen prüfen.

Nun werden Sie eine Replikationsregel erstellen.

  1. Vergewissern Sie sich, dass das Optionsfeld Regelstatus auf Aktiviert gesetzt ist.
  2. Geben Sie der Regel einen Namen und eine Priorität sowie Präfix- oder Tag-Filter, die die Objekte einschränken, die der Replikationsregel unterliegen.
  3. Klicken Sie auf Fertig.

Verwendung verschiedener IBM Konten

Um Objekte zwischen Buckets in verschiedenen IBM Konten zu replizieren, gehen Sie wie folgt vor:

  1. Richten Sie eine IAM-Richtlinie für das Zielkonto IBM ein. Informationen zum Erstellen einer IAM-Richtlinie finden Sie unter Was sind IAM-Richtlinien und wer kann sie zuweisen?
  2. Auf der Seite Bucket-Konfiguration finden Sie die Konto-ID und die Service-Instanz-ID im CRN-Format.
  3. Klicken Sie in der Benutzeroberfläche IBM Cloud des Zielkontos auf Verwalten>Zugriff**(IAM)**.
  4. Klicken Sie im linken Bereich auf Authentifizierung.
  5. Klicken Sie auf „Erstellen“, um eine neue IAM-Richtlinie zu erstellen.
  6. Gewähren Sie die Konfiguration einer Dienstautorisierungsseite. Dies ist die Seite, auf der Sie nach der Erstellung einer neuen IAM-Richtlinie landen.
  7. Wählen Sie Anderes Konto und geben Sie die Konto-ID des Quellkontos an.
  8. Zugang zu den Diensten gewähren als Cloud Object Storage.
  9. Wählen Sie im Zugriffsbereich Spezifische Ressourcen.
  10. Wählen Sie Source Service Instance und geben Sie die Service-Instanz-ID für den Quell-Bucket ein.
  11. Wählen Sie unter Ziel Cloud Object Storage für den Source Bucket Access.
  12. Wählen Sie für Zielbereich Spezifische Ressourcen> Dienstinstanz**.
  13. Wählen Sie die Service-Instanz-ID des Zielkontos aus dem Dropdown-Menü.
  14. Wählen Sie je nach Bedarf die Rolle Objektschreiber oder Schreiber.

Die Object Writer-Rolle ist ausreichend, um die Replikation zu ermöglichen.

Terminologie

Quell-Bucket: Der Bucket, für den eine Replikationsrichtlinie konfiguriert ist. Sie ist die Quelle der replizierten Objekte.

Ziel-Bucket: Der Bucket, der in der Replikationsrichtlinie für den Quell-Bucket als Ziel definiert ist. Es ist das Ziel der replizierten Objekte. Wird auch als "Ziel"-Eimer bezeichnet.

Replikat: Das neue Objekt, das in einem Zielbereich aufgrund einer Anfrage an einen Quellbereich erstellt wird.

Was wird repliziert?

Neue Objekte, die über CopyObject, PutObject oder CompleteMultipartUpload erstellt werden, werden vom Quellbereich in den Zielbereich repliziert. Die replizierten Objekte erben die folgenden Metadatenfelder vom Quellobjekt: Etag, Last Modified Time, Version ID, user-attributes, und Tags.

Löschmarkierungen werden repliziert, wenn dies in der Replikationsrichtlinie konfiguriert ist.

Aktualisierungen der Tags einer Version werden vom Quellbereich in den Zielbereich repliziert.

Die folgenden Informationen werden nicht repliziert:

  • Durch Lebenszyklusereignisse ausgelöste Aktionen
  • Direkt ins Archiv geschriebene Objekte
  • Aus einer Archivebene wiederhergestellte Objekte
  • Mit SSE-C verschlüsselte Objekte
  • Objekt-ACLs

Einsatz von Replikation für Geschäftskontinuität und Notfallwiederherstellung

Die Replikation kann verwendet werden, um die Kontinuität des Dienstes im Falle eines Ausfalls zu gewährleisten:

  • Stellen Sie sicher, dass sich die Quell- und Ziel-Buckets an unterschiedlichen Orten befinden.
  • Vergewissern Sie sich, dass die neuesten Versionen der Objekte in beiden Buckets synchronisiert sind. Ein Werkzeug wie Rclone (der Befehl rclone check ) kann für die Überprüfung der Synchronität über die Befehlszeile nützlich sein.
  • Im Falle eines Ausfalls kann der Datenverkehr einer Anwendung auf den Ziel-Bucket umgeleitet werden.

Konsistenz und Datenintegrität

Während IBM Cloud Object Storage starke Konsistenz für alle Daten-IO-Operationen bietet, ist die Bucket-Konfiguration schließlich konsistent. Nachdem Sie die Replikationsregeln zum ersten Mal für einen Bucket aktiviert haben, kann es einige Augenblicke dauern, bis sich die Konfiguration im System verbreitet hat und neue Objekte repliziert werden können.

Fehlerbehandlung

Replikationsfehler können aus vielen Gründen auftreten, darunter (unter anderem) Fehlkonfigurationen von Buckets, Dienstausfälle, Benutzerinteraktionen mit dem Ziel-Bucket usw.

COS verfügt über integrierte Ausfallsicherheit, um Replikationsfehler zu bewältigen. Wenn ein Fehler auftritt, kann COS den Vorgang bis zu 30 Tage lang erneut versuchen. Die Häufigkeit der Wiederholungsversuche kann je nach Art des Fehlers variieren. Beispielsweise können Fehler, die durch seltene E/A-Fehler verursacht werden, innerhalb weniger Stunden erneut versucht werden, während Fehler aufgrund von Fehlkonfigurationen der Benutzer-Buckets einmal pro Tag erneut versucht werden können. Wird ein Fehler nicht innerhalb von 30 Tagen behoben, wird er vom System nicht mehr automatisch erneut versucht. Alle Langzeitausfälle lassen sich über ListBucketReplicationFailures.

Wenn Sie „veraltete“ Fehler, die länger als 30 Tage zurückliegen, erneut versuchen möchten, können Sie einen erneuten Versuch auslösen, indem Sie die PutBucketReplicationFailureReattempt.

Ursachen für Ausfälle

In der Antwort der „ ListBucketReplicationFailures “-API wird für jedes Fehlerelement der Parameter „ SyncFailureCause “ bereitgestellt, der die zuletzt bekannte Fehlerursache angibt. In der folgenden Tabelle sind die möglichen Ursachen aufgeführt:

Ursache Erläuterung
Versionsverwaltung im Ziel-Bucket deaktiviert Die Versionsverwaltung ist im Ziel-Bucket nicht aktiviert. Der Benutzer hat die Versionsverwaltung wahrscheinlich deaktiviert, nachdem die Replikation konfiguriert wurde.
Replikationsvorgang für den Ziel-Bucket nicht autorisiert Der COS-Dienst ist nicht berechtigt, den Ziel-Bucket im Namen des Benutzers zu ändern. Überprüfen Sie, ob in IAM weiterhin eine Service-zu-Service-Autorisierung zwischen den Quell- und Ziel-Bucket-Ressourcen besteht.
Remote-Bucket nicht gefunden Der Ziel-Bucket konnte nicht gefunden werden. Möglicherweise hat der Benutzer den Ziel-Bucket gelöscht. Überprüfen Sie, ob der Ziel-Bucket noch vorhanden ist.
Quelle/Remote-Bucket nicht gefunden oder deaktiviert Der Eimer wurde nicht gefunden oder ist unbrauchbar. Prüfen, ob der Bucket noch vorhanden ist. Sollte dies der Fall sein, wenden Sie sich bitte an den Kundendienst.
Zielobjekt nicht gefunden Es wurde versucht, eine Metadatenänderung (z. B. Tag-/Objektsperre) zu replizieren, aber das Zielobjekt existiert nicht. Der Benutzer hat das Objekt wahrscheinlich im Ziel-Bucket gelöscht, bevor die Änderung repliziert werden konnte.
Lokales Objekt nicht gefunden Das Quellobjekt wurde beim Replikationsversuch nicht gefunden. Der Benutzer hat das Quellobjekt wahrscheinlich kurz nach dem Erstellen bzw. Ändern gelöscht.
Die Objektsperre ist im Ziel-Bucket nicht aktiviert Es wurde versucht, die Object-Lock-Einstellungen auf ein Objekt zu übertragen, aber im Ziel-Bucket war Object Lock nicht aktiviert.
Der Verschlüsselungsschlüssel ist entweder nicht aktiv oder wurde gelöscht COS hat versucht, den Verschlüsselungsschlüssel aus „ Key Protect “ abzurufen (im Quell-Bucket sind SSE-KP und SSE-HPCS konfiguriert), doch der Schlüssel wurde gelöscht.
Die Endpunktinformationen der KMS-Instanz fehlen Der für das Auslesen des Verschlüsselungsschlüssels erforderliche Endpunkt des Key Management Service konnte nicht abgerufen werden. Sollte der Fehler weiterhin bestehen, wenden Sie sich bitte an den Kundendienst.
Unzureichende Berechtigungen zum Abrufen von KMS-Endpunktinformationen Die Quell-Bucket-Ressource verfügt nicht über die erforderlichen Berechtigungen, um den Endpunkt des Key Management Service abzufragen, der zum Lesen des Verschlüsselungsschlüssels erforderlich ist. Überprüfen Sie Ihre IAM-Richtlinie für die Autorisierung zwischen Diensten.
Interner Fehler Verschiedene interne Probleme, die die Replikation verhindern. Wenden Sie sich an die Kundenunterstützung.

IAM-Aktionen

Es gibt neue IAM-Aktionen im Zusammenhang mit der Replikation.

IAM-Aktion Rolle
cloud-object-storage.bucket.get_replication Manager, Schreibberechtigter, Leseberechtigter
cloud-object-storage.bucket.put_replication Manager, Schreibberechtigter
cloud-object-storage.bucket.delete_replication Manager, Schreibberechtigter
cloud-object-storage.bucket.get_replication_failures Manager, Schreibberechtigter, Leseberechtigter
cloud-object-storage.bucket.put_replication_reattempt Manager, Schreibberechtigter

Activity Tracker-Ereignisse

Die Replikation generiert zusätzliche Ereignisse.

Ereignisaktion Generiert am Beschreibung
cloud-object-storage.bucket-replication.create Quellenbucket Wenn ein Benutzer eine API-Anfrage an „ PutBucketReplication “ sendet
cloud-object-storage.bucket-replication.read Quellenbucket Wenn ein Benutzer eine API-Anfrage an „ GetBucketReplication “ sendet
cloud-object-storage.bucket-replication.delete Quellenbucket Wenn ein Benutzer eine API-Anfrage an „ DeleteBucketReplication “ sendet
cloud-object-storage.bucket-replication-failures.list Quellenbucket Wenn ein Benutzer eine API-Anfrage an „ ListBucketReplicationFailures “ sendet
cloud-object-storage.bucket-replication-failures.update Quellenbucket Wenn ein Benutzer eine API-Anfrage an „ PutReplicationFailureReattempt “ sendet
cloud-object-storage.object-replication.sync Quellenbucket Wenn COS ein Objekt aus dem Quell-Bucket repliziert
cloud-object-storage.object-replication.create Zielbucket Wenn COS eine neue Replikversion im Ziel-Bucket erstellt
cloud-object-storage.object-replication.update Zielbucket Wenn COS die Aktualisierung der Metadaten auf einer bestehenden Replik im Ziel-Bucket repliziert
cloud-object-storage.object-replication.delete Zielbucket Wenn COS einen Löschmarker im Ziel-Bucket repliziert

Für cloud-object-storage.bucket-replication.create-Ereignisse enthalten die folgenden Felder zusätzliche Informationen:

Feld Beschreibung
requestData.replication.num_sync_remote_buckets Die Anzahl der in den Bucketreplikationsregeln angegebenen Zielbuckets.
requestData.replication.failed_remote_sync Die CRNs der Buckets, die die Replikationsprüfung nicht bestanden haben.

Wenn die Replikation aktiv ist, können Operationen für Objekte die folgenden zusätzlichen Informationen generieren:

Feld Beschreibung
requestData.replication.replication_throttled Gibt an, ob die Replikation des Objekts auf der Quelle aufgrund eines Regulierungsmechanismus verzögert wurde.
requestData.replication.destination_bucket_id Der CRN des Zielbuckets.
requestData.replication.sync_type Die Art des Synchronisierungsvorgangs.
- content zeigt an, dass die Objektdaten und alle Metadaten in das Ziel geschrieben wurden.
- tag zeigt an, dass Objekt-Tags repliziert wurden.
- retention zeigt an, dass die Einstellungen für die Objektsperre repliziert wurden.
- legal_hold zeigt an, dass die Einstellungen für die Sperrung von Objekten repliziert wurden.
- delete zeigt an, dass die Löschmarkierung in das Ziel geschrieben wurde.
responseData.replication.source_bucket_id Der CRN des Quellenbuckets.
responseData.replication.result Mögliche Werte sind success, failure (gibt einen Serverfehler an), user (gibt einen Benutzerfehler an).
responseData.replication.message Die Antwortnachricht HTTP (z. B. OK).

Sie können ein Objekt von dem Zeitpunkt, zu dem es in die Quelle geschrieben wird, bis zu dem Zeitpunkt, zu dem es auf das Ziel geschrieben wird, verfolgen. Suchen Sie nach der Anforderungs-ID, die der Objektschreiboperation zugeordnet ist. Es sollten drei Ereignisse angezeigt werden:

  • Die ursprüngliche PUT.
  • Die Synchronisationsanforderung von der Quelle.
  • Die PUT-Anforderung auf dem Ziel.

Jede dieser drei fehlenden Angaben weist auf einen Fehler hin.

Nutzung und Abrechnung

Alle Replikate sind selbst Objekte und tragen wie alle anderen Daten zur Nutzung bei. Eine erfolgreiche Replikation führt zu abrechnungsfähigen PUT-, GET-und HEAD-Anforderungen, obwohl die im Replikationsprozess verbrauchte Bandbreite nicht in Rechnung gestellt wird.

Die Replikation erzeugt zusätzliche Metriken zur Verwendung mit IBM Cloud Monitoring:

  • ibm_cos_bucket_replication_sync_requests_issued
  • ibm_cos_bucket_replication_sync_requests_received

Interaktionen

Versionssteuerung

Die Versionierung ist obligatorisch, um die Replikation zu aktivieren. Nachdem Sie die Versionssteuerung für die Quellen-und Zielbuckets aktiviert und die Replikation für das Quellenbucket konfiguriert haben, können die folgenden Probleme auftreten:

  • Wenn Sie versuchen, die Versionssteuerung für das Quellenbucket zu deaktivieren, gibt Object Storage einen Fehler zurück. Sie müssen die Replikationskonfiguration entfernen, bevor Sie die Versionssteuerung für das Quellenbucket inaktivieren können.
  • Wenn Sie die Versionssteuerung für das Zielbucket inaktivieren, schlägt die Replikation fehl.

Objektsperre

Die Objekt-Sperre kann für Buckets mit Replikation aktiviert werden. Wenn Quellobjekte mit Object Lock (Aufbewahrungspflicht und/oder rechtliche Sperre) erstellt werden oder wenn Object Lock für bestehende Objekte aktualisiert wird, wird dies auf das Ziel repliziert.

„Object Lock“ kann nur repliziert werden, wenn „Object Lock“ im Ziel-Bucket aktiviert ist. Daher wird empfohlen, „Object Lock“ im Ziel-Bucket zu aktivieren, sofern diese Funktion im Quell-Bucket aktiviert ist.

Die folgende Tabelle gibt einen Überblick über das Verhalten, wenn Quell- und Ziel-Buckets unterschiedliche „Object Lock“-Konfigurationen aufweisen:

Sperre des Quellobjekts Sperre des Zielobjekts Verhalten
Aktiviert Aktiviert Alle Objekt-Sperrzustände aus der Quelle werden auf das Ziel repliziert.

Wenn das Quellobjekt ohne Objekt-Sperre erstellt wird, wird möglicherweise die Standardaufbewahrungsdauer des Ziel-Buckets auf die Replik angewendet.

Die Replikation von Objekt-Locks erfolgt unter Einhaltung aller Einschränkungen von „ S3 “ für Objekt-Locks. Beispielsweise kann die Aufbewahrungsfrist auf der Replik im Compliance-Modus niemals verkürzt werden, wenn der Benutzer eigenständig Änderungen am Zielort vorgenommen hat.
Deaktiviert Aktiviert Quellobjekte können nicht mit einer Objektsperre versehen sein, daher werden Objektsperren niemals von der Quelle auf das Ziel übertragen.
Wenn für den Ziel-Bucket eine Standard-Aufbewahrungsdauer festgelegt ist, gilt diese für neu erstellte Replikate.
Aktiviert Deaktiviert Mit „Object Lock“ erstellte Quellobjekte werden nicht repliziert. Diese Fehlversuche werden von COS erneut versucht und können repliziert werden, sobald „Object Lock“ für den Ziel-Bucket aktiviert ist. Auch Aktualisierungen der Aufbewahrungsfrist bzw. der rechtlichen Aufbewahrungspflicht für bestehende Objekte können erst dann repliziert werden, wenn „Object Lock“ am Zielort aktiviert ist.

Quellobjekte, die ohne Object Lock erstellt wurden, können weiterhin repliziert werden.

Key Protect-Verschlüsselung

Quellenobjekte werden mit dem Rootschlüssel des Quellenbuckets verschlüsselt und Replikate werden mit dem Rootschlüssel des Zielbuckets verschlüsselt.

Lebenszykluskonfigurationen

Wenn eine Lebenszyklusrichtlinie für ein Zielbucket aktiviert ist, basieren die Lebenszyklusaktionen auf der ursprünglichen Erstellungszeit des Objekts in der Quelle und nicht auf der Zeit, zu der das Replikat im Zielbucket verfügbar wird.

Immutable Object Storage (IOS)

Die Verwendung von Aufbewahrungsrichtlinien für ein Bucket mit aktivierter Versionssteuerung ist nicht möglich. Da die Versionssteuerung eine Voraussetzung für die Replikation ist, ist es nicht möglich, Objekte in ein Bucket oder aus einem Bucket mit aktiviertem unveränderlichen Object Storage zu replizieren.

Traditionelle Bucket-Firewalls

Buckets, die traditionelle Firewalls zum Beschränken des Zugriffs auf Basis von IP-Adressen verwenden, können die Replikation nicht verwenden, da die Hintergrundservices, die die Objekte replizieren, keine festen IP-Adressen haben und die Firewall nicht passieren können.

Es wird empfohlen, stattdessen kontextbasierte Einschränkungen zu verwenden, um den Zugriff auf der Basis von Netzinformationen zu steuern.

Cloud Functions und Code Engine

Durch die Konfiguration der Replikation wird zu diesem Zeitpunkt kein -Auslöser für Cloud Functions-oder Code Engine-Ereignisse bereitgestellt, aber durch das Schreiben und Löschen von Objekten werden Object:Write-und Object:Delete-Benachrichtigungen für die Quellen-und Zielbuckets erstellt. Diese Ereignisse sind mit einem Feld notifications.replication_type versehen, das angibt, ob das Ereignis eine Synchronisation ausgelöst hat oder von einer Synchronisation ausgelöst wurde.

Vorhandene Objekte replizieren

Eine Replikationsregel kann nur auf Objekte angewendet werden, nachdem die Regel konfiguriert und auf ein Bucket angewendet wurde. Wenn in einem Bucket Objekte vorhanden sind, die repliziert werden müssen, müssen die Replikationsprozesse über das Vorhandensein der Objekte informiert werden. Dies kann ohne großen Aufwand durch die Verwendung der Operation PUT copy zum Kopieren von Objekten auf sich selbst erreicht werden.

Dieser Prozess setzt einige Objektmetadaten zurück, einschließlich Erstellungszeitmarken. Dies wirkt sich auf Lebenszyklusrichtlinien und alle anderen Services aus, die Erstellungszeitmarken oder Änderungszeitmarken verwenden (z. B. Netze zur Bereitstellung von Inhalten). Stellen Sie sicher, dass alle Unterbrechungen, die beim Zurücksetzen von Objektmetadaten auftreten können, entsprechend behandelt werden.

Der Prozess umfasst Folgendes:

  1. Erstellen einer Liste aller Objekte in einem Bucket, für die Replikationsregeln gelten sollen
  2. Iterieren über diese Liste und Ausführen einer PUT copy-Operation für jedes Objekt, wobei die Quelle mit dem Ziel der Anforderung identisch ist.

In diesem Beispiel wird nur die neue Version des von der Anforderung PUT copy erstellten Objekts repliziert. Um alle Versionen des Objekts zu replizieren, muss auch jede einzelne Version kopiert werden.

Das folgende Beispiel ist in Pythongeschrieben, aber der Algorithmus kann in jeder Programmiersprache oder jedem Kontext angewendet werden.

import os
import sys
import ibm_boto3
from ibm_botocore.config import Config

# Create client connection
cos = ibm_boto3.client("s3",
                       ibm_api_key_id=os.environ.get('IBMCLOUD_API_KEY'),
                       ibm_service_instance_id=os.environ['SERVICE_INSTANCE_ID'],
                       config=Config(signature_version="oauth"),
                       endpoint_url=os.environ['US_GEO']
                       )

# Define the bucket with existing objects for replication
bucket = os.environ['BUCKET']

def copy_in_place(BUCKET_NAME):
    print("Priming existing objects in " + bucket + " for replication...")

    paginator = cos.get_paginator('list_objects_v2')
    pages = paginator.paginate(Bucket=bucket)

    for page in pages:
        for obj in page['Contents']:
            key = obj['Key']
            print("  * Copying " + key + " in place...")
            try:
                headers = cos.head_object(
                    Bucket=bucket,
                    Key=key
                    )
                md = headers["Metadata"]
                cos.copy_object(
                    CopySource={
                        'Bucket': bucket,
                        'Key': key
                        },
                    Bucket=bucket,
                    Key=key,
                    TaggingDirective='COPY',
                    MetadataDirective='REPLACE',
                    Metadata=md
                    )
                print("    Success!")
            except Exception as e:
                print("    Unable to copy object: {0}".format(e))
    print("Existing objects in " + bucket + " are now subject to replication rules.")

copy_in_place(bucket)

REST-API-Beispiele

Die folgenden Beispiele werden zur Vereinfachung der Verwendung von cURL gezeigt. Umgebungsvariablen werden verwendet, um benutzerspezifische Elemente wie $BUCKET, $TOKEN und $REGION darzustellen. Beachten Sie, dass $REGION auch alle Netztypspezifikationen enthält. Das Senden einer Anforderung an ein Bucket in us-south über das private Netz erfordert, dass die Variable auf private.us-south gesetzt wird.

Replikation in einem Bucket aktivieren

Die Replikationskonfiguration wird als XML im Hauptteil der Anforderung bereitgestellt. Neue Anforderungen überschreiben alle vorhandenen Replikationsregeln, die im Bucket vorhanden sind.

Eine Replikationskonfiguration muss mindestens eine Regel enthalten und kann maximal 1.000 Regeln enthalten. Jede Regel gibt eine Untergruppe von zu replizierenden Objekten an, indem sie die Objekte im Quellenbucket filtert. Fügen Sie für jedes Subset eine Regel hinzu, um weitere zu replizierende Untergruppen von Objekten auszuwählen.

Fügen Sie das Element Filter als untergeordnetes Element des Elements Rule hinzu, um eine Untergruppe der Objekte im Quellenbucket anzugeben, auf die eine Replikationsregel angewendet werden soll. Sie können Objekte auf der Basis eines Objektschlüsselpräfix und/oder eines oder mehrerer Objekttags filtern. Wenn Sie das Element Filter zur Konfiguration hinzufügen, müssen Sie auch die folgenden Elemente hinzufügen: DeleteMarkerReplication, Status und Priority.

Optionale Header

Optionale Header
Überschrift Typ Beschreibung
Content-MD5 Zeichenfolge Der nach dem „ base64 “-Verfahren kodierte 128-Bit- MD5-Hash der Nutzlast, der als Integritätsprüfung dient, um sicherzustellen, dass die Nutzlast während der Übertragung nicht verändert wurde.
x-amz-checksum-crc32 Zeichenfolge Dieser Header ist die Base64 kodierte, 32-Bit CRC32 Prüfsumme des Objekts.
x-amz-checksum-crc32c Zeichenfolge Dieser Header ist die Base64 kodierte, 32-Bit CRC32C Prüfsumme des Objekts.
x-amz-checksum-crc64nvme Zeichenfolge Dieser Header ist die Base64 kodierte, 64-Bit CRC64NVME Prüfsumme des Objekts. Die Prüfsumme CRC64NVME ist immer eine vollständige Objektprüfsumme.
x-amz-checksum-sha1 Zeichenfolge Dieser Header ist der Base64 verschlüsselte 160-Bit-Digest des Objekts SHA1.
x-amz-checksum-sha256 Zeichenfolge Dieser Header ist der Base64 kodierte, 256-Bit SHA256 Digest des Objekts.

Ein Content-MD5-Header oder ein checksum-Header (einschließlich x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1 oder x-amz-checksum-sha256) ist als Integritätsprüfung für die Nutzdaten erforderlich. Der Hauptteil der Anforderung muss einen XML-Block mit dem folgenden Schema enthalten:

Element Typ Untergeordnete Elemente Vorfahre Einschränkung
ReplicationConfiguration Container Rule Keine Grenzwert 1.
Rule Container ID, Status, Filter, DeleteMarkerReplication, Destination, Priority ReplicationConfiguration Grenzwert 1000.
ID Zeichenfolge Keine Rule Muss aus (a-z,A-Z0-9) und den folgenden Symbolen bestehen: ! _ . * ' ( ) -
Destination Container Bucket Rule Grenzwert 1.
Bucket Zeichenfolge Keine Destination Der CRN des Zielbuckets.
Priority Integer Keine Rule Jeder Regel wird eine Priorität zugeordnet. Es kann vorkommen, dass mehrere Regeln auf ein hochgeladenes Objekt angewendet werden können. In diesen Situationen wendet Objektspeicher die zutreffende Regel mit der höheren Priorität an, wenn dieses Objekt repliziert wird. Daher kann nur eine Replikationsregel auf jedes Objekt angewendet werden, unabhängig davon, wie viele Regeln in der Replikationsrichtlinie eine Übereinstimmung mit dem Objekt sein können. Beachten Sie, dass je höher die Zahl, desto höher die Priorität.
Status Zeichenfolge Keine Rule Gibt an, ob die Regel aktiviert ist. Die gültigen Werte sind Enabled oder Disabled.
DeleteMarkerReplication Container Status Rule Grenzwert 1.
Status Zeichenfolge Keine DeleteMarkerReplication Gibt an, ob der Objektspeicher Löschmarkierungen repliziert. Die gültigen Werte sind Enabled oder Disabled.
Filter Zeichenfolge Prefix, Tag, AND Rule Ein Filter, der die Untergruppe von Objekten angibt, für die die Replikationsregel gilt. Ein Filter muss genau ein untergeordnetes Element Prefix, Tag oder And angeben.
Prefix Zeichenfolge Keine Filter Ein Präfix für den Objektschlüsselnamen, das die Untergruppe der Objekte angibt, für die die Regel gilt.
Tag Zeichenfolge Keine Filter Ein Container für die Angabe eines Tagschlüssels und -werts. Die Regel gilt nur für Objekte, deren Tag-Set den Tag enthält.
And Zeichenfolge Keine Filter Ein Container für die Angabe von Regelfiltern Die Filter bestimmen die Untergruppe der Objekte, für die die Regel gilt. Dieses Element ist nur erforderlich, wenn Sie mehrere Filter angeben.
Key Zeichenfolge Keine Tag Der Tagschlüssel.
Value Zeichenfolge Keine Tag Der Wert des Tags.

In diesem Beispiel werden alle neuen Objekte repliziert, jedoch keine Löschmarkierungen.

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN' \
     -H 'Content-MD5: exuBoz2kFBykNwqu64JZuA==' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d $'<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
            <Rule>
              <ID>SimpleReplication</ID>
              <Priority>1</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Disabled</Status>
              </DeleteMarkerReplication>
              <Filter/>
              <Destination>
                <Bucket>$DESTINATION_CRN</Bucket>
              </Destination>
          	</Rule>
          </ReplicationConfiguration>'

In diesem Beispiel werden alle Objekte mit einem Schlüssel (Name), der mit project_a/ beginnt, in dem Bucket, das mit $DESTINATION_CRN_A angegeben ist, und alle Objekte mit einem Schlüssel (Name), der mit project_b/ beginnt, in dem Bucket, das mit $DESTINATION_CRN_B angegeben ist, und alle Objekte, die einen Objekttag mit dem Schlüssel Client und dem Wert ACME haben, in einem dritten Bucket, das mit $DESTINATION_CRN_C angegeben ist, repliziert und in allen Fällen Löschmarkierungen repliziert.

Angenommen, die folgenden vier Objekte werden dem Quellenbucket hinzugefügt. Sie werden wie nachfolgend beschrieben in Zielbuckets repliziert:

  1. project_a/foo.mp4
  2. project_a/bar.mp4
  3. project_b/baz.pdf
  4. In: project_b/acme.pdf. Dieses vierte Objekt hat auch einen Objekttag mit dem Schlüssel Client und dem Wert ACME.

Aufgrund der folgenden Regeln werden die Objekte 1 und 2 in $DESTINATION_CRN_A repliziert. Objekt 3 wird in $DESTINATION_CRN_B repliziert. Objekt 4 wird nur in $DESTINATION_CRN_C repliziert, weil die Regel mit der ID AcmeCorp einen höheren Prioritätswert hat als die Regel mit der ID ProjectB und während sie die Anforderungen für beide Regeln erfüllt, unterliegt sie nur erstem.

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN' \
     -H 'Content-MD5: exuBoz2kFBykNwqu64JZuA==' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d $'<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
            <Rule>
              <ID>ProjectA</ID>
              <Priority>10</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Enabled</Status>
              </DeleteMarkerReplication>
              <Filter>
                <Prefix>project_a/</prefix>
              </Filter>
              <Destination>
                <Bucket>$DESTINATION_CRN_A</Bucket>
              </Destination>
          	</Rule>
            <Rule>
              <ID>ProjectB</ID>
              <Priority>5</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Enabled</Status>
              </DeleteMarkerReplication>
              <Filter>
                <Prefix>project_b/</prefix>
              </Filter>
              <Destination>
                <Bucket>$DESTINATION_CRN_B</Bucket>
              </Destination>
          	</Rule>
            <Rule>
              <ID>AcmeCorp</ID>
              <Priority>20</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Enabled</Status>
              </DeleteMarkerReplication>
              <Filter>
                <Tag>
                  <Key>Client</Key>
                  <Value>ACME</Value>
                </Tag>
              </Filter>
              <Destination>
                <Bucket>$DESTINATION_CRN_C</Bucket>
              </Destination>
          	</Rule>
          </ReplicationConfiguration>'

Eine erfolgreiche Anforderung gibt eine 200-Antwort zurück.

Replikationskonfiguration für ein Bucket anzeigen

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN'

Dadurch wird ein XML-Antworthauptteil mit dem entsprechenden Schema zurückgegeben:

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Rule>
    <ID>SimpleReplication</ID>
    <Status>ENABLED</Status>
    <DeleteMarkerReplication>
      <Status>DISABLED</Status>
    </DeleteMarkerReplication>
    <Destination>
      <Bucket>crn:v1:bluemix:public:cloud-object-storage:global:a/9978e07eXXXXXXXX66c89c428028654:ef1c725e-XXXX-4967-bcc1-734c03a2b846:bucket:replication-destination</Bucket>
    </Destination>
    <Priority>1</Priority>
    <Filter/>
  </Rule>
</ReplicationConfiguration>

Die Replikationskonfiguration für einen Bucket löschen

curl -X "DELETE" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN'

Eine erfolgreiche Anforderung gibt eine 204-Antwort zurück.

Fehler bei der Replikation eines Buckets auflisten

Beispielanfrage unter Verwendung von curl

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?ibm-replication-failures" \
     -H 'Authorization: bearer $TOKEN'

Optionale Abfrageparameter

Name Typ Beschreibung
Kodierungsart Zeichenfolge Wenn in einem Objektnamen Unicode-Zeichen verwendet werden, die von XML nicht unterstützt werden, kann dieser Parameter auf „url“ gesetzt werden, um die Antwort korrekt zu kodieren.
max-keys Zeichenfolge Schränkt die Anzahl der Fehler ein, die in der Antwort angezeigt werden sollen. Der Standardwert und das Maximum beträgt 1.000.
erster-Synchronisierungsversuch-vor Zeichenfolge Gibt den Zeitstempel an, ab dem die Auflistung beginnen soll, in umgekehrter chronologischer Reihenfolge. Der Zeitpunkt entspricht dem Zeitpunkt, zu dem die Replikation ursprünglich ausgelöst wurde ( Feld im Eintrag). Somit enthält die Auflistung alle Replikationsfehler, die mindestens so alt sind wie der angegebene Zeitstempel.
Fortsetzungs-Token Zeichenfolge Gibt den Fehler an, ab dem die Auflistung beginnen soll, in umgekehrter chronologischer Reihenfolge. Dies dient der Paginierung, falls nach den in der letzten Abfrage zurückgegebenen Einträgen noch weitere Einträge vorhanden sind.

Beispielantwort

<ListReplicationFailureResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Name>example</Name>
    <FirstSyncAttemptedBefore>2025-12-15T00:00:00.000Z</FirstSyncAttemptedBefore>
    <MaxKeys>10</MaxKeys>
    <IsTruncated>false</IsTruncated>
    <EncodingType>false</EncodingType>
    <KeyCount>2</KeyCount>
    <Contents>
        <Key>test-obj+*1765434016787</Key>
        <VersionId>00000000-0000-0000-0000-019b0c114413</VersionId>
        <SyncType>Content</SyncType>
        <FirstSyncAttempted>2025-12-11T06:20:16.787Z</FirstSyncAttempted>
        <LastSyncAttempted>2025-12-11T06:20:16.787Z</LastSyncAttempted>
        <SyncFailureCause>Versioning disabled on destination bucket</SyncFailureCause>
    </Contents>
    <Contents>
        <Key>test-obj+*1765434016786</Key>
        <VersionId>00000000-0000-0000-0000-019b0c114412</VersionId>
        <SyncType>Content</SyncType>
        <FirstSyncAttempted>2025-12-11T06:20:16.786Z</FirstSyncAttempted>
        <LastSyncAttempted>2025-12-11T06:20:16.786Z</LastSyncAttempted>
        <SyncFailureCause>Replication operation not authorized on target bucket</SyncFailureCause>
    </Contents>
</ListReplicationFailureResult>

Antwortelemente

Name Typ Beschreibung
ListReplicationFailureResult Container Tag auf der obersten Ebene
Name Zeichenfolge Name des Buckets, der gerade aufgelistet wird.
FirstSyncAttemptedBefore Zeichenfolge ISO-8601 Datum und Zeitstempel der angeforderten ?first-sync-attempted-before
MaxKeys Zahl Maximale Anzahl an Schlüsseln, die für dieses Inserat angefordert wurde.
IsTruncated Boolescher Wert Ob die aktuelle Auflistung unvollständig ist (d. h., ob nach dem letzten in dieser Auflistung angezeigten Element weitere Fehler folgen). Wenn true gilt, wird NextContinuationToken immer bereitgestellt.
EncodingType Zeichenfolge Der für dieses Angebot angeforderte Kodierungstyp.
KeyCount Zahl Anzahl der fehlerhaften Elemente, die in dieser Auflistung zurückgegeben werden.
ContinuationToken Zeichenfolge Das für diesen Eintrag angegebene Fortsetzungs-Token.
NextContinuationToken Zeichenfolge Nächstes Fortsetzungs-Token, das für die Seitenumschaltung verwendet werden soll, falls die aktuelle Auflistung abgeschnitten wurde.

Wiederholungsversuche für veraltete Replikationsfehler in einem Bucket planen

Dadurch wird ein erneuter Versuch für alle Replikationsfehler geplant, einschließlich aller „veralteten“ Fehler, die älter als 30 Tage sind und für die das System keine automatischen Wiederholungsversuche mehr durchführen kann. Langfristige Replikationsfehler werden in 24-Stunden-Zyklen bearbeitet. Durch das Senden dieser Anfrage werden für die veralteten Fehler im Zyklus, der um Mitternacht GMT beginnt, erneute Versuche geplant. Wenn beispielsweise eine Anfrage unter 2026-01-01T01:00:00Z gestellt wird, ist der früheste Zeitpunkt, zu dem diese Fehler bearbeitet werden, 2026-01-02T00:00:00Z. Bei erfolgreicher Anfrage wird dieser Zeitstempel auch im Antwort-Header „ x-ibm-replication-reattempt-scheduled-time “ angegeben. Mehrere Anfragen, die am selben Tag in GMT eingehen (d. h. die denselben geplanten Zeitpunkt ergeben), sind idempotent.

Jeder veraltete Fehler wird einmal nach bestem Bemühen erneut versucht – die Ausführung erfolgt, es wird jedoch keine Garantie für den Zeitpunkt der Ausführung gegeben.

Beispielanfrage unter Verwendung von curl

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?ibm-replication-reattempt" \
     -H 'Authorization: bearer $TOKEN'

Beispielantwort

HTTP/1.1 204 No Content
Connection: close
...
x-ibm-replication-reattempt-scheduled-time: Fri, 12 Dec 2025 00:00:00 GMT

SDK-Beispiele

In den folgenden Beispielen werden die IBM COS-SDKs für Python und Node.jsverwendet, obwohl die Implementierung der Objektversionierung mit jeder S3-compatible Bibliothek oder jedem Tool, die bzw. das die Einstellung angepasster Endpunkte ermöglicht, vollständig kompatibel sein sollte. Für die Verwendung von Tools anderer Anbieter sind HMAC-Berechtigungsnachweise erforderlich, um AWS V4-Signaturen zu berechnen. Weitere Informationen zu HMAC-Berechtigungsnachweisen finden Sie in der Dokumentation.

Python

Die Aktivierung der Versionssteuerung mit dem IBM COS-SDK für Python kann mithilfe der Syntax des Low-Level-Clients erfolgen.

Verwendung eines Clients:

#!/usr/bin/env python3

import ibm_boto3
from ibm_botocore.config import Config
from ibm_botocore.exceptions import ClientError

# Define constants
API_KEY = os.environ.get('IBMCLOUD_API_KEY')
SERVICE_INSTANCE = os.environ.get('SERVICE_INSTANCE_ID')
ENDPOINT = os.environ.get('ENDPOINT')

BUCKET = "my-replication-bucket" # The bucket that will enable replication.

# Create resource client with configuration info pulled from environment variables.
cosClient = ibm_boto3.client("s3",
                         ibm_api_key_id=API_KEY,
                         ibm_service_instance_id=SERVICE_INSTANCE,
                         config=Config(signature_version="oauth"),
                         endpoint_url=ENDPOINT
                         )

response = cosClient.put_bucket_versioning(
    Bucket=BUCKET,
    ReplicationConfiguration={
        'Rules': [
            {
                'ID': 'string',
                'Priority': 123,
                'Filter': {
                    'Prefix': 'string',
                    'Tag': {
                        'Key': 'string',
                        'Value': 'string'
                    },
                    'And': {
                        'Prefix': 'string',
                        'Tags': [
                            {
                                'Key': 'string',
                                'Value': 'string'
                            },
                        ]
                    }
                },
                'Status': 'Enabled'|'Disabled',
                'Destination': {
                    'Bucket': 'string',
                },
                'DeleteMarkerReplication': {
                    'Status': 'Enabled'|'Disabled'
                }
            },
        ]
    }
)

Auflisten der Versionen eines Objekts mit demselben Client:

resp = cosClient.list_object_versions(Prefix='some-prefix', Bucket=BUCKET)

Beachten Sie, dass die Python-APIs sehr flexibel sind und es viele verschiedene Möglichkeiten gibt, dieselbe Task auszuführen.

Node.js

Aktivieren der Versionssteuerung mit dem IBM COS SDK for Node.js:

const IBM = require('ibm-cos-sdk');

var config = {
    endpoint: '<endpoint>',
    apiKeyId: '<api-key>',
    serviceInstanceId: '<resource-instance-id>',
};

var cos = new IBM.S3(config);

var params = {
  Bucket: 'STRING_VALUE', /* required */
  ReplicationConfiguration: { /* required */
    Role: 'STRING_VALUE', /* required */
    Rules: [ /* required */
      {
        Destination: { /* required */
          Bucket: 'STRING_VALUE', /* required */
        },
        Status: Enabled | Disabled, /* required */
        Filter: {
          And: {
            Prefix: 'STRING_VALUE',
            Tags: [
              {
                Key: 'STRING_VALUE', /* required */
                Value: 'STRING_VALUE' /* required */
              },
              /* more items */
            ]
          },
          Prefix: 'STRING_VALUE',
          Tag: {
            Key: 'STRING_VALUE', /* required */
            Value: 'STRING_VALUE' /* required */
          }
        },
        ID: 'STRING_VALUE',
        Prefix: 'STRING_VALUE',
        Priority: 'NUMBER_VALUE',
        }
      }
    ]
  },
  ContentMD5: 'STRING_VALUE',
};
cos.putBucketReplication(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});