Réplication d'objets dans IBM Cloud® Object Storage

La réplication vous permet de définir des règles pour la copie automatique et asynchrone d'objets d'un bac source vers un bac cible dans le même compte. Vous pouvez également copier des objets d'un godet vers un autre godet dans différents comptes.

Qu'est-ce que la réplication ?

La réplication copie les objets nouvellement créés et les mises à jour d'objets d'un bac source vers un bac cible.

  • Seuls les nouveaux objets ou les nouvelles versions des objets existants (créés après l'ajout de la règle de réplication au seau) sont copiés dans le seau cible. Les objets existants peuvent être répliqués en les copiant sur eux-mêmes, créant ainsi une nouvelle version répliquée.
  • Les métadonnées de l'objet source sont appliquées à l'objet répliqué.
  • La réplication bidirectionnelle entre deux buckets nécessite que les règles soient actives sur les deux buckets.
  • Les filtres (composés de préfixes et/ou de balises) peuvent être utilisés pour limiter la règle de réplication à un sous-ensemble d'objets. Plusieurs règles peuvent être définies dans une seule politique et ces règles peuvent spécifier différentes destinations. De cette manière, les différents objets d'un même panier peuvent être répliqués vers différentes destinations.

Pourquoi utiliser la réplication?

  • Conserver une copie des données dans un bac situé dans un autre lieu géographique.
  • Respectez les règles de conformité relatives à la souveraineté des données en définissant des règles de réplication qui stockent les répliques uniquement dans les emplacements autorisés.
  • Les données de production et de test restent synchronisées, car la réplication conserve les métadonnées des objets telles que l'heure de la dernière modification, l'identifiant de la version, etc.
  • Gérer la classe de stockage et les règles de cycle de vie des objets répliqués indépendamment de la source, en définissant une classe de stockage différente et/ou des règles de cycle de vie pour le seau cible. De même, vous pouvez stocker des répliques dans un bac dans une instance de service distincte ou même dans un compte IBM Cloud, et contrôler indépendamment l'accès aux répliques.

Démarrer avec la réplication

Pour commencer, voici quelques conditions préalables à remplir :

  • Définissez le rôle de plate-forme Writer ou Manager sur le seau source, ou un rôle personnalisé avec les actions de réplication appropriées (tel que cloud-object-storage.bucket.put_replication).
  • Il n'est pas nécessaire d'avoir accès au panier cible, mais il faut avoir suffisamment de rôles de plate-forme pour créer de nouvelles politiques IAM qui permettent au panier source d'écrire dans le panier cible.
  • Le seau cible ne doit pas être doté d'un pare-feu de seau hérité, mais il peut utiliser des restrictions basées sur le contexte.
  • Les objets cryptés à l'aide de SSE-C ne peuvent pas être répliqués, bien que le cryptage géré(SSE-KMS)comme Key Protect soit entièrement compatible avec la réplication.
  • Les objets archivés ne peuvent pas être répliqués.
  • Si les buckets source et cible se trouvent dans des comptes IBM différents, veillez à créer les buckets dans chaque compte.
  • Activer le Versioning sur les buckets source et cible.

Le versionnage étant une exigence de la réplication, il est impossible de répliquer des objets dans des buckets configurés avec une politique Immutable Object Storage.

Utilisation d'un compte IBM

Pour répliquer des objets entre les buckets d'un même compte IBM, procédez comme suit :

  1. Après avoir navigué jusqu'au seau source choisi, cliquez sur l'onglet Configuration.
  2. Cherchez Bucket replication et cliquez sur le bouton Setup replication.
  3. Sélectionnez la source de réplication, puis cliquez sur Suivant.
  4. Sélectionnez l'instance et le godet dans les menus déroulants. Vous pouvez également basculer le bouton radio sur Non et coller le CRN du seau cible.
  5. Cliquez sur le bouton Vérifier les autorisations.

Vous devez maintenant accorder au seau source Writer des autorisations sur le seau cible. Il y a plusieurs façons de le faire, mais la plus simple est d'utiliser IBM Cloud Shell et le CLI IBM Cloud.

  1. Ouvrir IBM Cloud Shell dans une nouvelle fenêtre ou un nouvel onglet.
  2. Copiez la commande CLI IBM Cloud affichée dans la console de stockage d'objets et collez-la dans le nouveau shell.
  3. Revenez à la fenêtre ou à l'onglet de configuration du compartiment, puis cliquez à nouveau sur le bouton Vérifier les autorisations.

Vous allez maintenant créer une règle de réplication.

  1. Assurez-vous que la case d'option Statut de la règle est réglée sur Activé.
  2. Attribuez un nom et une priorité à la règle, ainsi que tout préfixe ou filtre de balise limitant les objets soumis à la règle de réplication.
  3. Cliquez sur Terminé.

Utilisation de différents comptes IBM

Pour répliquer des objets entre des comptes IBM différents, procédez comme suit :

  1. Configurer une politique IAM sur le compte de destination IBM. Pour plus d'informations sur la création d'une politique IAM, voir Qu'est-ce qu'une politique IAM et qui peut l'attribuer?

  2. Trouvez l'identifiant du compte et l'identifiant de l'instance de service au format CRN sur la page de configuration du réservoir.

  3. Dans l'interface utilisateur IBM Cloud du compte de destination, cliquez sur Manage>Access**(IAM)**.

  4. Cliquez sur Authentification dans le panneau de gauche.

  5. Cliquez sur Créer pour créer une nouvelle politique IAM.

  6. Accorder la configuration d'une page d'autorisation de service. Il s'agit de la page sur laquelle vous arrivez après avoir créé une nouvelle politique IAM.

  7. Sélectionnez Autre compte et indiquez l'ID du compte source.

  8. Fournir un accès aux services comme Cloud Object Storage.

  9. Dans le champ d'accès, sélectionnez Ressources spécifiques.

  10. Sélectionnez Instance de service source et saisissez l'ID de l'instance de service pour le seau source.

  11. Sous Cible, sélectionnez Cloud Object Storage pour l'accès au seau source.

  12. Pour Target Scope, sélectionnez Specific resources> Service** Instance.

  13. Sélectionnez l'ID de l'instance de service du compte de destination dans le menu déroulant.

  14. Sélectionnez le rôle Rédacteur d'objets ou Rédacteur, selon le cas.

    Le rôle d' écrivain d'objets est suffisant pour permettre la réplication.

Terminologie

Source bucket: Le godet pour lequel une politique de réplication est configurée. C'est la source des objets répliqués.

Godet cible: Le seau défini comme destination dans la politique de réplication du seau source. C'est la cible des objets répliqués. Également appelé "seau de destination".

Réplique: Le nouvel objet créé dans un godet cible à la suite d'une demande faite à un godet source.

Qu'est-ce qui est reproduit?

Les nouveaux objets créés à l'aide de CopyObject, PutObject, ou CompleteMultipartUpload sont répliqués du compartiment source vers le compartiment cible. Les objets répliqués héritent des champs de métadonnées suivants de l'objet source : Etag, Last Modified Time, Version ID, user-attributes, et Tags.

Les marqueurs de suppression sont répliqués s'ils sont configurés par la politique de réplication.

Les mises à jour des balises d'une version sont répliquées du compartiment source vers le compartiment cible.

Les éléments suivants ne sont pas répliqués :

  • Actions initiées par les événements du cycle de vie
  • Objets écrits directement dans l'archive
  • Objets restaurés à partir d'un niveau d'archivage
  • Objets chiffrés à l'aide de SSE-C
  • ACL d'objets

Utilisation de la réplication pour la continuité des activités et la reprise après sinistre

La réplication peut être utilisée pour assurer la continuité du service en cas de panne :

  • Veillez à ce que les fichiers source et cible se trouvent à des endroits différents.
  • Vérifier que les dernières versions des objets sont synchronisées entre les deux ensembles. Un outil tel que Rclone (la commande rclone check ) peut être utile pour vérifier le synchronisme à partir de la ligne de commande.
  • En cas de panne, le trafic d'une application peut être redirigé vers le seau cible.

Cohérence et intégrité des données

Alors que IBM Cloud Object Storage assure une grande cohérence pour toutes les opérations d'entrée-sortie de données, la configuration des seaux n'est jamais cohérente. Après avoir activé les règles de réplication pour la première fois sur un bucket, il peut s'écouler quelques instants avant que la configuration ne se propage à travers le système et que les nouveaux objets ne commencent à être répliqués.

Gestion des erreurs

Des échecs de réplication peuvent survenir pour de nombreuses raisons, notamment (mais sans s'y limiter) des erreurs de configuration des compartiments, des interruptions de service et des interactions de l'utilisateur avec le compartiment de destination.

Object Storage dispose d'une résilience intégrée permettant de gérer les échecs de réplication. En cas d'échec, Object Storage peut réessayer pendant 30 jours maximum. La fréquence des nouvelles tentatives peut varier en fonction de la nature de la défaillance. Par exemple, les échecs dus à des erreurs d'E/S rares peuvent faire l'objet d'une nouvelle tentative en l'espace de quelques heures, tandis que ceux dus à des erreurs de configuration des compartiments utilisateur peuvent faire l'objet d'une seule nouvelle tentative par jour. Si une erreur n'est pas résolue dans un délai de 30 jours, le système ne tente plus automatiquement de la résoudre. Toutes les défaillances de longue durée peuvent être répertoriées à l'aide de la méthode ListBucketReplicationFailures.

Si vous souhaitez réessayer de traiter des échecs « anciens » datant de plus de 30 jours, vous pouvez déclencher une nouvelle tentative à l'aide de la balise PutBucketReplicationFailureReattempt.

Causes de défaillance

Dans la réponse de l'API « ListBucketReplicationFailures », l'attribut « SyncFailureCause » est fourni pour chaque élément d'échec, indiquant la dernière cause connue de l'échec. Le tableau suivant présente les causes possibles :

Cause Explication
La gestion des versions est désactivée sur le compartiment de destination La gestion des versions n'est pas activée sur le compartiment de destination. L'utilisateur a probablement désactivé le contrôle de version après avoir configuré la réplication.
Opération de réplication non autorisée sur le compartiment cible Le service Object Storage n'est pas autorisé à modifier le compartiment cible au nom de l'utilisateur. Vérifiez si l'autorisation de service à service est toujours active entre les ressources de compartiment source et cible dans IAM.
Le bucket distant est introuvable Impossible de localiser le répertoire de destination. Il se peut que l'utilisateur ait supprimé le compartiment de destination. Vérifiez si le compartiment de destination existe toujours.
Source/Compartiment distant introuvable ou désactivé Le godet est introuvable ou hors d'état de fonctionner. Vérifier si le compartiment existe toujours. Si c'est le cas, contactez le service client.
Objet de destination introuvable Tentative de reproduction d'une modification de métadonnées (par exemple, verrouillage d'une balise ou d'un objet), mais l'objet cible n'existe pas. L'utilisateur a probablement supprimé l'objet du compartiment de destination avant que la modification n'ait pu être répliquée.
Objet local introuvable L'objet source n'a pas été trouvé lors de la tentative de réplication. L'utilisateur a probablement supprimé l'objet source peu après l'avoir créé ou modifié.
Le verrouillage d'objet n'est pas activé sur le compartiment de destination Une tentative a été effectuée pour reproduire les paramètres d'Object Lock sur un objet, mais la fonction Object Lock n'était pas activée dans le compartiment de destination.
La clé de chiffrement n'est pas active ou a été supprimée Object Storage a tenté de récupérer la clé de chiffrement depuis Key Protect (le compartiment source est configuré avec SSE-KP/SSE-HPCS), mais la clé a été supprimée.
Les informations relatives au point de terminaison de l'instance KMS sont manquantes Impossible de récupérer le point de terminaison du service de gestion des clés nécessaire à la lecture de la clé de chiffrement. Si l'erreur persiste, contactez le service client.
Autorisations insuffisantes pour consulter les informations relatives au point de terminaison KMS La ressource « source bucket » ne dispose pas des autorisations nécessaires pour interroger le point de terminaison du service de gestion des clés requis pour lire la clé de chiffrement. Vérifiez votre politique d'autorisation de service à service IAM.
Erreur interne Divers problèmes internes empêchant la réplication. Contactez le support technique.

Actions IAM

De nouvelles actions IAM sont associées à la réplication.

Action IAM Rôle
cloud-object-storage.bucket.get_replication Gestionnaire, Rédacteur, Lecteur
cloud-object-storage.bucket.put_replication Responsable, Auteur
cloud-object-storage.bucket.delete_replication Responsable, Auteur
cloud-object-storage.bucket.get_replication_failures Gestionnaire, Rédacteur, Lecteur
cloud-object-storage.bucket.put_replication_reattempt Responsable, Auteur

Événements Activity Tracker

La réplication génère des événements supplémentaires.

Action d'événement Généré à Description
cloud-object-storage.bucket-replication.create Compartiment source Lorsqu'un utilisateur effectue une requête via l'API « PutBucketReplication »
cloud-object-storage.bucket-replication.read Compartiment source Lorsqu'un utilisateur effectue une requête via l'API « GetBucketReplication »
cloud-object-storage.bucket-replication.delete Compartiment source Lorsqu'un utilisateur effectue une requête via l'API « DeleteBucketReplication »
cloud-object-storage.bucket-replication-failures.list Compartiment source Lorsqu'un utilisateur effectue une requête via l'API « ListBucketReplicationFailures »
cloud-object-storage.bucket-replication-failures.update Compartiment source Lorsqu'un utilisateur effectue une requête via l'API « PutReplicationFailureReattempt »
cloud-object-storage.object-replication.sync Compartiment source Lorsque Object Storage réplique un objet à partir du compartiment source
cloud-object-storage.object-replication.create Compartiment cible Lorsque Object Storage crée une nouvelle version de réplique dans le compartiment cible
cloud-object-storage.object-replication.update Compartiment cible Lorsque Object Storage réplique une mise à jour des métadonnées sur une réplique existante du compartiment cible
cloud-object-storage.object-replication.delete Compartiment cible Lorsque Object Storage réplique un marqueur de suppression sur le compartiment cible

Pour les événements cloud-object-storage.bucket-replication.create, les zones suivantes fournissent des informations supplémentaires:

Zone Description
requestData.replication.num_sync_remote_buckets Nombre de compartiments cible spécifié dans les règles de réplication de compartiment.
requestData.replication.failed_remote_sync Noms CRN des compartiments qui ont échoué à la vérification de la réplication.

Lorsque la réplication est active, les opérations sur les objets peuvent générer les informations supplémentaires suivantes:

Zone Description
requestData.replication.replication_throttled Indique si la réplication de l'objet a été retardée sur la source en raison d'un mécanisme de régulation.
requestData.replication.destination_bucket_id CRN du compartiment cible.
requestData.replication.sync_type Le type d'opération de synchronisation.
- content indique que les données de l'objet et toutes les métadonnées ont été écrites sur la cible.
- tag indique que les balises de l'objet ont été répliquées.
- retention indique que les paramètres de rétention du verrou d'objet ont été répliqués.
- legal_hold indique que les paramètres de maintien légal du verrou d'objet ont été répliqués.
- delete indique que le marqueur d'effacement a été écrit sur la cible.
responseData.replication.source_bucket_id CRN du compartiment source.
responseData.replication.result Les valeurs peuvent être success, failure (indique une erreur de serveur), user (indique une erreur d'utilisateur).
responseData.replication.message Le message de réponse HTTP (tel que OK).

Vous pouvez tracer un objet à partir du moment où il est écrit dans la source jusqu'à ce qu'il soit écrit sur la cible. Recherchez l'ID de demande associé à l'écriture d'objet et trois événements doivent apparaître:

  • Le PUT d'origine.
  • Demande de synchronisation de la source.
  • Demande PUT sur la cible.

L'un de ces trois éléments manquants indique un échec.

Utilisation et comptabilité

Toutes les répliques sont elles-mêmes des objets et contribuent à l'utilisation comme toutes les autres données. Une réplication réussie se traduit par des demandes facturables PUT, GET et HEAD, bien que toute bande passante consommée dans le processus de réplication ne soit pas facturée.

La réplication génère des mesures supplémentaires à utiliser avec IBM Cloud Monitoring:

  • ibm_cos_bucket_replication_sync_requests_issued
  • ibm_cos_bucket_replication_sync_requests_received

Interactions

Gestion des versions

La gestion des versions est obligatoire pour activer la réplication. Après avoir activé la gestion des versions sur les compartiments source et cible et configuré la réplication sur le compartiment source, vous pouvez rencontrer les problèmes suivants:

  • Si vous tentez de désactiver la gestion des versions sur le compartiment source, Object Storage renvoie une erreur. Vous devez supprimer la configuration de réplication avant de pouvoir désactiver la gestion des versions sur le compartiment source.
  • Si vous désactivez la gestion des versions sur le compartiment cible, la réplication échoue.

Verrouillage d'objet

Le verrouillage d'objet peut être activé sur les compartiments dotés de la fonctionnalité de réplication. Lorsque des objets sources sont créés avec Object Lock (conservation et/ou conservation à des fins juridiques), ou si Object Lock est mis à jour sur des objets existants, cela est répliqué vers la destination.

La fonctionnalité « Object Lock » ne peut être répliquée que si elle est activée sur le compartiment de destination. Par conséquent, activez Object Lock sur le compartiment de destination s'il est activé sur le compartiment source.

Le tableau ci-dessous présente le comportement observé lorsque les buckets source et de destination ont des configurations d'Object Lock différentes :

Verrouillage de l'objet source Verrouillage de l'objet de destination Comportement
Activé Activé Tous les états d’Object Lock de la source sont répliqués vers la destination.

Si l’objet source est créé sans Object Lock, la durée de conservation par défaut du compartiment de destination peut s’appliquer à la réplique.

La réplication d’Object Lock respecte toutes les restrictions d’ S3 Object Lock. Par exemple, il ne peut en aucun cas raccourcir la durée de conservation sur la réplique en mode conformité si l'utilisateur a apporté des modifications de son propre chef sur la destination.
Désactivé Activé Les objets source ne peuvent pas être soumis à Object Lock; par conséquent, les états d’Object Lock ne se propagent jamais de la source vers la destination.
Si le compartiment de destination dispose d’une conservation par défaut, celle-ci s’applique aux nouvelles répliques créées.
Activé Désactivé Les objets source créés avec Object Lock ne sont pas répliqués. Ces échecs font l'objet d'une nouvelle tentative par Object Storage et peuvent être répliqués une fois qu'Object Lock est activé sur le compartiment de destination. Les mises à jour relatives à la conservation des objets (Object Lock) ou à la conservation légale (legal hold) sur des objets existants ne peuvent pas non plus être répliquées tant que la fonctionnalité Object Lock n’est pas activée sur la destination.

Les objets sources créés sans Object Lock peuvent toujours être répliqués.

Chiffrement Key Protect

Les objets source sont chiffrés à l'aide de la clé racine du compartiment source, et les répliques sont chiffrées à l'aide de la clé racine du compartiment cible.

Configurations de cycle de vie

Si une politique de cycle de vie est activée sur un compartiment cible, les actions de cycle de vie sont basées sur la date de création initiale de l’objet à la source, et non sur le moment où la réplique devient disponible dans le compartiment cible.

Immutable Object Storage

L'utilisation de règles de conservation est impossible sur un compartiment avec la gestion des versions activée, et comme la gestion des versions est une exigence pour la réplication, il est impossible de répliquer des objets vers ou depuis un compartiment avec l'option Immutable Object Storage activée.

Pare-feux de compartiment existants

Les compartiments utilisant des pare-feux existants pour restreindre l'accès en fonction des adresses IP ne peuvent pas utiliser la réplication, car les services d'arrière-plan qui répliquent les objets n'ont pas d'adresses IP fixes et ne peuvent pas passer le pare-feu.

Utilisez plutôt des restrictions basées sur le contexte pour contrôler l'accès en fonction des informations réseau.

Code Engine

La configuration de la réplication ne déclenche pas, pour l'instant, d'événements Code Engine, mais les opérations d'écriture et de suppression d'objets génèrent des Object:Write notifications Object:Delete pour les compartiments source et cible. Ces événements sont annotés d'un champ notifications.replication_type indiquant si l'événement a déclenché une synchronisation ou s'il a été déclenché par une synchronisation.

Réplication d'objets existants

Une règle de réplication ne peut agir que sur les objets écrits après la configuration de la règle et son application à un compartiment. S'il existe des objets existants dans un compartiment qui doivent être répliqués, les processus de réplication doivent être informés de l'existence des objets. Pour ce faire, vous pouvez facilement utiliser l'opération PUT copy pour copier des objets sur eux-mêmes.

Ce processus réinitialise certaines métadonnées d'objets, notamment les horodatages de création. Cela a une incidence sur les politiques de cycle de vie et sur tout autre service utilisant des horodatages de création ou de modification (tels que les réseaux de diffusion de contenu). Assurez-vous que toutes les interruptions pouvant survenir lors de la réinitialisation des métadonnées d'objet sont traitées de manière appropriée.

Le processus implique:

  1. Création d'une liste de tous les objets d'un compartiment qui doivent être soumis à des règles de réplication,
  2. Itération sur cette liste, en exécutant une opération PUT copy sur chaque objet, la source étant identique à la cible de la demande.

Cet exemple ne réplique que la nouvelle version de l'objet créée par la requête PUT copy. Pour répliquer toutes les versions de l'objet, il faudrait également copier chacune d'entre elles individuellement.

L'exemple suivant est écrit en Python, mais l'algorithme peut être appliqué dans n'importe quel langage de programmation ou contexte.

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)

Exemples d'API REST

Les exemples suivants sont présentés à l'aide de cURL pour une utilisation plus facile. Les variables d'environnement sont utilisées pour représenter des éléments spécifiques à l'utilisateur, tels que $BUCKET, $TOKEN et $REGION. Notez que $REGION inclut également toutes les spécifications de type de réseau. Par conséquent, l'envoi d'une demande à un compartiment dans us-south à l'aide du réseau privé nécessite de définir la variable sur private.us-south.

Activer la réplication sur un compartiment

La configuration de réplication est fournie au format XML dans le corps de la demande. Les nouvelles demandes remplacent toutes les règles de réplication existantes présentes sur le compartiment.

Une configuration de réplication doit inclure au moins une règle et peut contenir jusqu'à 1 000 règles. Chaque règle identifie un sous-ensemble d'objets à répliquer en filtrant les objets dans le compartiment source. Pour choisir des sous-ensembles d'objets supplémentaires à répliquer, ajoutez une règle pour chaque sous-ensemble.

Pour spécifier un sous-ensemble des objets du compartiment source auxquels appliquer une règle de réplication, ajoutez l'élément Filter en tant qu'enfant de l'élément Rule. Vous pouvez filtrer des objets en fonction d'un préfixe de clé d'objet, d'une ou de plusieurs balises d'objet, ou les deux. Lorsque vous ajoutez l'élément Filter dans la configuration, vous devez également ajouter les éléments suivants: DeleteMarkerReplication, Status et Priority.

En-têtes facultatifs

En-têtes facultatifs
En-tête Type Description
Content-MD5 Chaîne Le hachage MD5 de 128 bits de la charge utile, encodé en base64, qui sert de contrôle d'intégrité pour s'assurer que la charge utile n'a pas été altérée pendant le transfert.
x-amz-checksum-crc32 Chaîne Cet en-tête est la somme de contrôle Base64 encodée, 32 bits CRC32 de l'objet.
x-amz-checksum-crc32c Chaîne Cet en-tête est la somme de contrôle Base64 encodée, 32 bits CRC32C de l'objet.
x-amz-checksum-crc64nvme Chaîne Cet en-tête est la somme de contrôle Base64 encodée, 64 bits CRC64NVME de l'objet. La somme de contrôle de CRC64NVME est toujours une somme de contrôle d'objet complet.
x-amz-checksum-sha1 Chaîne SHA1 Cet en-tête est le condensé de 160 bits de l'objet, codé sur Base64.
x-amz-checksum-sha256 Chaîne Cet en-tête est le code Base64, 256-bit SHA256 digest de l'objet.

Un en-tête Content-MD5 ou un en-tête checksum (y compris x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1 ou x-amz-checksum-sha256) est nécessaire pour vérifier l'intégrité de la charge utile. Le corps de la demande doit contenir un bloc XML avec le schéma suivant :

Elément Type Enfants Ancêtre Contrainte
ReplicationConfiguration Conteneur Rule Aucun Limite 1.
Rule Conteneur ID, Status, Filter, DeleteMarkerReplication, Destination, Priority ReplicationConfiguration Limite 1000.
ID Chaîne Aucun Rule Doivent comporter (a-z,A-Z0-9) et les symboles suivants : !``_``.``*``'``(``)``-
Destination Conteneur Bucket Rule Limite 1.
Bucket Chaîne Aucun Destination CRN du compartiment cible.
Priority Entier Aucun Rule Une priorité est associée à chaque règle. Dans certains cas, plusieurs règles peuvent être applicables à un objet téléchargé. Dans ces situations, le stockage d'objets applique la règle applicable ayant la priorité la plus élevée lors de la réplication de cet objet. Ainsi, une seule règle de réplication peut être appliquée à n'importe quel objet, quel que soit le nombre de règles de la règle de réplication pouvant correspondre à l'objet. Notez que plus le nombre est élevé, plus la priorité est élevée.
Status Chaîne Aucun Rule Indique si la règle est activée. Les valeurs valides sont Enabled ou Disabled.
DeleteMarkerReplication Conteneur Status Rule Limite 1.
Status Chaîne Aucun DeleteMarkerReplication Indique si le stockage d'objets réplique les marqueurs de suppression. Les valeurs valides sont Enabled ou Disabled.
Filter Chaîne Prefix, Tag, AND Rule Filtre qui identifie le sous-ensemble d'objets auquel s'applique la règle de réplication. Un Filter doit spécifier exactement un élément Prefix, Tag ou un élément enfant And.
Prefix Chaîne Aucun Filter Préfixe de nom de clé d'objet qui identifie le sous-ensemble d'objets auquel la règle s'applique.
Tag Chaîne Aucun Filter Conteneur permettant de spécifier une clé et une valeur de balise. La règle s'applique uniquement aux objets ayant la balise dans leur ensemble de balises.
And Chaîne Aucun Filter Conteneur permettant de spécifier des filtres de règle. Les filtres déterminent le sous-ensemble d'objets auquel la règle s'applique. Cet élément est requis uniquement si vous spécifiez plusieurs filtres.
Key Chaîne Aucun Tag Clé de balise.
Value Chaîne Aucun Tag Valeur de la balise.

Cet exemple réplique tous les nouveaux objets, mais ne réplique pas les marqueurs de suppression.

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>'

Cet exemple réplique tous les objets dont la clé (nom) commence par vers project_a/ le compartiment identifié par $DESTINATION_CRN_A, tous les objets dont la clé (nom) commence par project_b/ vers le compartiment identifié par $DESTINATION_CRN_B, ainsi que tous les objets possédant une balise d'objet dont la clé est et Client la valeur ACME vers un troisième compartiment identifié par $DESTINATION_CRN_C, et réplique les marqueurs de suppression dans tous les cas.

Supposons que les quatre objets suivants soient ajoutés au compartiment source. Ils sont répliqués vers les buckets cibles comme décrit ci-dessous :

  1. project_a/foo.mp4
  2. project_a/bar.mp4
  3. project_b/baz.pdf
  4. project_b/acme.pdf: Ce quatrième objet comporte également une balise d'objet avec la clé Client et la valeur ACME.

En raison des règles suivantes, les objets 1 et 2 sont répliqués vers $DESTINATION_CRN_A. L'objet 3 est répliqué vers $DESTINATION_CRN_B. L'objet 4 est répliqué uniquement vers $DESTINATION_CRN_C car la règle portant l'ID AcmeCorp a une priorité plus élevée que celle portant l'ID et ProjectB, bien qu'il réponde aux critères des deux règles, il n'est soumis qu'à la première.

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>'

Une demande réussie renvoie une réponse 200.

Afficher la configuration de réplication pour un compartiment

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

Cette commande renvoie un corps de réponse XML avec le schéma approprié:

<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>

Supprimer la configuration de réplication d'un compartiment

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

Une demande réussie renvoie une réponse 204.

Répertorier les échecs de réplication pour un compartiment

Exemple de requête utilisant curl

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

Paramètres de requête facultatifs

Nom Type Description
type d'encodage Chaîne Si des caractères Unicode non pris en charge par XML sont utilisés dans un nom d'objet, ce paramètre peut être défini sur url afin d'encoder correctement la réponse.
nombre maximal de clés Chaîne Limite le nombre d'erreurs affichées dans la réponse. La valeur par défaut et maximale est 1 000.
première tentative de synchronisation effectuée avant Chaîne Indique l'horodatage à partir duquel la liste doit commencer, par ordre chronologique inverse. L'heure correspond au moment où la réplication a été initialement déclenchée ( champ dans l'entrée). Ainsi, la liste contient tous les échecs de réplication dont la date est au moins aussi ancienne que l'horodatage spécifié.
jeton de continuation Chaîne Indique l'incident à partir duquel la liste doit commencer, par ordre chronologique inverse. Cette fonctionnalité sert à la pagination lorsqu'il existe d'autres entrées au-delà de celles renvoyées lors de la dernière requête de liste.

Exemple de réponse

<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>

Éléments de réponse

Nom Type Description
ListReplicationFailureResult Conteneur Balise de niveau racine
Name Chaîne Nom du compartiment répertorié.
FirstSyncAttemptedBefore Chaîne ISO-8601 date-horodatage de la requête ?first-sync-attempted-before
MaxKeys Nombre Nombre maximal de clés demandé pour cette annonce.
IsTruncated Booléen Indique si la liste actuelle a été tronquée (c'est-à-dire s'il y a d'autres échecs après le dernier élément renvoyé dans cette liste). Si true, l'adresse NextContinuationToken est toujours fournie.
EncodingType Chaîne Type d'encodage demandé pour cette annonce.
KeyCount Nombre Nombre d'éléments défectueux renvoyés dans cette liste.
ContinuationToken Chaîne Le jeton de suite qui a été spécifié pour cette annonce.
NextContinuationToken Chaîne Prochain jeton de continuation à utiliser pour la pagination si la liste actuelle a été tronquée.

Planifier une nouvelle tentative en cas d'échecs de réplication persistants dans un compartiment

Cette opération planifie une nouvelle tentative pour tous les échecs de réplication, y compris les échecs « périmés » datant de plus de 30 jours et qui ne peuvent plus faire l'objet de nouvelles tentatives automatiques par le système. Les échecs de réplication à long terme sont traités selon des cycles de 24 heures. L'envoi de cette requête planifie de nouvelles tentatives pour les échecs anciens au cours du cycle débutant à minuit GMT le lendemain. Par exemple, si une requête est envoyée à l'adresse 2026-01-01T01:00:00Z, l'heure la plus proche à laquelle ces échecs seront traités est 2026-01-02T00:00:00Z. Si la requête aboutit, cet horodatage est également fourni dans l'en-tête de réponse « x-ibm-replication-reattempt-scheduled-time ». Les requêtes multiples arrivant le même jour en GMT (c'est-à-dire donnant lieu à la même heure de planification) sont idempotentes.

Chaque échec temporaire fait l'objet d'une nouvelle tentative unique, dans la mesure du possible : les opérations sont exécutées, mais aucun délai n'est garanti.

Exemple de requête utilisant curl

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

Exemple de réponse

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

Exemples SDK

Les exemples suivants utilisent les SDK IBM Cloud Object Storage pour Python et Node.js, bien que la mise en œuvre du versionnage des objets doive être entièrement compatible avec toute bibliothèque ou tout outil S3-compatible permettant de définir des points de terminaison personnalisés. L'utilisation d'outils tiers nécessite des données d'identification HMAC pour calculer les signatures AWS V4. Pour plus d'informations sur les données d'identification HMAC, voir la documentation.

Python

L'activation de la gestion des versions à l'aide du SDK IBM Cloud Object Storage pour Python peut s'effectuer à l'aide de la syntaxe client de bas niveau.

Utilisation d'un client:

#!/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'
                }
            },
        ]
    }
)

Liste des versions d'un objet utilisant le même client:

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

Notez que les API Python sont très flexibles et qu'il existe de nombreuses façons d'accomplir la même tâche.

Node.js

Activation de la gestion des versions à l'aide du 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
});