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
gcloud
. Para obtener instrucciones, consultar 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 manejar 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
La estrategia de transferencia depende de la complejidad de tu de la situación actual. Asegúrate de incluir las siguientes consideraciones en tu plan.
Elige un nombre para el bucket
Para trasladar datos a un bucket de almacenamiento con una ubicación diferente, elige una de los siguientes enfoques:
- Nombre del bucket nuevo. Actualiza tus aplicaciones para que apunten a un bucket de almacenamiento con un nombre diferente.
- Mantén el nombre del bucket. Reemplaza tu bucket de almacenamiento para mantener el nombre actual lo que significa que no necesitas actualizar tus aplicaciones.
En ambos casos, debes planificar el tiempo de inactividad y avisar a los usuarios según corresponda. de que se avecina el tiempo de inactividad. Revisa las siguientes explicaciones para comprender cuáles 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 forma de hacerlo depende de cómo se compilen y cuando se implementa un plan.
Para ciertas configuraciones, este enfoque puede tener menos tiempo de inactividad, pero requiere más para garantizar una transición sin problemas. Este proceso consta de los siguientes pasos:
- Copiar tus datos en un bucket de almacenamiento nuevo
- Se está iniciando el tiempo de descanso.
- Actualizar tus aplicaciones para que apunten al bucket nuevo
- Verificar que todo funcione según lo esperado y que todos los sistemas relevantes y las cuentas tienen acceso al bucket.
- Borrar el bucket original
- Finaliza tu tiempo de inactividad.
Mantener el nombre del bucket
Usa este enfoque si prefieres no cambiar tu código para que apunte a un bucket nuevo. de la fuente de datos. Este proceso consta de los siguientes pasos:
- Copiar tus datos a un bucket de almacenamiento temporal.
- Se está iniciando el tiempo de descanso.
- Borrar el bucket original
- Crear un bucket nuevo con el mismo nombre que el bucket original
- Copia los datos en tu bucket nuevo desde el bucket temporal.
- Borrar el bucket temporal
- Verifica que todo funcione según lo esperado y que todos los sistemas y las cuentas relevantes tengan acceso al bucket.
- Finalizando tu tiempo de descanso.
Reducir el tiempo de inactividad
El Servicio de transferencia de almacenamiento no bloquea las lecturas ni las escrituras en el origen o el destino buckets durante una transferencia.
Si decides bloquear manualmente las operaciones de lectura y escritura en tu bucket, puedes minimizar de tiempo de inactividad transfiriendo tus datos en dos pasos: de origen y de 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/escritura en al bucket de origen y realizar otra transferencia. El Servicio de transferencia de almacenamiento transfiere son incrementales de forma predeterminada, por lo que esta segunda transferencia solo transfiere que cambiaron durante la transferencia de origen.
Optimiza la velocidad de transferencia
Cuando estimes cuánto tiempo llevará 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 estará vinculada a 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, si usas prefijos de inclusión y exclusión para transferir ciertos archivos.
Cuando la ubicación, la clase de almacenamiento y la clave de encriptación son iguales El Servicio de transferencia de almacenamiento no crea una copia nueva de los bytes. sino que crea un nueva entrada de metadatos que apunta al BLOB de origen. Como resultado, las copias de la misma ubicación y clase de un corpus grande 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.
Conserva los metadatos
Los siguientes metadatos de objeto se conservan cuando se transfieren datos entre Buckets 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
- Se conserva el número de generación
como un campo de metadatos personalizados con la clave
x-goog-reserved-source-generation
, que puedes editar o quitar más adelante.
Los siguientes campos de metadatos se pueden conservar de forma opcional 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 información.
Los siguientes campos de metadatos no se conservan:
- Hora de la última actualización (
updated
) etag
componentCount
Si se conserva, la hora de creación del objeto se almacena como un campo personalizado.
customTime
La hora updated
del objeto se restablece después de la transferencia, por lo que
también se restablece el tiempo del objeto
que pasa en su clase de almacenamiento. Esto significa que un objeto en
Después de la transferencia, Coldline Storage tiene que existir nuevamente 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
mediante customTime
. Se reemplazan los valores customTime
existentes.
Para obtener más detalles sobre lo que se conserva y lo que no, consulta Conservación de metadatos.
Cómo controlar objetos con control de versiones
Si quieres transferir todas las versiones de tus objetos de almacenamiento y no solo los
más reciente, debes usar la CLI de gcloud
o la API de REST para transferir
tus datos, combinados con la función de manifiesto del Servicio de transferencia de almacenamiento.
Sigue estos pasos para transferir todas las versiones de objetos:
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
Habilitar el control de versiones de objetos activado 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
Algunas de las opciones disponibles cuando configuras tu transferencia son las siguientes: sigue:
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: Tú puede usar prefijos de inclusión y exclusión para limitar los objetos en el que opera el Servicio de transferencia de almacenamientoo. Esta opción se puede usar para dividir una transferencia en múltiples trabajos de transferencia para que puedan ejecutarse en paralelo. Consulta Optimiza la velocidad de transferencia para obtener más información información.
Opciones de transferencia: Puedes configurar tu transferencia para reemplazar los elementos existentes en el bucket de destino, para borrar objetos en el destino que no existen en el conjunto de transferencia o para borrar objetos transferidos del origen.
Transfiere tus datos
Después de definir tu estrategia de transferencia, puedes hacer lo siguiente: realizar la transferencia por su cuenta.
Crea un bucket nuevo
Antes de comenzar la transferencia, crea un bucket de almacenamiento. Consulta consideraciones_sobre_la_ubicación para obtener ayuda con la elección de una ubicación adecuada del bucket.
Es posible que quieras 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.
Cómo copiar objetos al bucket nuevo
Puedes copiar objetos del bucket de origen a uno nuevo con el
La consola de Google Cloud, 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 de uso básico de la transferencia de objetos de un bucket a otro y se debe modificar para adaptarlo a tus necesidades.
No incluyas información sensible, como información de identificación personal (PII) o datos de seguridad en el nombre del trabajo de transferencia. Los nombres de recursos pueden ser se propagan a los nombres de otros recursos de Google Cloud y pueden exponerse a los sistemas internos de Google fuera de tu proyecto.
Consola de Google Cloud
Usa el Servicio de transferencia de almacenamiento de Cloud desde la consola de Google Cloud:
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 Tipo de fuente y Tipo de destino.
Elige una fuente: ingresa directamente el nombre del bucket deseado Haz clic en Explorar para buscar y seleccionar el bucket que deseas.
Elige un destino: ingresa el nombre del bucket deseado de forma directa 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 la consola de Google Cloud.
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 del Servicio de transferencia de almacenamiento las operaciones en la consola de Google Cloud, consulta Solución de problemas
Una vez que se complete la transferencia, no es necesario que hagas nada para borrar el objetos de tu bucket anterior si seleccionaste Borrar objetos de origen después de completar la transferencia durante la configuración. Sin embargo, podrás si también quieres borrar tu bucket anterior que debes hacer por separado.
gcloud CLI
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
gcloud storage buckets add-iam-policy-binding
:
gcloud storage buckets add-iam-policy-binding gs://bucket_name \ --member=serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com \ --role=roles/storage.admin
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 nuevo trabajo de transferencia, usa el comando gcloud transfer jobs create
.
La creación de un trabajo nuevo inicia la transferencia especificada, a menos que un programa o
Se especifica --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 deseas reemplazar los archivos de destino. (
--overwrite-when=different
oalways
) y si deben borrarse archivos durante o después de la transferencia (--delete-from=destination-if-unique
osource-after-transfer
); especificar qué [valores de metadatos que se conservarán]metadatos; y De manera opcional, establece una clase de almacenamiento en 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 depósito 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 correctamente mediante la verificación de los metadatos en 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 que verifica copias. Si habilitaste Registro consulta los registros para verificar si todos los objetos se copiaron con éxito, incluidas sus campos de metadatos correspondientes.
Comienza a usar el bucket de destino
Una vez completada y verificada la migración, actualiza las aplicaciones existentes o cargas de trabajo para que usen el nombre del bucket de destino. Consulta los registros de acceso a los datos en los registros de auditoría de Cloud para asegurarte de que tus operaciones modifiquen y lean objetos de forma correcta.
Borra el bucket original
Cuando todo funciona bien, borrar 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
trabajo de transferencia programado y
deleteObjectsUniqueInSink = true
de 12 a 1 con la nueva opción de compresión.
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 comenzar a borrarlos. Como las eliminaciones son una operación solo de metadatos, la transferencia trabajo solo está vinculado a QPS. Para acelerar el proceso, divide la transferencia en varias trabajos, cada uno actuando según un conjunto distinto de prefijos.
Como alternativa, Google Cloud ofrece un programador de trabajos cron administrado. Para obtener más información, consulta Programa un trabajo de transferencia de STS de Google Cloud con Cloud Scheduler.