Cómo usar la replicación entre buckets

En esta página, se proporciona una descripción general de la replicación entre bucket y las instrucciones sobre cómo utilizar la función.

Descripción general de la replicación entre buckets

En algunos casos, es posible que desees copiar datos de un bucket de Cloud Storage a otro. La replicación entre buckets copia objetos nuevos y actualizados de forma asíncrona de un bucket de origen a uno de destino.

La replicación entre buckets difiere de la replicación predeterminada y la replicación turbo en que tus datos existen en dos buckets, cada uno con su propia configuración, como la ubicación de almacenamiento, la encriptación, el acceso y la clase de almacenamiento. Como resultado, ofrece disponibilidad y recuperación de datos, pero también es adecuada para lo siguiente:

  • Soberanía de los datos: Mantén los datos en regiones geográficamente distantes.
  • Mantén versiones de desarrollo y producción separadas: Crea buckets y espacios de nombres distintos para que el desarrollo no afecte tu carga de trabajo de producción.
  • Compartir datos: Replica los datos en un bucket que pertenece a un proveedor o socio.
  • Agregación de datos: Combina datos de diferentes buckets en uno solo para ejecutar cargas de trabajo de análisis.
  • Administra el costo, la seguridad y el cumplimiento: Mantén tus datos con diferentes propiedades, clases de almacenamiento y períodos de retención.

La replicación entre bucket usa el Servicio de transferencia de almacenamiento para replicar objetos y Pub/Sub para recibir alertas sobre los cambios en el origen y el destino buckets. La replicación entre buckets se puede habilitar en los buckets nuevos que crees y en los existentes. La mayoría de los objetos se pueden replicar en cuestión de minutos, mientras que los objetos de más de un GiB pueden tardar varias horas.

Antes de comenzar

Antes de comenzar, completa los pasos que se indican a continuación.

Habilita la API de Storage Transfer Service

Si aún no lo hiciste, habilita la API de Storage Transfer Service.

Obtén las funciones necesarias

Para obtener los permisos que necesitas para usar la replicación entre buckets, pídele a tu administrador que te otorgue el rol de IAM de usuario de transferencia de almacenamiento (roles/storagetransfer.user) en el bucket o el proyecto.

Este rol predefinido contiene los permisos necesarios para usar la replicación entrebuckets. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para usar la replicación entre bucket:

  • storagetransfer.jobs.create
  • storagetransfer.jobs.delete
  • storagetransfer.jobs.get
  • storagetransfer.jobs.list
  • storagetransfer.jobs.run
  • storagetransfer.jobs.update

Para obtener instrucciones para otorgar roles a los buckets, consulta Usa IAM con buckets. Instrucciones para otorgar roles en proyectos, consulta Administra el acceso a los proyectos.

Otorga roles necesarios

La replicación entre buckets usa Pub/Sub para recibir notificaciones de cambios en tu bucket de origen y el Servicio de transferencia de almacenamiento para replicar objetos de tu bucket de origen a tu bucket de destino. Para usar la replicación entre buckets, también debes otorgar los permisos necesarios al agente de servicio que usa el Servicio de transferencia de almacenamiento para replicar datos y al agente de servicio que usa Pub/Sub para escribir notificaciones.

Otorga los roles necesarios al agente de servicio del Servicio de transferencia de almacenamiento

El Servicio de transferencia de almacenamiento usa un agente de servicio administrado por Google para replicar los datos. La dirección de correo electrónico de este agente de servicio sigue el formato de nombres project-PROJECT_NUMBER@storage-transfer-service.. Puedes obtener la dirección de correo electrónico del agente de servicio del Servicio de transferencia de almacenamiento de la siguiente manera: con la API de googleServiceAccounts.get del Servicio de transferencia de almacenamiento

El agente de servicio del Servicio de transferencia de almacenamiento necesita los siguientes permisos para replicar tus objetos y configurar notificaciones de Pub/Sub para tu bucket de origen:

Permisos necesarios

  • storage.buckets.get en el bucket de origen y el de destino
  • storage.buckets.update en el bucket de origen
  • storage.objects.list en el bucket de origen
  • storage.objects.get en el bucket de origen
  • storage.objects.rewrite en el bucket de destino
  • pubsub.topics.create en el proyecto

Estos permisos se pueden otorgar a través del rol de Editor de Pub/Sub (roles/pubsub.editor) y del rol de Administrador de almacenamiento (roles/storage.admin). Para obtener un rol menos permisivo que el de administrador de almacenamiento, también puedes usar un rol personalizado.

Otorga los roles necesarios al agente de servicio de Cloud Storage

Cloud Storage usa un agente de servicio administrado por Google para administrar las notificaciones de Pub/Sub. Sigue la dirección de correo electrónico de este agente de servicio el formato de nombres service-PROJECT_NUMBER@gs-project-accounts.

El agente de servicio de Cloud Storage necesita los siguientes permisos para lo siguiente: configura Pub/Sub y publica mensajes en un tema:

Permisos necesarios

  • pubsub.topics.publish en el tema de Pub/Sub
  • pubsub.subscriptions.consume en el tema de Pub/Sub
  • pubsub.subscriptions.create en el proyecto

Estos permisos se pueden otorgar a través del rol de publicador de Pub/Sub (roles/pubsub.publisher).

Crea un trabajo de replicación

Console

Para obtener instrucciones sobre cómo crear un trabajo de replicación en la consola de Google Cloud, consulta consulta Crea un trabajo de replicación con la consola de Google Cloud.

Línea de comandos

Cuando usas Google Cloud CLI, puedes crear un trabajo de replicación para buckets existentes.

Para crear un trabajo de replicación, usa el comando gcloud alpha transfer jobs create con la marca --replication:

gcloud alpha transfer jobs create gs://SOURCE_BUCKET_NAME gs://DESTINATION_BUCKET_NAME --replication

Reemplaza lo siguiente:

  • SOURCE_BUCKET_NAME por el nombre de la fuente que quieres replicar. Por ejemplo, my-source-bucket

  • DESTINATION_BUCKET_NAME por el nombre del bucket de destino. Por ejemplo, my-destination-bucket

APIs de REST

API de JSON

Cuando usas la API de JSON, puedes crear un trabajo de replicación para buckets existentes.

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Crea un archivo JSON que contenga un objeto TransferJob con un recurso ReplicationSpec inicializado:

    TransferJob {
     "name": "TRANSFER_JOB_NAME",
     ...
     ReplicationSpec: {
       "gcsDataSource": {
         "bucketName": "SOURCE_BUCKET_NAME"
       },
       "gcsDataSink" {
         "bucketName": "DESTINATION_BUCKET_NAME"
       },
       "objectConditions": {
       },
       "transferOptions": {
         "overwriteWhen": "OVERWRITE_OPTION"
       }
     }
     ...
    }

    Reemplaza lo siguiente:

    • TRANSFER_JOB_NAME por el nombre que desees para asignar el trabajo de replicación. Consulta la documentación de referencia de transferJobs para conocer los requisitos de nombres.

    • SOURCE_BUCKET_NAME por el nombre de la bucket de origen que contenga los objetos que deseas replicar. Por ejemplo, example-source-bucket.

    • DESTINATION_BUCKET_NAME por el nombre del bucket de destino en el que se replicarán tus objetos. Por ejemplo, example-destination-bucket.

    • OVERWRITE_OPTION con una opción para saber cómo hacerlo los objetos existentes en el bucket de destino se pueden reemplazar de un trabajo de replicación, lo que puede ocurrir cuando el destino de origen y el de origen tienen el mismo nombre. El valor debe ser uno de los siguientes:

      • ALWAYS: Siempre reemplaza los objetos en el bucket de destino.

      • DIFFERENT: Solo reemplaza los objetos en el bucket de destino si los datos del objeto de destino son diferentes de los datos del objeto de origen.

      • NEVER: Nunca reemplaza objetos en el bucket de destino.

  3. Usa cURL para llamar a la API de REST del Servicio de transferencia de almacenamiento con una solicitud transferJobs.create:

    curl -X POST --data-binary @JSON_FILE_NAME \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs"

    Aquí:

    • JSON_FILE_NAME es el nombre del archivo JSON. que creaste en el paso 2.

Para verificar el estado de la tarea de replicación, consulta Cloud Logging para ver los registros del Servicio de transferencia de almacenamiento.

Mostrar lista de trabajos de replicación

Console

Para obtener instrucciones sobre cómo enumerar los trabajos de replicación en la consola de Google Cloud, consulta consulta Crea una lista de trabajos de replicación usando la consola de Google Cloud.

Línea de comandos

Usa el comando gcloud alpha transfer jobs list con la marca --job-type:

gcloud alpha transfer jobs list --job-type=replication

API de REST

API de JSON

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de REST del Servicio de transferencia de almacenamiento con una solicitud transferJobs.list:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs"

Cómo ver un trabajo de replicación

Console

Para obtener instrucciones sobre cómo ver un trabajo de replicación en la consola de Google Cloud, consulta consulta Visualiza un trabajo de replicación con la consola de Google Cloud.

Línea de comandos

Usa el comando gcloud alpha transfer jobs describe:

gcloud alpha transfer jobs describe JOB_NAME

Reemplaza lo siguiente:

API de REST

API de JSON

  1. Tener gcloud CLI instalada y también inicializada, lo que permite generas un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de REST del Servicio de transferencia de almacenamiento con una solicitud transferJobs.get:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"

    Reemplaza lo siguiente:

Actualiza un trabajo de replicación

Puedes actualizar los siguientes campos de un trabajo de replicación:

  • La descripción del trabajo de replicación

  • La configuración para ejecutar un trabajo de replicación

  • La configuración de las notificaciones publicadas en Pub/Sub

  • El comportamiento de registro para operaciones de trabajo de replicación

  • El estado del trabajo de replicación (habilitado, inhabilitado o borrado)

Console

Si deseas obtener instrucciones sobre cómo actualizar un trabajo de replicación en la consola de Google Cloud, consulta Cómo actualizar un trabajo de replicación con la consola de Google Cloud.

Línea de comandos

Usa el comando gcloud alpha transfer jobs update con las marcas que controlan las propiedades del trabajo de replicación que deseas actualizar. Para ver una lista de posibles marcas, consulta el Documentación de gcloud alpha transfer jobs update

Por ejemplo, para actualizar el comportamiento de reemplazo del objeto del trabajo de replicación, Ejecuta el comando gcloud alpha transfer jobs update con el Marca de --overwrite-when:

gcloud alpha transfer jobs update JOB_NAME --overwrite-when=OVERWRITE_OPTION

Reemplaza lo siguiente:

  • JOB_NAME con el ID único del trabajo de replicación Por ejemplo, 1234567890 Para encontrar el ID de tu trabajo de transferencia, enumera o consulta el trabajo.

  • OVERWRITE_OPTION con una opción para cómo se pueden reemplazar los objetos existentes en el bucket de destino como resultado de un trabajo de replicación, lo que puede suceder cuando el objeto de destino y el objeto de origen tienen el mismo nombre. El valor debe ser uno de los siguientes:

    • always: Siempre reemplaza los objetos de destino.

    • different: Solo reemplaza los objetos en el bucket de destino. si los datos del objeto de destino son diferentes de los de objetos.

    • never: Nunca reemplaza los objetos de destino.

API de REST

API de JSON

  1. Tener la gcloud CLI instalada e inicializada, lo que te permite generar un token de acceso para el encabezado Authorization.

  2. Crea un archivo JSON que contenga la siguiente estructura que incluya los campos del objeto TransferJob que quieras actualización:

    {
     "projectId": string,
     "transferJob": {
       object (TransferJob)
     },
       "updateTransferJobFieldMask": UPDATE_MASK
    }

    Aquí:

    • object (TransferJob) se reemplaza por los campos del trabajo de replicación que deseas actualizar. Consulta la La representación del recurso TransferJob para obtener más información.

    • UPDATE_MASK es una lista separada por comas de los nombres de campo que deseas actualizar. Los valores pueden ser uno o más de los siguientes: description, transferSpec, notificationConfig, loggingConfig y status.

    Para obtener más información sobre los nombres de campos que puedes incluir, consulta el cuerpo de la solicitud de transferJobs.patch.

  3. Usa cURL para llamar a la API de REST del Servicio de transferencia de almacenamiento con una solicitud transferJobs.patch:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"

    Reemplaza lo siguiente:

Borra un trabajo de replicación

Console

Si deseas obtener instrucciones sobre cómo borrar una tarea de replicación con la consola de Google Cloud, consulta Cómo borrar una tarea de replicación con la consola de Google Cloud.

Línea de comandos

Usa el comando gcloud alpha transfer jobs delete:

gcloud alpha transfer jobs delete JOB_NAME

Reemplaza lo siguiente:

API de REST

API de JSON

  1. Tener gcloud CLI instalada y también inicializada, lo que permite generas un token de acceso para el encabezado Authorization.

  2. Usa cURL para llamar a la API de REST del Servicio de transferencia de almacenamiento con una solicitud transferJobs.delete:

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"

    Reemplaza lo siguiente: