Objekte in IBM Cloud® Object Storage replizieren

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 Konfigurationsfenster oder zur Registerkarte des Buckets 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. Weisen Sie der Regel einen Namen und eine Priorität zu sowie gegebenenfalls Präfix- oder Tag-Filter, die die Objekte einschränken, für die die Replikationsregel gilt.
  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 landen, nachdem Sie eine neue IAM-Richtlinie erstellt haben.

  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 mit CopyObject, PutObject, oder erstellt wurden, CompleteMultipartUpload werden vom Quell-Bucket in den Ziel-Bucket repliziert. Die replizierten Objekte übernehmen die folgenden Metadatenfelder vom Quellobjekt: Etag, Last Modified Time, Version ID, user-attributes, und Tags.

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

Änderungen an den Tags einer Version werden vom Quell-Bucket in den Ziel-Bucket 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 und Benutzerinteraktionen mit dem Ziel-Bucket.

Object Storage verfügt über integrierte Ausfallsicherheit, um Replikationsfehler zu bewältigen. Wenn ein Fehler auftritt, kann Object Storage 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 langfristigen Fehler lassen sich mithilfe von ListBucketReplicationFailures auflisten.

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 Dienst Object Storage 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 Object Storage hat versucht, den Verschlüsselungsschlüssel aus Key Protect abzurufen (im Quell-Bucket sind SSE-KP/SSE-HPCS konfiguriert), aber 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 Kundensupport.
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 Object Storage ein Objekt aus dem Quell-Bucket repliziert
cloud-object-storage.object-replication.create Zielbucket Wenn Object Storage eine neue Replikversion im Ziel-Bucket erstellt
cloud-object-storage.object-replication.update Zielbucket Wenn Object Storage, eine Aktualisierung der Metadaten auf eine vorhandene Replik im Ziel-Bucket repliziert
cloud-object-storage.object-replication.delete Zielbucket Wenn Object Storage e eine Löschmarkierung 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 (Aufbewahrungsfrist 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. Aktivieren Sie daher Object Lock im Ziel-Bucket, wenn es 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 Object Lock-Zustände der Quelle werden auf das Ziel repliziert.

Wenn das Quellobjekt ohne Object Lock erstellt wird, kann die Standardaufbewahrungsdauer des Ziel-Buckets auf die Replik angewendet werden.

Die Object Lock-Replikation befolgt alle Einschränkungen von S3 Object Lock. 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 Object Lock versehen sein, daher werden Object Lock-Zustände niemals von der Quelle zum Ziel übertragen.
Wenn für den Ziel-Bucket eine Standard-Aufbewahrungsdauer festgelegt ist, wird diese auf neu erstellte Replikate angewendet.
Aktiviert Deaktiviert Mit Object Lock erstellte Quellobjekte werden nicht repliziert. Diese Fehler werden von Object Storage erneut versucht und können repliziert werden, sobald Object Lock für den Ziel-Bucket aktiviert ist. Aktualisierungen der Aufbewahrungsfrist bzw. der rechtlichen Aufbewahrungspflicht für bestehende Objekte können ebenfalls 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

Quellobjekte werden mit dem Root-Schlüssel des Quell-Buckets verschlüsselt, Replikate mit dem Root-Schlüssel des Ziel-Buckets.

Lebenszykluskonfigurationen

Wenn für einen Ziel-Bucket eine Lebenszyklusrichtlinie aktiviert ist, basieren die Lebenszyklusaktionen auf dem ursprünglichen Erstellungszeitpunkt des Objekts an der Quelle und nicht auf dem Zeitpunkt, zu dem die Replik im Ziel-Bucket 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.

Verwenden Sie stattdessen kontextbasierte Einschränkungen, um den Zugriff auf der Grundlage von Netzwerkinformationen zu steuern.

Code Engine

Die Konfiguration der Replikation löst derzeit keine Trigger für Code Engine-Ereignisse aus, aber beim Schreiben und Löschen von Objekten werden Benachrichtigungen Object:Delete sowohl für den Quell- als auch Object:Write für den Ziel-Bucket generiert. Diese Ereignisse sind mit einem Feld notifications.replication_type versehen, das angibt, ob das Ereignis eine Synchronisierung ausgelöst hat oder durch eine Synchronisierung 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 Vorgang setzt einige Objektmetadaten zurück, darunter auch die Zeitstempel der Erstellung. Dies wirkt sich auf Lebenszyklusrichtlinien und alle anderen Dienste aus, die Zeitstempel für die Erstellung oder Änderung verwenden (z. B. Content-Delivery-Netzwerke). 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 durch die Anfrage PUT copy erstellten Objekts repliziert. Um alle Versionen des Objekts zu replizieren, müsste 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 Anfragen überschreiben alle vorhandenen Replikationsregeln, die für den Bucket gelten.

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 base64-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 Müssen 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 der Objektspeicher bei der Replikation dieses Objekts die geltende Regel mit der höheren Priorität an. 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.

Dieses Beispiel repliziert alle neuen Objekte, 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, deren Schlüssel (Name) mit beginnt, in project_a/ den mit identifizierten Bucket repliziert $DESTINATION_CRN_A, ebenso alle Objekte, deren Schlüssel (Name) mit beginnt $DESTINATION_CRN_B, in project_b/ den mit identifizierten Bucket sowie alle Objekte, die ein Objekt-Tag mit dem Schlüssel Client und dem Wert aufweisen, in ACME einen dritten, mit identifizierten Bucket $DESTINATION_CRN_C; in allen Fällen werden Löschmarkierungen repliziert.

Angenommen, die folgenden vier Objekte werden dem Quellenbucket hinzugefügt. Sie werden wie unten beschrieben in die Ziel-Buckets 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 nach repliziert, da $DESTINATION_CRN_C die Regel mit der ID einen höheren Prioritätswert hat AcmeCorp als die Regel mit der ID und ProjectB es zwar die Anforderungen beider Regeln erfüllt, jedoch nur der erstgenannten unterliegt.

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.

Auflistung von Replikationsfehlern für einen Bucket

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 Begrenzt die Anzahl der Fehler, die in der Antwort angezeigt werden. 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. Die Zeitangabe 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 aufgeführten Buckets.
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 abgeschnitten wurde (das heißt, es gibt weitere Fehler nach dem letzten in dieser Auflistung angezeigten Element). 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 abgelaufene Fehlversuch wird einmal nach bestem Bemühen wiederholt – die Ausführung erfolgt, es wird jedoch keine Garantie für den Zeitpunkt 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

Die folgenden Beispiele verwenden die IBM Cloud Object Storage-SDKs für Python und Node.js, wobei die Implementierung der Objektversionierung vollständig kompatibel mit jeder S3-compatiblen Bibliothek oder jedem S3-compatible n Tool sein sollte, das die Festlegung benutzerdefinierter Endpunkte ermöglicht. 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 Versionsverwaltung mithilfe des IBM Cloud Object Storage-SDKs für Python kann über die Low-Level-Client-Syntax 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 Versionsverwaltung mit dem IBM Cloud Object Storage- 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
});