El Servicio de transferencia de almacenamiento se puede usar para transferir grandes cantidades de datos entre buckets de Cloud Storage, dentro del mismo proyecto de Google Cloud o entre diferentes proyectos.
Las migraciones de buckets son útiles en varias situaciones. Se pueden usar para consolidar datos de proyectos separados, mover datos a una ubicación de copia de seguridad o cambiar la ubicación de tus datos.
Cuándo usar el Servicio de transferencia de almacenamiento
Google Cloud ofrece varias opciones para transferir datos entre depósitos de Cloud Storage. Recomendamos los siguientes lineamientos:
Transferencia de menos de 1 TB: usa
gsutil
ogcloud
Para obtener instrucciones, consulta Mueve y cambia el nombre de los buckets.Transferencia de más de 1 TB: usa el Servicio de transferencia de almacenamiento. El Servicio de transferencia de almacenamiento es una opción de transferencia administrada que proporciona seguridad, confiabilidad y rendimiento listos para usar. Elimina la necesidad de optimizar y mantener secuencias de comandos y controlar los reintentos.
En esta guía, se analizan las prácticas recomendadas para transferir datos entre buckets de Cloud Storage mediante el Servicio de transferencia de almacenamiento.
Define una estrategia de transferencia
El aspecto de tu estrategia de transferencia depende de la complejidad de tu situación. Asegúrate de incluir las siguientes consideraciones en tu plan.
Elige un nombre de bucket
Para mover los datos a un bucket de almacenamiento con una ubicación diferente, elige uno de los siguientes enfoques:
- Nombre del bucket nuevo. Actualiza tus aplicaciones para que apunten a un bucket de almacenamiento con un nombre diferente.
- Conserve el nombre del bucket. Reemplaza tu bucket de almacenamiento para mantener el nombre actual, por lo que no necesitas actualizar tus aplicaciones.
En ambos casos, debes planificar el tiempo de inactividad y avisarles a los usuarios con suficiente antelación que se producirá un tiempo de inactividad. Revisa las siguientes explicaciones para comprender cuál es la mejor opción para ti.
Nombre del bucket nuevo
Con un nombre de bucket nuevo, debes actualizar todo el código y los servicios que usan tu bucket actual. La manera en la que haces esto depende de cómo se compilan y se implementan las aplicaciones.
Para ciertas configuraciones, este enfoque puede tener menos tiempo de inactividad, pero requiere más trabajo a fin de garantizar una transición fluida. Esto implica los siguientes pasos:
- Copiando tus datos a un nuevo bucket de almacenamiento
- Iniciando tu tiempo de inactividad
- Actualiza tus aplicaciones para que apunten al bucket nuevo.
- Verificar que todo funcione como se espera y que todos los sistemas y cuentas relevantes tengan acceso al bucket
- Borrando el bucket original.
- Finalizando tu tiempo de inactividad.
Conservar el nombre del bucket
Usa este enfoque si prefieres no cambiar tu código para que apunte a un nombre de bucket nuevo. Esto implica los siguientes pasos:
- Copia tus datos a un bucket de almacenamiento temporal
- Iniciando tu tiempo de inactividad
- Borrando tu bucket original.
- Crear un bucket nuevo con el mismo nombre que tu bucket original.
- Copia los datos en tu bucket nuevo desde el bucket temporal.
- Borra el bucket temporal.
- Verificar que todo funcione como se espera y que todos los sistemas y cuentas relevantes tengan acceso al bucket
- Finalizando tu tiempo de inactividad.
Reducir el tiempo de inactividad
El Servicio de transferencia de almacenamiento no bloquea las operaciones de lectura ni escritura en los depósitos de origen o destino durante una transferencia.
Si eliges bloquear de forma manual las operaciones de lectura y escritura en tu bucket, puedes minimizar el tiempo de inactividad mediante la transferencia de tus datos en dos pasos: de inicialización y sincronización.
Transferencia de origen: Realiza una transferencia masiva sin bloquear la lectura o escritura en la fuente.
Transferencia de sincronización: Después de que se complete la primera ejecución, bloquea la lectura y escritura en el bucket de origen y realiza otra transferencia. Las transferencias del Servicio de transferencia de almacenamiento son incrementales de forma predeterminada, por lo que esta segunda transferencia solo transfiere datos que cambiaron durante la transferencia inicial.
Optimiza la velocidad de transferencia
Cuando estimas el tiempo que toma un trabajo de transferencia, considera los posibles cuellos de botella. Por ejemplo, si la fuente tiene miles de millones de archivos pequeños, la velocidad de transferencia se vinculará a las QPS. Si los tamaños de objetos son grandes, el ancho de banda puede ser el cuello de botella.
Los límites de ancho de banda se establecen a nivel de la región y se asignan de manera equitativa entre todos los proyectos. Si hay suficiente ancho de banda disponible, el Servicio de transferencia de almacenamiento puede completar alrededor de 1,000 tareas por trabajo de transferencia por segundo. En este caso, puedes acelerar una transferencia si divides tu trabajo en varios trabajos de transferencia pequeños, por ejemplo, mediante incluir y excluir prefijos para transferir ciertos archivos.
En los casos en que la ubicación, la clase de almacenamiento y la clave de encriptación sean las mismas, el Servicio de transferencia de almacenamiento no creará una copia nueva de los bytes; en su lugar, creará una nueva entrada de metadatos que apunte al BLOB de origen. Como resultado, las mismas copias de ubicación y clase de un gran corpus se completan muy rápido y solo están vinculadas a QPS.
Las eliminaciones también son operaciones de solo metadatos. Para estas transferencias, paralelizar la transferencia dividiéndola en varios trabajos pequeños puede aumentar la velocidad.
Conservar los metadatos
Los siguientes metadatos de objeto se conservan cuando se transfieren datos entre depósitos de Cloud Storage con el Servicio de transferencia de almacenamiento:
- Metadatos personalizados creados por el usuario.
- Campos de metadatos de clave fija de Cloud Storage, como Cache-Control, Content-Disposition, Content-Type y Custom-Time.
- Tamaño del objeto
- El número de generación se conserva como un campo de metadatos personalizados con la clave
x-goog-reserved-source-generation
, que puedes editar más tarde o quitar.
De manera opcional, los siguientes campos de metadatos se pueden conservar cuando se transfiere con la API:
- LCA (
acl
) - Clase de almacenamiento (
storageClass
) - CMEK (
kmsKey
) - Conservación temporal (
temporaryHold
) - Hora de creación del objeto (
customTime
)
Consulta la referencia de la API de TransferSpec
para obtener más detalles.
Los siguientes campos de metadatos no se conservan:
- Hora de última actualización (
updated
) etag
componentCount
Si se conserva, la hora de creación del objeto se almacena como un campo personalizado, customTime
. El tiempo de updated
del objeto se restablece en el momento de la transferencia, por lo que el tiempo dedicado al objeto en su clase de almacenamiento también se restablece. Esto significa que un objeto en Coldline Storage, después de la transferencia, debe volver a existir durante 90 días en el destino para evitar cargos por eliminación temprana.
Puedes aplicar tus políticas de ciclo de vida basadas en createTime
con customTime
. Se reemplazan los valores customTime
existentes.
Para obtener más información sobre qué se conserva y qué no, consulta Conservación de metadatos.
Administra objetos con versiones
Si deseas transferir todas las versiones de tus objetos de almacenamiento y no solo la más reciente, debes usar la CLI de gcloud
o la API de REST para transferir tus datos, combinadas con la función de manifiesto del Servicio de transferencia de almacenamiento.
Para transferir todas las versiones de objetos, haz lo siguiente:
Enumera los objetos de bucket y cópialos en un archivo JSON:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json
Por lo general, este comando enumera alrededor de 1,000 objetos por segundo.
Divide el archivo JSON en dos archivos CSV, uno con versiones no actuales y otro con las versiones publicadas:
jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted") | not)) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > live-object-manifest.csv jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted"))) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > non-current-object-manifest.csv
Habilita el control de versiones de objetos en el bucket de destino.
Para transferir las versiones no actuales primero pasa el archivo de manifiesto
non-current-object-manifest.csv
como el valor del campotransferManifest
.Luego, transfiere las versiones publicadas de la misma manera y especifica
live-object-manifest.csv
como el archivo de manifiesto.
Configurar opciones de transferencia
Estas son algunas de las opciones disponibles cuando configuras tu transferencia:
Registro: Cloud Logging proporciona registros detallados de objetos individuales, lo que te permite verificar el estado de las transferencias y realizar verificaciones adicionales de integridad de los datos.
Filtros: Puedes usar prefijos de inclusión y exclusión para limitar en qué objetos opera el Servicio de transferencia de almacenamiento. Esta opción se puede usar para dividir una transferencia en varios trabajos de transferencia a fin de que puedan ejecutarse en paralelo. Consulta Cómo optimizar la velocidad de transferencia para obtener más información.
Opciones de transferencia (Transfer options): Puedes configurar tu transferencia para reemplazar los elementos existentes en el bucket de destino, borrar los objetos en el destino que no existen en el conjunto de transferencia o borrar los objetos transferidos de la fuente.
Transfiere tus datos
Después de definir la estrategia de transferencia, puedes realizar la transferencia en sí misma.
Crea un bucket nuevo
Antes de comenzar la transferencia, crea un bucket de almacenamiento. Consulta location_considerations para obtener ayuda con la elección de una ubicación de bucket adecuada.
Es posible que desees copiar algunos de los metadatos del bucket cuando crees el bucket nuevo. Consulta Obtén metadatos del bucket para obtener información sobre cómo mostrar los metadatos del bucket de origen, de modo que puedas aplicar la misma configuración a tu bucket nuevo.
Copiar objetos en el bucket nuevo
Puedes copiar objetos del bucket de origen a uno nuevo mediante Google Cloud Console, la CLI de gcloud
, la API de REST o las bibliotecas cliente.
El enfoque que elijas dependerá de tu estrategia de transferencia.
Las siguientes instrucciones son para el caso práctico básico de transferir objetos de un bucket a otro y deben modificarse según tus necesidades.
Consola de Google Cloud
Usa el Servicio de transferencia de almacenamiento de Cloud desde Google Cloud Console:
Abre la página Transferencia en la consola de Google Cloud.
- Haz clic en Crear trabajo de transferencia.
Sigue la explicación detallada y haz clic en Siguiente a medida que completas cada uno de los siguientes pasos:
Primeros pasos: Usa Google Cloud Storage como el Tipo de origen y el Tipo de destino.
Elige una fuente: ingresa el nombre del bucket deseado directamente o haz clic en Navegar para buscar y seleccionar el bucket que deseas.
Elige un destino: ingresa el nombre del bucket deseado directamente o haz clic en Examinar para buscar y seleccionar el bucket que deseas.
Selecciona la configuración: Selecciona la opción Borrar archivos desde la fuente después de la transferencia.
Opciones de programación: Puedes ignorar esta sección.
Después de completar la explicación paso a paso, haz clic en Crear.
Así, comienza el proceso de copia de objetos desde tu bucket anterior al nuevo. Este proceso puede tomar un tiempo; sin embargo, después de hacer clic en Crear, puedes salir de Google Cloud Console.
Para ver el progreso de la transferencia, haz lo siguiente:
Abre la página Transferencia en la consola de Google Cloud.
Abrir la página de Transferencias
Para obtener información detallada sobre los errores de las operaciones fallidas del Servicio de transferencia de almacenamiento en Google Cloud Console, consulta Solución de problemas.
Una vez que se completa la transferencia, no necesitas hacer nada para borrar los objetos de tu bucket anterior si seleccionaste la casilla de verificación Borrar objetos de origen después de que se completa la transferencia durante la configuración. Sin embargo, te recomendamos borrar tu bucket anterior, lo que debes hacer por separado.
CLI de gcloud
Instala la CLI de gcloud
Si aún no lo has hecho, instala la herramienta de línea de comandos de gcloud.
Luego, llama a gcloud init
para inicializar la herramienta y especificar el ID del proyecto y la cuenta de usuario. Consulta Inicializa el SDK de Cloud para obtener más detalles.
gcloud init
Agrega la cuenta de servicio a tu carpeta de destino
Debes agregar la cuenta de servicio del Servicio de transferencia de almacenamiento a tu bucket de destino antes de crear una transferencia. Para hacerlo, usa gsutil iam ch
:
gsutil iam ch serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com:roles/storage.admin gs://bucket_name
Para obtener instrucciones sobre cómo usar la consola de Google Cloud o la API, consulta Usa los permisos de IAM en la documentación de Cloud Storage.
Crea el trabajo de transferencia
Para crear un trabajo de transferencia nuevo, usa el comando gcloud transfer jobs create
.
Crear un trabajo nuevo inicia la transferencia especificada, a menos que se especifique un programa o --do-not-run
.
gcloud transfer jobs create SOURCE DESTINATION
Aquí:
SOURCE es la fuente de datos para esta transferencia, en el formato
gs://BUCKET_NAME
.DESTINATION es tu bucket nuevo, con el formato
gs://BUCKET_NAME
.
Las opciones adicionales incluyen:
Información del trabajo: puedes especificar
--name
y--description
.Programa: Especifica
--schedule-starts
,--schedule-repeats-every
, y--schedule-repeats-until
o--do-not-run
.Condiciones de objetos: Usa condiciones para determinar qué objetos se transfieren. Estos incluyen
--include-prefixes
y--exclude-prefixes
, y las condiciones basadas en el tiempo en--include-modified-[before | after]-[absolute | relative]
.Opciones de transferencia: Especifica si se deben reemplazar los archivos de destino (
--overwrite-when=different
oalways
) y si se deben borrar ciertos archivos durante o después de la transferencia (--delete-from=destination-if-unique
osource-after-transfer
); especifica qué [valores de metadatos conservar]metadatos y, de forma opcional, establece una clase de almacenamiento en los objetos transferidos (--custom-storage-class
).Notificaciones: Configura las notificaciones de Pub/Sub para transferencias con
--notification-pubsub-topic
,--notification-event-types
y--notification-payload-format
.
Para ver todas las opciones, ejecuta gcloud transfer jobs create --help
.
Por ejemplo, para transferir todos los objetos con el prefijo folder1
, haz lo siguiente:
gcloud transfer jobs create gs://old-bucket gs://new-bucket \
--include-prefixes="folder1/"
REST
En este ejemplo, aprenderás cómo mover archivos desde un bucket de Cloud Storage a otro. Por ejemplo, puedes replicar datos en un bucket en otra ubicación.
Realiza la solicitud con transferJobs create:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2025 }, "startTimeOfDay": { "hours": 1, "minutes": 1 }, "scheduleEndDate": { "day": 1, "month": 1, "year": 2025 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
Respuesta:
200 OK { "transferJob": [ { "creationTime": "2015-01-01T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2015-01-01T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME" }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000.000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } } ] }
Bibliotecas cliente
En este ejemplo, aprenderás cómo mover archivos desde un bucket de Cloud Storage a otro. Por ejemplo, puedes replicar datos en un bucket en otra ubicación.
Para obtener más información sobre las bibliotecas cliente del Servicio de transferencia de almacenamiento, consulta Comienza a usar las bibliotecas cliente del Servicio de transferencia de almacenamiento.
Java
¿Buscas muestras anteriores? Consulta la Guía de migración del Servicio de transferencia de almacenamiento.
Python
¿Buscas muestras anteriores? Consulta la Guía de migración del Servicio de transferencia de almacenamiento.
Verifica los objetos copiados
Una vez que se complete la transferencia, recomendamos realizar verificaciones adicionales de integridad de los datos.
Verifica que los objetos se hayan copiado de forma correcta mediante la verificación de los metadatos de los objetos, como las sumas de verificación y el tamaño.
Verifica que se haya copiado la versión correcta de los objetos. El Servicio de transferencia de almacenamiento ofrece una opción lista para usar a fin de verificar que los objetos sean copias. Si habilitaste el registro, consulta los registros para verificar si todos los objetos se copiaron de forma correcta, incluidos los campos de metadatos correspondientes.
Comienza a usar el bucket de destino
Una vez que se complete y verifique la migración, actualiza las aplicaciones o cargas de trabajo existentes para que usen el nombre del bucket de destino. Verifica los registros de acceso a los datos en los registros de auditoría de Cloud para asegurarte de que las operaciones modifiquen y lean correctamente los objetos.
Borra el bucket original
Una vez que todo funcione bien, borra el bucket original.
El Servicio de transferencia de almacenamiento ofrece la opción de borrar objetos después de transferirlos mediante la especificación de deleteObjectsFromSourceAfterTransfer: true
en la configuración del trabajo o la selección de la opción en la consola de Google Cloud.
Programa la eliminación de objetos
Para programar la eliminación de tus objetos en una fecha posterior, usa una combinación de un trabajo de transferencia programado y la opción deleteObjectsUniqueInSink = true
.
El trabajo de transferencia debe configurarse para transferir un bucket vacío al bucket que contiene tus objetos. Esto hace que el Servicio de transferencia de almacenamiento enumere los objetos y comience a borrarlos. Como las eliminaciones son una operación de solo metadatos, el trabajo de transferencia solo está vinculado a las QPS. Para acelerar el proceso, divide la transferencia en varios trabajos y cada uno actúe en un conjunto distinto de prefijos.
Como alternativa, Google Cloud ofrece un programador de trabajos cron administrado. Para obtener más información, consulta Programa el trabajo de transferencia de Google Cloud STS con Cloud Scheduler.