Replicar objetos

La replicación permite definir reglas para la copia automática y asíncrona de objetos de un bucket de origen a un bucket de destino de la misma cuenta. Además, puede copiar objetos de un cubo a otro cubo en cuentas diferentes.

¿Qué es la réplica?

La replicación copia los objetos recién creados y las actualizaciones de objetos de un bucket de origen a un bucket de destino.

  • Sólo se copian en el bucket de destino los objetos nuevos o las versiones nuevas de los objetos existentes (creados después de añadir la regla de replicación al bucket). Los objetos existentes pueden replicarse copiándolos sobre sí mismos, creando una nueva versión replicada.
  • Los metadatos del objeto de origen se aplican al objeto replicado.
  • La replicación bidireccional entre dos buckets requiere que las reglas estén activas en ambos buckets.
  • Se pueden utilizar filtros (compuestos por prefijos y/o etiquetas) para que la regla de replicación sólo se aplique a un subconjunto de objetos. Se pueden definir múltiples reglas en una misma política y estas reglas pueden especificar diferentes destinos. De este modo, distintos objetos de un mismo bucket pueden replicarse a distintos destinos.

¿Por qué utilizar la replicación?

  • Mantenga una copia de los datos en un bucket en una ubicación geográfica diferente.
  • Cumpla la normativa sobre soberanía de datos definiendo reglas de replicación que almacenen réplicas sólo en las ubicaciones permitidas.
  • Mantenga sincronizados los datos de producción y de prueba, ya que la replicación conserva los metadatos de los objetos, como la hora de la última modificación, el ID de versión, etc.
  • Gestione la clase de almacenamiento y las políticas de ciclo de vida de los objetos replicados independientemente del origen, definiendo una clase de almacenamiento y/o reglas de ciclo de vida diferentes para el bucket de destino. Del mismo modo, puede almacenar réplicas en un bucket en una instancia de servicio independiente o incluso en una cuenta de IBM Cloud, y también controlar de forma independiente el acceso a las réplicas.

Introducción a la replicación

Para empezar, hay que cumplir algunos requisitos previos:

  • Establezca el rol de plataforma Writer o Manager en el bucket de origen, o un rol personalizado con las acciones de replicación apropiadas (como cloud-object-storage.bucket.put_replication) asignadas.
  • No es necesario tener acceso al bucket de destino, pero sí tener suficientes roles de plataforma para crear nuevas políticas IAM que permitan al bucket de origen escribir en el bucket de destino.
  • El bucket de destino no debe tener activado un cortafuegos de bucket heredado, pero puede utilizar restricciones basadas en el contexto.
  • Los objetos cifrados mediante SSE-C no pueden replicarse, aunque el cifrado gestionado(SSE-KMS)como Key Protect es totalmente compatible con la replicación.
  • Los objetos en estado archivado no pueden replicarse.
  • Si los buckets de origen y destino se encuentran en diferentes cuentas de IBM, asegúrese de crear los buckets en cada cuenta.
  • Active el control de versiones en los buckets de origen y destino.

Como el versionado es un requisito para la replicación, es imposible replicar objetos en buckets configurados con una política Inmutable Object Storage.

Utilización de una cuenta IBM

Para replicar objetos entre buckets de la misma cuenta IBM, haga lo siguiente:

  1. Tras navegar hasta el bucket de origen elegido, haga clic en la pestaña Configuración.
  2. Busque Replicación de cubos y haga clic en el botón Configurar replicación.
  3. Selecciona « Fuente de replicación » y haz clic en « Siguiente ».
  4. Seleccione la instancia y el cubo en los menús desplegables. Alternativamente, cambie el botón de opción a No y pegue el CRN del cubo de destino.
  5. Haga clic en el botón Comprobar permisos.

Ahora, tendrá que conceder al bucket de origen Writer permisos sobre el bucket de destino. Hay varias formas de hacerlo, pero la más sencilla es utilizar IBM Cloud Shell y la CLI IBM Cloud.

  1. Abrir IBM Cloud Shell en una nueva ventana o pestaña.
  2. Copie el comando CLI IBM Cloud que aparece en la consola Object storage y péguelo en el nuevo shell.
  3. Vuelva a la ventana o pestaña de configuración del cubo y haga clic de nuevo en el botón Comprobar permisos.

Ahora creará una regla de replicación.

  1. Asegúrese de que el botón de opción de estado de la regla está activado.
  2. Asigne a la regla un nombre y una prioridad, así como los filtros de prefijo o etiqueta que limitarán los objetos sujetos a la regla de replicación.
  3. Pulse Listo.

Utilización de diferentes cuentas IBM

Para replicar objetos entre buckets de diferentes cuentas de IBM, haga lo siguiente:

  1. Configure una política IAM en la cuenta IBM de destino. Para obtener información sobre la creación de una política IAM, consulte Qué son las políticas IAM y quién puede asignarlas.
  2. Busque el ID de cuenta y el ID de instancia de servicio en formato CRN en la página Configuración de cubos.
  3. A través de la interfaz de usuario IBM Cloud de la cuenta de destino, haga clic en Manage>Access**(IAM)**.
  4. Haga clic en Autenticación en el panel izquierdo.
  5. Haz clic en «Crear» para crear una nueva política de IAM.
  6. Conceder una configuración de página de autorización de servicio. Esta es la página a la que llegará después de crear una nueva política IAM.
  7. Seleccione Otra cuenta e indique el ID de cuenta de la cuenta de origen.
  8. Proporcionar acceso al servicio como Cloud Object Storage.
  9. En Alcance del acceso, seleccione Recursos específicos.
  10. Seleccione Instancia de servicio de origen e introduzca el ID de instancia de servicio para el bucket de origen.
  11. En Destino, seleccione Cloud Object Storage para el acceso al cubo de origen.
  12. En Ámbito de destino, seleccione Recursos específicos>**Instancia de servicio.
  13. Seleccione el ID de instancia de servicio de la cuenta de destino en el menú desplegable.
  14. Seleccione el rol Escritor de objetos o Escritor según sea necesario.

El rol Object writer es suficiente para habilitar la replicación.

Terminología

Cubo de origen: El bucket para el que se configura una política de replicación. Es la fuente de objetos replicados.

Bucket de destino: El bucket que se define como destino en la política de replicación del bucket de origen. Es el destino de los objetos replicados. También se denomina cubo "de destino".

Réplica: El nuevo objeto creado en un bucket de destino debido a una solicitud realizada a un bucket de origen.

¿Qué se replica?

Los nuevos objetos creados a través de CopyObject, PutObject, o CompleteMultipartUpload se replicarán desde el bucket de origen al bucket de destino. Los objetos replicados heredarán los siguientes campos de metadatos del objeto de origen: Etag, Last Modified Time, Version ID, user-attributes, y Tags.

Los marcadores de borrado se replicarán si así lo configura la política de replicación.

Las actualizaciones de las etiquetas de una versión se replicarán desde el bucket de origen al bucket de destino.

Los siguientes no se replican:

  • Acciones iniciadas por eventos del ciclo de vida
  • Objetos escritos directamente en el archivo
  • Objetos restaurados desde un nivel de archivo
  • Objetos encriptados mediante SSE-C
  • ACL de objetos

El uso de la replicación para la continuidad del negocio y la recuperación ante desastres

La replicación puede utilizarse para garantizar la continuidad del servicio en caso de interrupción:

  • Asegúrese de que los buckets de origen y destino se encuentran en ubicaciones diferentes.
  • Compruebe que las últimas versiones de los objetos están sincronizadas entre ambos buckets. Una herramienta como Rclone (el comando rclone check ) puede ser útil para comprobar la sincronicidad desde la línea de comando.
  • En caso de interrupción, el tráfico de una aplicación puede redirigirse al bucket de destino.

Coherencia e integridad de los datos

Mientras que IBM Cloud Object Storage proporciona una fuerte consistencia para todas las operaciones de IO de datos, la configuración de los cubos es finalmente consistente. Tras activar las reglas de replicación por primera vez en un bucket, la configuración puede tardar unos instantes en propagarse por el sistema y los nuevos objetos pueden empezar a replicarse.

Gestión de errores

Los fallos de replicación pueden deberse a numerosas causas, entre las que se incluyen (sin limitarse a ellas) configuraciones incorrectas de los buckets, interrupciones del servicio, interacciones de los usuarios con el bucket de destino, etc.

COS cuenta con una capacidad de recuperación integrada para gestionar los fallos de replicación. Cuando se produce un fallo, COS puede volver a intentarlo durante un máximo de 30 días. La frecuencia de los reintentos puede variar en función de la naturaleza del fallo. Por ejemplo, los fallos provocados por errores de E/S poco frecuentes pueden reintentarse en el plazo de unas horas, mientras que los fallos debidos a configuraciones erróneas de los buckets por parte de los usuarios pueden reintentarse una vez al día. Si un error no se resuelve en un plazo de 30 días, el sistema deja de reintentarlo automáticamente. Todos los fallos a largo plazo se pueden consultar a través de ListBucketReplicationFailures.

Si deseas volver a intentar los errores «caducados» que llevan más de 30 días sin resolverse, puedes activar un nuevo intento utilizando la PutBucketReplicationFailureReattempt.

Causas de los fallos

En la respuesta de la API de « ListBucketReplicationFailures », se proporciona el campo « SyncFailureCause » con cada elemento de error, indicando la última causa conocida del error. En la siguiente tabla se describen las posibles causas:

Causa Explicación
El control de versiones está desactivado en el depósito de destino La gestión de versiones no está habilitada en el depósito de destino. Es probable que el usuario haya suspendido el control de versiones tras configurar la replicación.
Operación de replicación no autorizada en el depósito de destino El servicio COS no está autorizado a modificar el depósito de destino en nombre del usuario. Comprueba si sigue existiendo la autorización de servicio a servicio entre los recursos de los buckets de origen y destino en IAM.
No se ha encontrado el bucket remoto No se ha podido localizar el contenedor de destino. Es posible que el usuario haya eliminado el bucket de destino. Comprueba si el depósito de destino sigue existiendo.
No se ha encontrado el depósito de origen/remoto o está desactivado No se ha encontrado el cubo o está inservible. Comprueba si el bucket sigue existiendo. Si es así, ponte en contacto con el servicio de atención al cliente.
No se ha encontrado el objeto de destino Se ha intentado replicar un cambio en los metadatos (por ejemplo, bloqueo de etiqueta u objeto), pero el objeto de destino no existe. Es probable que el usuario haya eliminado el objeto del bucket de destino antes de que se pudiera replicar el cambio.
No se ha encontrado el objeto local No se ha encontrado el objeto de origen al intentar la replicación. Es probable que el usuario haya eliminado el objeto de origen poco después de crearlo o modificarlo.
El bloqueo de objetos no está habilitado en el depósito de destino Se ha intentado aplicar la configuración de Object Lock a un objeto, pero el depósito de destino no tenía habilitada la función Object Lock.
La clave de cifrado no está activa o se ha eliminado COS intentó recuperar la clave de cifrado de Key Protect (el bucket de origen tiene configuradas las opciones SSE-KP/SSE-HPCS), pero la clave había sido eliminada.
Falta la información del punto final de la instancia de KMS No se ha podido recuperar el punto final del Servicio de gestión de claves necesario para leer la clave de cifrado. Si el error persiste, ponte en contacto con el servicio de atención al cliente.
No se dispone de permisos suficientes para consultar la información del punto final de KMS El recurso «source bucket» no dispone de los permisos necesarios para consultar el punto final del Servicio de gestión de claves (KMS) requerido para leer la clave de cifrado. Revisa tu política de autorización de servicio a servicio de IAM.
Error interno Diversos problemas internos que impiden la replicación. Póngase en contacto con el soporte al cliente.

Acciones de IAM

Hay nuevas acciones IAM asociadas a la replicación.

Acción IAM Rol
cloud-object-storage.bucket.get_replication Gestor, Escritor, Lector
cloud-object-storage.bucket.put_replication Gestor, Escritor
cloud-object-storage.bucket.delete_replication Gestor, Escritor
cloud-object-storage.bucket.get_replication_failures Gestor, Escritor, Lector
cloud-object-storage.bucket.put_replication_reattempt Gestor, Escritor

Sucesos de Activity Tracker

La réplica genera sucesos adicionales.

Acción de suceso Generado en Descripción
cloud-object-storage.bucket-replication.create Grupo de origen Cuando un usuario realiza una solicitud a la API de PutBucketReplication
cloud-object-storage.bucket-replication.read Grupo de origen Cuando un usuario realiza una solicitud a la API de GetBucketReplication
cloud-object-storage.bucket-replication.delete Grupo de origen Cuando un usuario realiza una solicitud a la API de DeleteBucketReplication
cloud-object-storage.bucket-replication-failures.list Grupo de origen Cuando un usuario realiza una solicitud a la API de ListBucketReplicationFailures
cloud-object-storage.bucket-replication-failures.update Grupo de origen Cuando un usuario realiza una solicitud a la API de PutReplicationFailureReattempt
cloud-object-storage.object-replication.sync Grupo de origen Cuando COS replica un objeto desde el depósito de origen
cloud-object-storage.object-replication.create Grupo de destino Cuando COS crea una nueva versión de réplica en el bucket de destino
cloud-object-storage.object-replication.update Grupo de destino Cuando COS replica una actualización de metadatos en una réplica existente del bucket de destino
cloud-object-storage.object-replication.delete Grupo de destino Cuando COS replica un marcador de eliminación en el bucket de destino

Para sucesos de cloud-object-storage.bucket-replication.create, los campos siguientes proporcionan información adicional:

Campo Descripción
requestData.replication.num_sync_remote_buckets Número de grupos de destino especificados en las reglas de réplica de grupo.
requestData.replication.failed_remote_sync Los CRN de los grupos que han fallado la comprobación de réplica.

Cuando la réplica está activa, las operaciones en objetos pueden generar la siguiente información adicional:

Campo Descripción
requestData.replication.replication_throttled Indica si la réplica del objeto se ha retrasado en el origen debido a un mecanismo de regulación.
requestData.replication.destination_bucket_id El CRN del grupo de destino.
requestData.replication.sync_type El tipo de operación de sincronización.
- content indica que los datos del objeto y cualquier metadato se escribieron en el destino.
- tag indica que se replicaron las etiquetas del objeto.
- retention indica que se replicaron los ajustes de retención de Object Lock.
- legal_hold indica que se replicaron los ajustes de retención legal de Object Lock.
- delete indica que se escribió el marcador de borrado en el destino.
responseData.replication.source_bucket_id El CRN del grupo de origen.
responseData.replication.result Los valores pueden ser success, failure (indica un error de servidor), user (indica un error de usuario).
responseData.replication.message El mensaje de respuesta HTTP (como OK).

Puede rastrear un objeto desde el momento en que se graba en el origen hasta que se graba en el destino. Busque el ID de solicitud asociado con la grabación del objeto y aparecerán tres sucesos:

  • El PUT original.
  • La solicitud de sincronización del origen.
  • La solicitud PUT en el destino.

Cualquiera de estos tres que faltan indica una anomalía.

Uso y contabilidad

Todas las réplicas son objetos y contribuyen al uso igual que cualquier otro dato. La réplica correcta da como resultado solicitudes PUT, GET y HEAD facturables, aunque no se facturará el ancho de banda consumido en el proceso de réplica.

La replicación genera métricas adicionales para su uso con IBM Cloud Monitoring:

  • ibm_cos_bucket_replication_sync_requests_issued
  • ibm_cos_bucket_replication_sync_requests_received

Interacciones

Mantenimiento de versiones

El mantenimiento de versiones es obligatorio para habilitar la réplica. Después de habilitar el mantenimiento de versiones en los grupos de origen y de destino y configurar la réplica en el grupo de origen, puede encontrar los problemas siguientes:

  • Si intenta inhabilitar el mantenimiento de versiones en el grupo de origen, Object Storage devuelve un error. Debe eliminar la configuración de réplica para poder inhabilitar el mantenimiento de versiones en el grupo de origen.
  • Si inhabilita el mantenimiento de versiones en el grupo de destino, la réplica falla.

Bloqueo de objetos

El bloqueo de objetos puede activarse en los buckets que tengan replicación. Cuando se crean objetos de origen con Object Lock (retención y/o retención legal), o si se actualiza Object Lock en objetos ya existentes, se replicará en el destino.

Object Lock solo se puede replicar si Object Lock está habilitado en el depósito de destino. Por lo tanto, se recomienda habilitar Object Lock en el depósito de destino si está habilitado en el depósito de origen.

En la siguiente tabla se resume el comportamiento cuando los buckets de origen y destino tienen configuraciones diferentes de Object Lock:

Bloqueo del objeto de origen Bloqueo del objeto de destino Comportamiento
Activado Activado Se replicarán en el destino todos los estados de bloqueo de objetos del origen.

Si el objeto de origen se crea sin Object Lock, es posible que se aplique a la réplica la retención predeterminada del bucket de destino.

La replicación de Object Lock cumple todas las restricciones de Object Lock de S3. Por ejemplo, nunca puede acortar el periodo de retención en la réplica en modo de cumplimiento si el usuario ha realizado cambios por su cuenta en el destino.
Desactivado Activado Los objetos de origen no pueden tener «Object Lock», por lo que los estados de «Object Lock» nunca se propagarán del origen al destino.
Si el depósito de destino tiene configurada una retención predeterminada, esta se aplicará a las nuevas réplicas que se creen.
Activado Desactivado Los objetos de origen creados con Object Lock no se replicarán. COS vuelve a intentar estas operaciones fallidas y pueden replicarse una vez que se haya activado Object Lock en el bucket de destino. Las actualizaciones relacionadas con la retención de Object Lock o la retención legal en objetos existentes tampoco se pueden replicar hasta que se habilite Object Lock en el destino.

Los objetos de origen creados sin Object Lock pueden replicarse igualmente.

Cifrado de Key Protect

Los objetos de origen se cifrarán utilizando la clave raíz del grupo de origen y las réplicas se cifrarán utilizando la clave raíz del grupo de destino.

Configuraciones de ciclo de vida

Si una política de ciclo de vida está habilitada en un grupo de destino, las acciones de ciclo de vida se basarán en la hora de creación original del objeto en el origen, no en la hora en que la réplica pasa a estar disponible en el grupo de destino.

Immutable Object Storage

El uso de políticas de retención es imposible en un grupo con el mantenimiento de versiones habilitado, y como el mantenimiento de versiones es un requisito para la réplica, es imposible replicar objetos en o desde un grupo con el Object Storage inmutable.

Cortafuegos de grupo heredado

Los grupos que utilizan cortafuegos heredados de para restringir el acceso basándose en las direcciones IP no pueden utilizar la réplica, ya que los servicios en segundo plano que replican los objetos no tienen direcciones IP fijas y no pueden pasar el cortafuegos.

En su lugar, se recomienda utilizar restricciones basadas en contexto para controlar el acceso basándose en la información de red.

Cloud Functions y Code Engine

La configuración de la réplica no proporciona un desencadenante de para los sucesos de Cloud Functions o Code Engine en este momento, pero las escrituras y supresiones de objetos crearán notificaciones de Object:Write y Object:Delete para los grupos de origen y de destino. Estos sucesos se anotan con un campo notifications.replication_type que indica si el suceso ha desencadenado una sincronización o lo ha desencadenado una sincronización.

Replicación de objetos existentes

Una regla de réplica sólo puede actuar sobre objetos que se escriben después de que la regla se haya configurado y aplicado a un grupo. Si hay objetos existentes en un grupo que se deben replicar, es necesario que los procesos de réplica sean conscientes de la existencia de los objetos. Esto se puede llevar a cabo fácilmente utilizando la operación PUT copy para copiar objetos en sí mismos.

Este proceso restablecerá algunos metadatos de objeto, incluidas las indicaciones de fecha y hora de creación. Esto afectará a las políticas de ciclo de vida y a cualquier otro servicio que utilice indicaciones de fecha y hora de creación o modificación (como las redes de entrega de contenido). Asegúrese de que las interrupciones que puedan surgir al restablecer los metadatos de objeto se tratan adecuadamente.

El proceso implica:

  1. Creación de una lista de todos los objetos de un grupo que deben estar sujetos a reglas de réplica,
  2. Iterando sobre esa lista, realizando una operación PUT copy en cada objeto con el origen siendo idéntico al destino de la solicitud.

Este ejemplo sólo replicará la nueva versión del objeto creado por la solicitud PUT copy. Para poder replicar todas las versiones del objeto, sería necesario copiar también cada versión individual.

El ejemplo siguiente está escrito en Python, pero el algoritmo se puede aplicar en cualquier lenguaje de programación o contexto.

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)

Ejemplos de API REST

Los ejemplos siguientes se muestran utilizando cURL para facilitar su uso. Las variables de entorno se utilizan para representar elementos específicos del usuario como, por ejemplo, $BUCKET, $TOKEN y $REGION. Tenga en cuenta que $REGION también incluiría cualquier especificación de tipo de red, por lo que el envío de una solicitud a un grupo en us-south utilizando la red privada requeriría establecer la variable en private.us-south.

Habilitar réplica en un grupo

La configuración de réplica se proporciona como XML en el cuerpo de la solicitud. Las nuevas solicitudes sobrescribirán las reglas de réplica existentes que estén presentes en el grupo.

Una configuración de réplica debe incluir al menos una regla y puede contener un máximo de 1.000. Cada regla identifica un subconjunto de objetos para replicar filtrando los objetos en el grupo de origen. Para elegir subconjuntos adicionales de objetos a replicar, añada una regla para cada subconjunto.

Para especificar un subconjunto de los objetos en el grupo de origen a los que aplicar una regla de réplica, añada el elemento Filter como hijo del elemento Rule. Puede filtrar objetos basándose en un prefijo de clave de objeto, una o más etiquetas de objeto, o ambas. Al añadir el elemento Filter en la configuración, también debe añadir los elementos siguientes: DeleteMarkerReplication, Status y Priority.

Cabeceras opcionales

Cabeceras opcionales
Cabecera Tipo Descripción
Content-MD5 Serie El hash « MD5 » de 128 bits de la carga útil, codificado mediante el algoritmo « base64 », que se utiliza como comprobación de integridad para garantizar que la carga útil no se haya alterado durante la transmisión.
x-amz-checksum-crc32 Serie Esta cabecera es la suma de comprobación de 32 bits CRC32 codificada en Base64 del objeto.
x-amz-checksum-crc32c Serie Esta cabecera es la suma de comprobación de 32 bits CRC32C codificada en Base64 del objeto.
x-amz-checksum-crc64nvme Serie Esta cabecera es la suma de comprobación de 64 bits CRC64NVME codificada en Base64 del objeto. La suma de comprobación de CRC64NVME es siempre una suma de comprobación de objeto completo.
x-amz-checksum-sha1 Serie Este encabezado es el Base64 codificado, 160-bit SHA1 digest del objeto.
x-amz-checksum-sha256 Serie Este encabezado es el Base64 codificado, 256-bit SHA256 digest del objeto.

Se requiere un encabezado Content-MD5 o un encabezado checksum (incluyendo x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1, o x-amz-checksum-sha256) como comprobación de integridad de la carga útil. El cuerpo de la solicitud debe contener un bloque XML con el esquema siguiente:

Elemento Tipo Hijos Predecesor Restricción
ReplicationConfiguration Contenedor Rule Ninguna Límite 1.
Rule Contenedor ID, Status, Filter, DeleteMarkerReplication, Destination, Priority ReplicationConfiguration Límite 1000.
ID Serie Ninguna Rule Debe estar compuesto por (a-z,A-Z0-9) y los siguientes símbolos: ! _ . * ' ( ) -
Destination Contenedor Bucket Rule Límite 1.
Bucket Serie Ninguna Destination El CRN del grupo de destino.
Priority Entero Ninguna Rule Se asocia una prioridad con cada regla. Puede haber casos en los que varias reglas pueden ser aplicables a un objeto que se carga. En estas situaciones, el almacenamiento de objetos aplicará la regla aplicable con la prioridad más alta al replicar ese objeto. Por lo tanto, sólo se puede aplicar una única regla de réplica a cualquier objeto, independientemente de cuántas reglas de la política de réplica puedan coincidir con el objeto. Tenga en cuenta que cuanto mayor sea el número, mayor será la prioridad.
Status Serie Ninguna Rule Indica si la regla está activada. Los valores válidos son Enabled o Disabled.
DeleteMarkerReplication Contenedor Status Rule Límite 1.
Status Serie Ninguna DeleteMarkerReplication Especifica si el almacenamiento de objetos replica marcadores de supresión. Los valores válidos son Enabled o Disabled.
Filter Serie Prefix, Tag, AND Rule Filtro que identifica el subconjunto de objetos al que se aplica la regla de réplica. Un Filter debe especificar exactamente un elemento hijo Prefix, Tag o And.
Prefix Serie Ninguna Filter Prefijo de nombre de clave de objeto que identifica el subconjunto de objetos al que se aplica la regla.
Tag Serie Ninguna Filter Contenedor para especificar una clave y un valor de etiqueta. La regla sólo se aplica a los objetos que tienen la etiqueta en su conjunto de etiquetas.
And Serie Ninguna Filter Un contenedor para especificar filtros de reglas. Los filtros determinan el subconjunto de objetos al que se aplica la regla. Este elemento sólo es necesario si especifica más de un filtro.
Key Serie Ninguna Tag La clave de etiqueta.
Value Serie Ninguna Tag Valor de la etiqueta.

Este ejemplo replicará cualquier objeto nuevo, pero no replicará los marcadores de supresión.

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

Este ejemplo replicará cualquier objeto con una clave (nombre) que empiece por project_a/ en el grupo identificado con $DESTINATION_CRN_A, y cualquier objeto con una clave (nombre) que empiece por project_b/ en el grupo identificado con $DESTINATION_CRN_B, y cualquier objeto que tenga una etiqueta de objeto con la clave Client y el valor ACME en un tercer grupo identificado con $DESTINATION_CRN_C, y replicará los marcadores de supresión en todos los casos.

Supongamos que se añaden los cuatro objetos siguientes al grupo de origen. Se replicarán en los grupos de destino tal como se describe a continuación:

  1. project_a/foo.mp4
  2. project_a/bar.mp4
  3. project_b/baz.pdf
  4. project_b/acme.pdf. Este cuarto objeto también tiene una etiqueta de objeto con la clave Client y el valor ACME.

Debido a las reglas siguientes, los objetos 1 y 2 se replicarán en $DESTINATION_CRN_A. El objeto 3 se replicará en $DESTINATION_CRN_B. El objeto 4 sólo se replicará en $DESTINATION_CRN_C porque la regla con el ID AcmeCorp tiene un valor de prioridad más alto que la regla con el ID ProjectB y, aunque cumple los requisitos para ambas reglas, sólo estará sujeta a la primera.

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

Una solicitud correcta devuelve una respuesta 200.

Ver configuración de réplica para un grupo

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

Esto devuelve un cuerpo de respuesta XML con el esquema adecuado:

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

Eliminar la configuración de replicación de un depósito

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

Una solicitud correcta devuelve una respuesta 204.

Mostrar los errores de replicación de una lista de un bucket

Ejemplo de solicitud utilizando curl

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

Parámetros de consulta opcionales

Nombre Tipo Descripción
tipo de codificación Serie Si en el nombre de un objeto se utilizan caracteres Unicode que no son compatibles con XML, este parámetro se puede establecer en «url» para codificar correctamente la respuesta.
max-keys Serie Limita el número de errores que se muestran en la respuesta. El valor predeterminado y máximo es 1.000.
primero-intento-de-sincronización-anterior Serie Especifica la marca de tiempo en la que debe comenzar la lista, en orden cronológico inverso. La hora corresponde al momento en que se activó inicialmente la replicación ( campo de la entrada). Por lo tanto, la lista incluirá todos los fallos de replicación que tengan una antigüedad igual o superior a la marca de tiempo especificada.
token de continuación Serie Especifica el fallo a partir del cual debe comenzar la lista, en orden cronológico inverso. Esto se utiliza con fines de paginación en caso de que haya más entradas disponibles además de las devueltas en la última solicitud de listado.

Respuesta de ejemplo

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

Elementos de respuesta

Nombre Tipo Descripción
ListReplicationFailureResult Contenedor Etiqueta de nivel raíz
Name Serie Nombre del bucket que se está mostrando.
FirstSyncAttemptedBefore Serie ISO-8601 fecha y hora de la solicitud ?first-sync-attempted-before
MaxKeys Número Número máximo de claves solicitadas en este anuncio.
IsTruncated Boolean Si la lista actual está incompleta (es decir, si hay más errores después del último elemento que aparece en esta lista). Si true, siempre se proporciona NextContinuationToken.
EncodingType Serie Tipo de codificación solicitado en este anuncio.
KeyCount Número Número de elementos defectuosos que aparecen en esta lista.
ContinuationToken Serie El token de continuación que se especificó para este anuncio.
NextContinuationToken Serie Siguiente marcador de continuación que se utilizará para la paginación en caso de que la lista actual se haya truncado.

Programar un nuevo intento de los fallos de replicación caducados en un bucket

Esto programa un nuevo intento de todas las operaciones de replicación fallidas, incluidas aquellas «caducadas» que tengan más de 30 días de antigüedad y que ya no puedan ser objeto de reintentos automáticos por parte del sistema. Los fallos de replicación a largo plazo se procesan en ciclos de 24 horas. Al enviar esta solicitud, se programan nuevos intentos para los fallos antiguos en el ciclo que comienza a medianoche (GMT) del día siguiente. Por ejemplo, si se envía una solicitud a 2026-01-01T01:00:00Z, el momento más temprano en el que se procesarán estos errores es 2026-01-02T00:00:00Z. Si la solicitud se ha realizado correctamente, esta marca de tiempo también se incluye en el encabezado de respuesta « x-ibm-replication-reattempt-scheduled-time ». Las solicitudes múltiples que llegan el mismo día en GMT (es decir, que dan lugar a la misma hora programada) son idempotentes.

Cada fallo por caducidad se volverá a intentar una vez, en la medida de lo posible; se ejecutarán, pero no se garantiza el momento en que se llevarán a cabo.

Ejemplo de solicitud utilizando curl

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

Respuesta de ejemplo

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

Ejemplos de SDK

Los ejemplos siguientes utilizan los SDK de IBM COS para Python y Node.js, aunque la implementación del mantenimiento de versiones de objetos debe ser totalmente compatible con cualquier biblioteca o herramienta S3-compatible que permita el establecimiento de puntos finales personalizados. El uso de herramientas de terceros requiere credenciales HMAC para calcular firmas de AWS V4. Para obtener más información sobre las credenciales HMAC, consulte la documentación.

Python

La habilitación del mantenimiento de versiones utilizando el SDK de IBM COS para Python se puede realizar utilizando la sintaxis de cliente de bajo nivel.

Utilización de un cliente:

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

Listado de las versiones de un objeto utilizando el mismo cliente:

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

Tenga en cuenta que las API de Python son muy flexibles y que hay muchas formas diferentes de realizar la misma tarea.

Node.js

Habilitación del mantenimiento de versiones utilizando 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
});