Usar la replicación entre segmentos

En esta página se ofrece una descripción general de la replicación entre contenedores y se explica cómo usar esta función.

Información general sobre la replicación entre contenedores

En algunos casos, puede que quieras copiar datos de un segmento de Cloud Storage a otro. La replicación entre segmentos copia de forma asíncrona los objetos nuevos y actualizados de un segmento de origen a un segmento de destino.

La replicación entre segmentos se diferencia de la replicación predeterminada y de la replicación turbo en que los datos se almacenan en dos segmentos, cada uno con sus propias configuraciones, como la ubicación de almacenamiento, el cifrado, el acceso y la clase de almacenamiento. Por lo tanto, ofrece recuperación y disponibilidad de datos, pero también es adecuada para lo siguiente:

  • Soberanía de los datos: mantén los datos en regiones geográficamente distantes.
  • Mantener versiones de desarrollo y de producción independientes: crea buckets y espacios de nombres distintos para que el desarrollo no afecte a tu carga de trabajo de producción.
  • Compartir datos: replica datos en un contenedor propiedad de un proveedor o un partner.
  • Agregación de datos: combina datos de diferentes segmentos en un solo segmento para ejecutar cargas de trabajo de analíticas.
  • Gestionar los costes, la seguridad y el cumplimiento: mantén tus datos en diferentes propiedades, clases de almacenamiento y periodos de retención.

La replicación entre segmentos usa el Servicio de transferencia de Storage para replicar objetos y Pub/Sub para recibir alertas sobre los cambios en los segmentos de origen y de destino. La replicación entre contenedores se puede habilitar en los contenedores que crees y en los que ya tengas. 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.

Limitaciones

  • La replicación entre segmentos no se admite en los segmentos de espacios de nombres jerárquicos.

  • Las eliminaciones de objetos en el segmento de origen no se replican en el segmento de destino.

  • Las configuraciones del ciclo de vida de los objetos no se replican.

  • Cuando se replican objetos, no se conservan los metadatos de marca de tiempo (por ejemplo, timeCreated y timeUpdated). Para obtener más información sobre la conservación de metadatos, consulta el artículo sobre transferencias entre segmentos de Cloud Storage.

  • Como la replicación entre segmentos se puede usar para replicar datos entre segmentos ubicados en cualquier Google Cloud ubicación, el rendimiento de la replicación entre segmentos varía en función de las ubicaciones seleccionadas. Por lo tanto, la replicación entre contenedores no ofrece un objetivo de punto de recuperación (RPO).

Antes de empezar

Antes de empezar, sigue estos pasos.

Habilitar la API Storage Transfer Service

Si aún no lo ha hecho, habilite la API Storage Transfer Service.

Obtener los roles necesarios

Para obtener los permisos que necesitas para usar la replicación entre segmentos, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Usuario de Transferencia de Storage (roles/storagetransfer.user) en el segmento o en el proyecto de origen.

Este rol predefinido contiene los permisos necesarios para usar la replicación entre contenedores. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para usar la replicación entre contenedores, se necesitan los siguientes permisos:

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

Para obtener instrucciones sobre cómo conceder roles en los contenedores, consulta Usar IAM con contenedores. Para obtener instrucciones sobre cómo conceder roles en proyectos, consulta el artículo Gestionar el acceso a proyectos.

Conceder los roles necesarios

La replicación entre segmentos usa el Servicio de transferencia de Storage para replicar objetos de tu segmento de origen en tu segmento de destino, y Pub/Sub para recibir notificaciones de los cambios en tu segmento de origen.

Para que la replicación entre segmentos pueda usar estos servicios, debes conceder los permisos necesarios a la cuenta de servicio que usa el Servicio de transferencia de Storage para replicar datos, así como al agente de servicio que usa Pub/Sub para escribir notificaciones.

Conceder los roles necesarios para el Servicio de transferencia de Storage

Los permisos necesarios para replicar datos mediante el Servicio de transferencia de Storage se pueden conceder a una de estas dos cuentas de servicio:

  • El agente de servicio del Servicio de transferencia de Storage, que Google crea y gestiona automáticamente. La dirección de correo de este agente de servicio sigue el formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com. Para obtener la dirección de correo del agente de servicio del Servicio de transferencia de Storage, puedes usar la API googleServiceAccounts.get del Servicio de transferencia de Storage.

  • Una cuenta de servicio gestionada por el usuario. La dirección de correo de esta cuenta de servicio sigue el formato de nomenclatura SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. Puedes crear tu propia cuenta de servicio y conceder los permisos necesarios para replicar los datos.

El agente de servicio del Servicio de transferencia de Storage o la cuenta de servicio de usuario necesitan los siguientes permisos para replicar tus objetos y configurar las notificaciones de Pub/Sub de tu segmento de origen:

Permisos obligatorios

Deben concederse los siguientes permisos en el proyecto de origen:

  • pubsub.topics.create
  • pubsub.subscriptions.create
  • pubsub.subscriptions.consume
  • iam.serviceAccounts.actAs si usas una cuenta de servicio gestionada por el usuario. No es necesario para el agente del Servicio de transferencia de Storage.

Se deben conceder los siguientes permisos en el segmento de origen:

  • storage.buckets.get
  • storage.buckets.update
  • storage.objects.get

Se deben conceder los siguientes permisos en el segmento de destino:

  • storage.buckets.get
  • storage.objects.create
  • storage.objects.get

Estos permisos se pueden conceder a través de roles personalizados o concediendo todos los roles predefinidos siguientes:

  • Función Editor de Pub/Sub (roles/pubsub.editor) en el proyecto de origen
  • Roles Propietario de segmentos heredados de Storage (roles/storage.legacyBucketOwner) y Lector de objetos de Storage (roles/storage.objectViewer) en el segmento de origen
  • Roles Editor de segmentos heredados de Storage (roles/storage.legacyBucketWriter) y Lector de objetos de Storage (roles/storage.objectViewer) en el segmento de destino
  • Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) en el proyecto de origen, si usas una cuenta de servicio gestionada por el usuario. No es necesario para el agente de servicio del Servicio de transferencia de Storage.

Asignar los roles necesarios para Pub/Sub

Cloud Storage usa un agente de servicio gestionado por Google para gestionar las notificaciones de Pub/Sub. La dirección de correo de este agente de servicio sigue el formato de nombre service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com.

El agente de servicio de Cloud Storage necesita los siguientes permisos para configurar Pub/Sub y publicar mensajes en un tema:

Permisos obligatorios

  • 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 conceder a través del rol Publicador de Pub/Sub (roles/pubsub.publisher).

Crear una tarea de replicación

Consola

Para obtener instrucciones sobre cómo crear una tarea de replicación en la consola, consulta Crear una tarea de replicación con la Google Cloud consola. Google Cloud

Línea de comandos

Cuando usas la CLI de Google Cloud, puedes crear un trabajo de replicación para los segmentos que ya tengas.

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

Sustituye:

  • SOURCE_BUCKET_NAME con el nombre del cubo de origen que quieras replicar. Por ejemplo, my-source-bucket.

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

APIs REST

API JSON

Cuando usas la API JSON, puedes crear un trabajo de replicación para los contenedores que ya tengas.

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

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

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

    Sustituye:

    • TRANSFER_JOB_NAME con el nombre que quieras asignar al trabajo de replicación. Consulta la transferJobsdocumentación de referencia para ver los requisitos de nomenclatura.

    • SOURCE_BUCKET_NAME con el nombre del segmento de origen que contiene los objetos que quieres replicar. Por ejemplo, example-source-bucket.

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

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

      • ALWAYS: sobrescribir siempre los objetos del segmento de destino

      • DIFFERENT: solo sobrescribir objetos en el segmento de destino si los datos del objeto de destino son diferentes de los datos del objeto de origen

      • NEVER: nunca sobrescribir objetos en el segmento de destino

  3. Usa cURL para llamar a la API REST de Storage Transfer Service 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"

    Donde:

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

Para comprobar el estado del trabajo de replicación, consulta los registros de Cloud Logging del servicio de transferencia de Storage.

Mostrar tareas de replicación

Consola

Para ver las instrucciones de la consola sobre cómo enumerar las tareas de replicación, consulta Enumerar tareas de replicación con la consola de Google Cloud . 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

APIs REST

API JSON

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

  2. Usa cURL para llamar a la API REST de Storage Transfer Service 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"

Ver una tarea de replicación

Consola

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

Línea de comandos

Usa el comando gcloud alpha transfer jobs describe:

gcloud alpha transfer jobs describe JOB_NAME

Sustituye:

APIs REST

API JSON

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

  2. Usa cURL para llamar a la API REST de Storage Transfer Service 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"

    Sustituye:

Actualizar una tarea de replicación

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

  • Descripción del trabajo de replicación

  • La configuración para ejecutar una tarea de replicación

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

  • Comportamiento de registro de las operaciones de tareas de replicación

  • El estado del trabajo de replicación (si está habilitado, inhabilitado o eliminado)

Consola

Para obtener instrucciones sobre cómo actualizar una tarea de replicación en la consola, consulta Actualizar una tarea de replicación con la consola Google Cloud . 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 quieras actualizar. Para ver una lista de las posibles marcas, consulta la documentación de gcloud alpha transfer jobs update.

Por ejemplo, para actualizar el comportamiento de sobrescritura de objetos del trabajo de replicación, ejecuta el comando gcloud alpha transfer jobs update con la marca --overwrite-when:

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

Sustituye:

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

  • OVERWRITE_OPTION con una opción para sobrescribir los objetos del segmento de destino como resultado de un trabajo de replicación, lo que puede ocurrir cuando el objeto de destino y el de origen tienen el mismo nombre. El valor debe ser uno de los siguientes:

    • always: sobrescribe siempre los objetos de destino.

    • different: solo sobrescribe los objetos del segmento de destino si los datos del objeto de destino son diferentes de los datos del objeto de origen.

    • never: nunca sobrescribir los objetos de destino.

APIs REST

API JSON

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

  2. Crea un archivo JSON que contenga la siguiente estructura, en la que se incluyan los campos del objeto TransferJob que quieras actualizar:

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

    Donde:

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

    • UPDATE_MASK es una lista de nombres de campos separados por comas que quieres actualizar. Los valores pueden ser uno o varios de los siguientes: description, transferSpec, notificationConfig, loggingConfig o status.

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

  3. Usa cURL para llamar a la API REST de Storage Transfer Service 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"

    Sustituye:

Eliminar una tarea de replicación

Consola

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

Línea de comandos

Usa el comando gcloud alpha transfer jobs delete:

gcloud alpha transfer jobs delete JOB_NAME

Sustituye:

  • JOB_NAME con el ID único del trabajo de replicación. Por ejemplo, 1234567890. Para encontrar el ID de tu tarea de replicación, lista tus tareas de replicación.

APIs REST

API JSON

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

  2. Usa cURL para llamar a la API REST de Storage Transfer Service 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"

    Sustituye: