Réplication d'objets
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
WriterouManagersur le seau source, ou un rôle personnalisé avec les actions de réplication appropriées (tel quecloud-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 :
- Après avoir navigué jusqu'au seau source choisi, cliquez sur l'onglet Configuration.
- Cherchez Bucket replication et cliquez sur le bouton Setup replication.
- Sélectionnez la source de réplication, puis cliquez sur Suivant.
- 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.
- 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.
- Ouvrir IBM Cloud Shell dans une nouvelle fenêtre ou un nouvel onglet.
- Copiez la commande CLI IBM Cloud affichée dans la console de stockage d'objets et collez-la dans le nouveau shell.
- Retournez à la fenêtre ou à l'onglet de configuration du seau et cliquez à nouveau sur le bouton Vérifier les autorisations.
Vous allez maintenant créer une règle de réplication.
- Assurez-vous que la case d'option Statut de la règle est réglée sur Activé.
- Donnez à la règle un nom et une priorité, ainsi que des filtres de préfixe ou de balise qui limiteront les objets soumis à la règle de réplication.
- Cliquez sur Terminé.
Utilisation de différents comptes IBM
Pour répliquer des objets entre des comptes IBM différents, procédez comme suit :
- 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?
- Trouvez l'identifiant du compte et l'identifiant de l'instance de service au format CRN sur la page de configuration du réservoir.
- Dans l'interface utilisateur IBM Cloud du compte de destination, cliquez sur Manage>Access**(IAM)**.
- Cliquez sur Authentification dans le panneau de gauche.
- Cliquez sur « Créer » pour créer une nouvelle politique IAM.
- Accorder la configuration d'une page d'autorisation de service. C'est la page sur laquelle vous arrivez après avoir créé une nouvelle politique IAM.
- Sélectionnez Autre compte et indiquez l'ID du compte source.
- Fournir un accès aux services comme Cloud Object Storage.
- Dans le champ d'accès, sélectionnez Ressources spécifiques.
- Sélectionnez Instance de service source et saisissez l'ID de l'instance de service pour le seau source.
- Sous Cible, sélectionnez Cloud Object Storage pour l'accès au seau source.
- Pour Target Scope, sélectionnez Specific resources> Service** Instance.
- Sélectionnez l'ID de l'instance de service du compte de destination dans le menu déroulant.
- 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 via CopyObject, PutObject, ou CompleteMultipartUpload seront répliqués du seau source vers le seau cible. Les objets répliqués hériteront 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 seront répliqués si la politique de réplication le prévoit.
Les mises à jour des balises d'une version seront répliquées du seau source vers le seau 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 cryptés via SSE-C
- ACL d'objets
Utilisation de la réplication pour assurer 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 commanderclone 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
Les échecs de réplication peuvent avoir de nombreuses causes, notamment (mais sans s'y limiter) des erreurs de configuration des compartiments, des interruptions de service, des interactions de l'utilisateur avec le compartiment de destination, etc.
COS intègre des mécanismes de résilience permettant de gérer les défaillances de réplication. En cas d'échec, COS peut réessayer pendant une période pouvant aller jusqu'à 30 jours. 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 à long terme peuvent être répertoriées via 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 COS 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 des 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 | COS a tenté de récupérer la clé de chiffrement à partir de 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 COS réplique un objet à partir du compartiment source |
| cloud-object-storage.object-replication.create | Compartiment cible | Lorsque COS crée une nouvelle version de réplique dans le compartiment de destination |
| cloud-object-storage.object-replication.update | Compartiment cible | Lorsque COS réplique la mise à jour des métadonnées sur une réplique existante du compartiment cible |
| cloud-object-storage.object-replication.delete | Compartiment cible | Lorsque COS 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
PUTd'origine. - Demande de synchronisation de la source.
- Demande
PUTsur 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_issuedibm_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 source sont créés avec Object Lock (conservation et/ou conservation à des fins juridiques), ou si Object Lock est mis à jour sur des objets existants, ces modifications seront répliquées vers la destination.
La fonctionnalité « Object Lock » ne peut être répliquée que si elle est activée sur le compartiment de destination. Il est donc recommandé d'activer 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 de verrouillage des objets de la source seront répliqués vers la destination. Si l'objet source est créé sans verrouillage d'objet (Object Lock), la durée de conservation par défaut du compartiment de destination peut s'appliquer à la réplique. La réplication des verrous d'objet respecte toutes les restrictions relatives aux verrous d'objet d' S3. 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 à un verrouillage d'objet; par conséquent, les états de verrouillage d'objet ne se propagent jamais de la source vers la destination. Si le compartiment de destination dispose d'une durée de conservation par défaut, celle-ci s'appliquera aux nouvelles répliques créées. |
| Activé | Désactivé | Les objets source créés avec Object Lock ne seront pas répliqués. Ces échecs font l'objet d'une nouvelle tentative par COS et peuvent être répliqués dès lors que la fonctionnalité « Object Lock » est activée
sur le compartiment de destination. De même, les mises à jour relatives à la conservation des objets (Object Lock) ou à la conservation à des fins juridiques (legal hold) sur des objets existants ne peuvent pas être répliquées tant
que la fonctionnalité Object Lock n'est pas activée sur la destination. Les objets source créés sans Object Lock peuvent tout de même ê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 règle de cycle de vie est activée sur un compartiment cible, les actions de cycle de vie sont basées sur l'heure de création d'origine de l'objet à la source, et non sur l'heure à laquelle 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.
Il est recommandé d' utiliser des restrictions basées sur le contexte pour contrôler l'accès en fonction des informations réseau.
Cloud Functions et Code Engine
La configuration de la réplication ne fournit pas de déclencheur pour les événements Cloud Functions ou Code Engine à ce stade, mais les écritures et les suppressions d'objets créent des
notifications Object:Write et Object:Delete pour les compartiments source et cible. Ces événements sont annotés avec une zone notifications.replication_type qui indique 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 va réinitialiser certaines métadonnées d'objet, y compris les horodatages de création. Cela aura un impact sur les règles de cycle de vie et tout autre service qui utilise des horodatages de création ou de modification (tels que les réseaux de distribution 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:
- Création d'une liste de tous les objets d'un compartiment qui doivent être soumis à des règles de réplication,
- Itération sur cette liste, en exécutant une opération
PUT copysur chaque objet, la source étant identique à la cible de la demande.
Cet exemple ne réplique que la nouvelle version de l'objet créé par la demande PUT copy. Afin de répliquer toutes les versions de l'objet, il serait nécessaire de copier également chaque version individuelle.
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 écraseront les règles de réplication existantes présentes dans 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ête | Type | Description |
|---|---|---|
Content-MD5 |
Chaîne | L' base64, qui contient le hachage de la charge utile calculé selon l'algorithme « MD5 » sur 128 bits, sert de contrôle d'intégrité afin de 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 |
Doit 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 avec 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 avec une clé (nom) commençant par project_a/ dans le compartiment identifié par $DESTINATION_CRN_A, et tous les objets avec une clé (nom) commençant par project_b/ dans le compartiment identifié par $DESTINATION_CRN_B, et tous les objets avec une balise d'objet avec la clé Client et la valeur ACME dans 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 seront répliqués sur les compartiments cible comme décrit ci-dessous:
project_a/foo.mp4project_a/bar.mp4project_b/baz.pdfproject_b/acme.pdf: Ce quatrième objet comporte également une balise d'objet avec la cléClientet la valeurACME.
En raison des règles suivantes, les objets 1 et 2 seront répliqués dans $DESTINATION_CRN_A. L'objet 3 sera répliqué sur $DESTINATION_CRN_B. L'objet 4 ne sera répliqué que sur $DESTINATION_CRN_C car
la règle dont l'ID est AcmeCorp a une valeur de priorité plus élevée que la règle dont l'ID est ProjectB et, bien qu'elle réponde aux exigences des deux règles, elle ne sera soumise 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 un nom d'objet contient des caractères Unicode non pris en charge par XML, 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'échecs affichés 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 (
|
| 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 dont les informations sont affichées. |
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 | 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 de mise à jour sera réessayé une seule fois, dans la mesure du possible : ces opérations seront 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 logiciels SDK IBM COS pour Python et Node.js, bien que l'implémentation de la gestion des versions d'objet doive être entièrement compatible avec toute bibliothèque ou outil S3-compatible qui permet de définir des noeuds finaux 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 d' IBM COS SDK for Python peut être effectuée à l'aide de la syntaxe low-level client.
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 logiciel IBM COS SDK for Node.js:
const IBM = require('ibm-cos-sdk');
var config = {
endpoint: '<endpoint>',
apiKeyId: '<api-key>',
serviceInstanceId: '<resource-instance-id>',
};
var cos = new IBM.S3(config);
var params = {
Bucket: 'STRING_VALUE', /* required */
ReplicationConfiguration: { /* required */
Role: 'STRING_VALUE', /* required */
Rules: [ /* required */
{
Destination: { /* required */
Bucket: 'STRING_VALUE', /* required */
},
Status: Enabled | Disabled, /* required */
Filter: {
And: {
Prefix: 'STRING_VALUE',
Tags: [
{
Key: 'STRING_VALUE', /* required */
Value: 'STRING_VALUE' /* required */
},
/* more items */
]
},
Prefix: 'STRING_VALUE',
Tag: {
Key: 'STRING_VALUE', /* required */
Value: 'STRING_VALUE' /* required */
}
},
ID: 'STRING_VALUE',
Prefix: 'STRING_VALUE',
Priority: 'NUMBER_VALUE',
}
}
]
},
ContentMD5: 'STRING_VALUE',
};
cos.putBucketReplication(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});