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
WriteroderManagerfü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:
- Nachdem Sie zu dem von Ihnen gewählten Quell-Bucket navigiert haben, klicken Sie auf die Registerkarte Konfiguration.
- Suchen Sie nach Bucket-Replikation und klicken Sie auf die Schaltfläche Replikation einrichten.
- Wählen Sie Replikationsquelle und klicken Sie auf Weiter.
- 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.
- 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.
- Öffnen Sie ein IBM Cloud Shell in einem neuen Fenster oder Tab.
- Kopieren Sie den in der Object Storage Console angezeigten CLI-Befehl IBM Cloud und fügen Sie ihn in die neue Shell ein.
- 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.
- Vergewissern Sie sich, dass das Optionsfeld Regelstatus auf Aktiviert gesetzt ist.
- 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.
- Klicken Sie auf Fertig.
Verwendung verschiedener IBM Konten
Um Objekte zwischen Buckets in verschiedenen IBM Konten zu replizieren, gehen Sie wie folgt vor:
-
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?
-
Auf der Seite Bucket-Konfiguration finden Sie die Konto-ID und die Service-Instanz-ID im CRN-Format.
-
Klicken Sie in der Benutzeroberfläche IBM Cloud des Zielkontos auf Verwalten>Zugriff**(IAM)**.
-
Klicken Sie im linken Bereich auf Authentifizierung.
-
Klicken Sie auf Erstellen, um eine neue IAM-Richtlinie zu erstellen.
-
Gewähren Sie die Konfiguration einer Dienstautorisierungsseite. Dies ist die Seite, auf der Sie landen, nachdem Sie eine neue IAM-Richtlinie erstellt haben.
-
Wählen Sie Anderes Konto und geben Sie die Konto-ID des Quellkontos an.
-
Zugang zu den Diensten gewähren als Cloud Object Storage.
-
Wählen Sie im Zugriffsbereich Spezifische Ressourcen.
-
Wählen Sie Source Service Instance und geben Sie die Service-Instanz-ID für den Quell-Bucket ein.
-
Wählen Sie unter Ziel Cloud Object Storage für den Source Bucket Access.
-
Wählen Sie für Zielbereich Spezifische Ressourcen> Dienstinstanz**.
-
Wählen Sie die Service-Instanz-ID des Zielkontos aus dem Dropdown-Menü.
-
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 Befehlrclone 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_issuedibm_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:
- Erstellen einer Liste aller Objekte in einem Bucket, für die Replikationsregeln gelten sollen
- 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
| Ü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:
project_a/foo.mp4project_a/bar.mp4project_b/baz.pdf- In:
project_b/acme.pdf. Dieses vierte Objekt hat auch einen Objekttag mit dem SchlüsselClientund dem WertACME.
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 (
|
| 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
});