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
ytimeUpdated
). 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 APIgoogleServiceAccounts.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/Subpubsub.subscriptions.consume
en el tema de Pub/Subpubsub.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.
Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado
Authorization
.Crea un archivo JSON que contenga un
TransferJob
objeto con unReplicationSpec
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 latransferJobs
documentació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 destinoDIFFERENT
: solo sobrescribir objetos en el segmento de destino si los datos del objeto de destino son diferentes de los datos del objeto de origenNEVER
: nunca sobrescribir objetos en el segmento de destino
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
Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado
Authorization
.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:
JOB_NAME
con el ID único del trabajo de replicación. Por ejemplo,1234567890
. Para encontrar el ID de tu tarea de transferencia, consulta la lista de tus tareas de replicación.
APIs REST
API JSON
Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado
Authorization
.Usa
cURL
para llamar a la API REST de Storage Transfer Service con una solicitudtransferJobs.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:
JOB_NAME
con el ID único del trabajo de replicación. Por ejemplo,1234567890
. Para encontrar el ID de tu trabajo de replicación, consulta la lista de tus trabajos de replicación.
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
Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado
Authorization
.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 recursoTransferJob
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
ostatus
.
Para obtener más información sobre los nombres de campo que puedes incluir, consulta el
transferJobs.patch
cuerpo de la solicitud.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:
JOB_NAME
con el ID único del trabajo de replicación. Por ejemplo,1234567890
. Para encontrar el ID de tu trabajo de replicación, consulta la lista de tus trabajos de replicación.
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
Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado
Authorization
.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:
JOB_NAME
con el ID único del trabajo de replicación. Por ejemplo,1234567890
. Para encontrar el ID de tu trabajo de replicación, consulta la lista de tus trabajos de replicación.