Cómo reubicar buckets

En esta página, se describe el proceso para reubicar los buckets de una ubicación a otra. Para obtener información sobre la reubicación de buckets, consulta Reubicación de buckets.

Antes de comenzar

Antes de iniciar el proceso de reubicación del bucket, completa los siguientes pasos:

  1. Habilita Management Hub.

  2. Habilita la eliminación no definitiva.

  3. Revisa las cuotas y los límites para asegurarte de que la ubicación nueva tenga cuotas suficientes para admitir los datos del bucket.

  4. Determina el tipo de reubicación de bucket para comprender si se requiere un tiempo de inactividad de escritura.

  5. Quita las etiquetas de bucket existentes.

  6. Si usas informes de inventario, guarda tus parámetros de configuración.

Roles obligatorios

Para obtener los permisos necesarios para trasladar buckets de una ubicación a otra, pídele a tu administrador que te otorgue el rol de Administrador de almacenamiento (roles/storage.admin) para el proyecto.

Este rol proporciona un conjunto de permisos que te permiten reubicar los buckets de una ubicación a otra. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:

Permisos necesarios

El usuario autenticado debe tener los siguientes permisos de IAM en el bucket para usar este método:

  • storage.buckets.relocate
  • storage.bucketOperations.get
    Necesitas este permiso para ver el estado de la operación de reubicación del bucket.
  • storage.bucketOperations.list
    Necesitas este permiso para ver la lista de operaciones de reubicación de buckets.
  • storage.bucketOperations.cancel
    Necesitas este permiso para cancelar la operación de reubicación del bucket.

Es posible que el usuario autenticado también necesite los siguientes permisos en el bucket para usar este método:

  • storage.bucket.get
    Necesitas este permiso para ver los metadatos de un bucket durante la prueba sin conexión y la copia de datos incremental de la operación de reubicación del bucket.
  • storage.objects.list y storage.objects.get
    Necesitas estos permisos para ver la lista de objetos de un bucket que deseas trasladar a otra ubicación.

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos. Para ver qué roles están asociados con qué permisos, consulta Roles de IAM para Cloud Storage.

Si deseas obtener instrucciones para otorgar roles a proyectos, consulta Administra el acceso a los proyectos.

Cómo reubicar buckets

En esta sección, se describe el proceso de reubicación de buckets de Cloud Storage de una ubicación a otra con la reubicación de buckets. Cuando trasladas un bucket, se inicia el proceso de copia de datos incremental, se supervisa y, luego, se inicia el paso de sincronización final. Para obtener más información sobre estos pasos, consulta Información sobre el proceso de reubicación de buckets.

Realiza una ejecución de prueba

Para minimizar los posibles problemas durante el proceso de reubicación del bucket, te recomendamos que realices una prueba sin conexión. Una prueba simula el proceso de reubicación del bucket sin mover los datos, lo que te ayuda a detectar y resolver problemas desde el principio. La ejecución de prueba verifica las siguientes incompatibilidades:

Si bien una prueba no puede identificar todos los posibles problemas, ya que algunos solo pueden surgir durante la migración en vivo debido a factores como la disponibilidad de recursos en tiempo real, reduce el riesgo de enfrentar problemas que requieren mucho tiempo durante la reubicación real.

Línea de comandos

Simula la ejecución de prueba de la reubicación de buckets:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION --dry-run

Aquí:

  • BUCKET_NAME es el nombre del bucket que deseas reubicar.

  • LOCATION es la ubicación de destino del bucket.

Iniciar una ejecución de prueba inicia una operación de larga duración. Recibirás un ID de operación y una descripción de la operación. Para hacer un seguimiento de la finalización de la prueba, deberás hacer un seguimiento de su progreso. Para obtener información sobre cómo hacer un seguimiento del progreso de la ejecución de prueba, consulta Obtén detalles de una operación de larga duración.

Si la prueba de validación revela algún problema, solucionándolo antes de continuar con el paso Iniciar el paso de copia de datos incremental.

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 configuración del bucket, que debe incluir los parámetros destinationLocation y validateOnly. Consulta la documentación de Buckets: relocate para obtener una lista completa de opciones de configuración. A continuación, se indican las opciones de configuración comunes que puedes incluir:

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "true"
    }

    Aquí:

    • DESTINATION_LOCATION es la ubicación de destino del bucket.
    • LOCATIONS es una lista de códigos de ubicación que se usarán para la región doble configurable.
    • validateOnly se establece en true para realizar una ejecución de prueba.
  3. Usa cURL para llamar a la API de JSON:

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

    Aquí:

    • JSON_FILE_NAME es el nombre del archivo JSON que creaste.
    • BUCKET_NAME es el nombre del bucket que deseas reubicar.

Cómo iniciar la copia de datos incremental

Línea de comandos

Inicia la operación de reubicación de buckets:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION

Aquí:

  • BUCKET_NAME es el nombre del bucket que deseas reubicar.

  • LOCATION es la ubicación de destino del bucket.

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 configuración del bucket. Consulta la documentación de Buckets: relocate para obtener una lista completa de opciones de configuración. A continuación, se indican las opciones de configuración comunes que puedes incluir:

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "false"
    }

    Aquí:

    • DESTINATION_LOCATION es la ubicación de destino del bucket.
    • LOCATIONS es una lista de códigos de ubicación que se usarán para la región doble configurable.
    • validateOnly se establece en false para iniciar el paso de copia de datos incremental de la reubicación del bucket.
  3. Usa cURL para llamar a la API de JSON:

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

    Aquí:

    • JSON_FILE_NAME es el nombre del archivo JSON que creaste.
    • BUCKET_NAME es el nombre del bucket que deseas reubicar.

Supervisa la copia de datos incremental

El proceso de reubicación de buckets es una operación de larga duración que se debe supervisar para ver su progreso. Puedes verificar la lista de operaciones de larga duración con regularidad para ver el estado del paso de copia de datos incremental. Para obtener información sobre cómo obtener los detalles de una operación de larga duración, enumerarla o cancelarla, consulta Cómo usar operaciones de larga duración en Cloud Storage.

En el siguiente ejemplo, se muestra el resultado generado por una operación de copia de datos incremental:

done: false
kind: storage#operation
metadata:
'@type': type.googleapis.com/google.storage.control.v2.RelocateBucketMetadata
commonMetadata:
  createTime: '2024-10-21T04:26:59.666Z
  endTime: '2024-12-29T23:39:53.340Z'
  progressPercent: 99
  requestedCancellation: false
  type: relocate-bucket
  updateTime: '2024-10-21T04:27:03.2892'
destinationLocation: US-CENTRAL1
finalizationState: 'READY'
progress:
  byteProgressPercent: 100
  discoveredBytes: 200
  remainingBytes: 0
  discoveredObjectCount: 10
  remainingObjectCount: 8
  objectProgressPercent: 100
  discoveredSyncCount: 8
  remainingSyncCount: 0
  syncProgressPercent: 100
relocationState: SYNCING
sourceLocation: US
validateOnly: false
writeDowntimeExpireTime: '2024-12-30T10:34:01.786Z'
name: projects//buckets/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
response:
  '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketResponse
  selfLink: https://storage.googleusercontent.com/storage/v1_ds/b/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w

En la siguiente tabla, se proporciona información sobre los campos clave en el resultado que genera la operación de copia de datos incremental:

Nombre del campo Descripción Valores posibles
done Indica que se completó la operación de reubicación del bucket. true, false
kind Indica que este recurso representa una operación de almacenamiento.
metadata Proporciona información sobre la operación.
metadata.@type Indica el tipo de operación como una reubicación de bucket.
metadata.commonMetadata Metadatos comunes a todas las operaciones.
metadata.commonMetadata.createTime Es la hora en que se creó la operación de larga duración.
metadata.commonMetadata.endTime Es la hora a la que finalizó la operación de larga duración.
metadata.commonMetadata.progressPercent Es el progreso estimado de la operación de larga duración, expresado en porcentaje. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no se aplica.
metadata.commonMetadata.requestedCancellation Indica si el usuario solicitó la cancelación de la operación de larga duración. true, false
metadata.commonMetadata.type Indica el tipo de operación de larga duración.
metadata.commonMetadata.updateTime Es la hora en la que se actualizó por última vez la operación de larga duración.
metadata.destinationLocation Es la ubicación de destino del bucket.
metadata.finalizationState Indica que todo está listo para iniciar el paso de sincronización final.
  • READY: Indica que puedes iniciar el paso final de sincronización. Sin embargo, te recomendamos que esperes hasta que el valor del campo progressPercent alcance 99.
  • WAITING_ON_SYNC: Indica que no puedes iniciar el paso de sincronización final.
  • NOT_REQUIRED: Indica que el paso de sincronización final no es necesario para este bucket y que puedes omitirlo.
  • BLOCKED_ON_ERRORS: Indica que el paso de finalización está detenido temporalmente debido a errores. Deberás resolver los errores para continuar con el paso.
  • RUNNING: Indica que el paso de finalización está en proceso.
  • FINALIZED: Indica que el paso de finalización se completó correctamente.
metadata.progress Detalles del progreso de la operación de reubicación
metadata.progress.byteProgressPercent Es el progreso de los bytes copiados en porcentaje. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no se aplica.
metadata.progress.discoveredBytes Cantidad de bytes descubiertos en el bucket de origen.
metadata.progress.discoveredObjectCount Cantidad de objetos descubiertos en el bucket de origen.
metadata.progress.discoveredSyncCount Cantidad de actualizaciones de metadatos de objetos descubiertas en el bucket de origen.
metadata.progress.objectProgressPercent Porcentaje de objetos copiados. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no se aplica.
metadata.progress.remainingBytes Cantidad de bytes restantes que se deben copiar del bucket de origen al bucket de destino.
metadata.progress.remainingObjectCount Cantidad de objetos que quedan por copiar del bucket de origen al bucket de destino.
metadata.progress.remainingSyncCount Es la cantidad de actualizaciones de metadatos de objetos restantes que se deben sincronizar.
metadata.progress.syncProgressPercent Porcentaje de progreso de las actualizaciones de metadatos de objetos que se sincronizarán. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no se aplica.
metadata.relocationState Estado general de la reubicación del bucket
  • SYNCING: Indica que el paso de copia de datos incremental está copiando objetos de forma activa del bucket de origen al bucket de destino.
  • FINALIZING: Indica que se inició el paso de finalización.
  • FAILED: Indica que el paso de copia de datos incrementales encontró un error y no se completó correctamente.
  • SUCCEEDED: Indica que el paso de copia de datos incremental se completó correctamente.
  • CANCELLED: Indica que se canceló el paso de copia de datos incremental.
metadata.sourceLocation La ubicación de origen del bucket.
metadata.validateOnly Indica si se inició una ejecución de prueba de la reubicación del bucket. true, false
metadata.writeDowntimeExpireTime La hora en la que vence el tiempo de inactividad de escritura.
name Es el identificador único de esta operación de reubicación.
Formato: projects/_/buckets/bucket-name/operations/operation-id
response La respuesta de la operación.
response.@type Es el tipo de respuesta.
selfLink Es un vínculo a esta operación.

Es posible que tengas problemas debido a las limitaciones cuando interactúes con otras funciones de Cloud Storage. Para obtener más información sobre las limitaciones, consulta Limitaciones.

Inicia el paso de sincronización final

El paso de sincronización final implica un período en el que no puedes realizar operaciones de escritura en el bucket. Te recomendamos que programes el paso de sincronización final en un momento que minimice las interrupciones de tus aplicaciones.

Antes de continuar, verifica el valor finalizationState en el resultado del paso supervisa el proceso de copia de datos incrementales para confirmar que el bucket esté completamente preparado. El valor de finalizationState debe ser READY para continuar con el paso de sincronización final.

Si inicias el paso de sincronización final antes de tiempo, el comando muestra un mensaje de error The relocate bucket operation is not ready to advance to finalization running state, pero el proceso de reubicación continúa.

Te recomendamos que esperes hasta que el valor de progressPercent sea 99 antes de iniciar el paso de sincronización final.

Línea de comandos

Inicia el paso de sincronización final de la operación de reubicación de bucket una vez que el valor de finalizationState sea READY:

gcloud storage buckets relocate --finalize --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Aquí:

  • BUCKET_NAME es el nombre del bucket que deseas reubicar.
  • OPERATION_ID es el ID de la operación de larga duración, que se muestra en la respuesta de los métodos a los que llamas. Por ejemplo, se muestra la siguiente respuesta cuando se llama a gcloud storage operations list y el ID de operación de larga duración es AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.
 `name: projects/_/buckets/my-bucket/operations/AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74` 

Establece la marca ttl para tener un mayor control sobre el proceso de reubicación. Por ejemplo:

gcloud storage buckets relocate --finalize --ttl TTL_DURATION --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

Aquí:

TTL_DURATION es el tiempo de actividad (TTL) de la fase de tiempo de inactividad de escritura durante un proceso de reubicación. Se expresa como una cadena, como 12h para 12 horas. TTL_DURATION determina la duración máxima permitida para la fase de tiempo de inactividad de escritura. Si el tiempo de inactividad de escritura supera este límite, el proceso de reubicación vuelve automáticamente al paso de copia incremental y se vuelven a habilitar las operaciones de escritura en el bucket. El valor debe estar dentro del rango de 6h (6 horas) a 48h (48 horas). Si no se especifica, el valor predeterminado es 12h (12 horas).

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 configuración para la reubicación de buckets. Consulta la documentación de Buckets: advanceRelocateBucket para obtener una lista completa de opciones de configuración. A continuación, se indican las opciones de configuración comunes que puedes incluir:

    {
        "expireTime": "EXPIRE_TIME",
        "ttl": "TTL_DURATION"
    }

    Aquí:

    • EXPIRE_TIME es la hora en que vence el tiempo de inactividad de escritura.
    • TTL_DURATION es el tiempo de actividad (TTL) de la fase de tiempo de inactividad de escritura durante un proceso de reubicación. Se expresa como una cadena, como 12h para 12 horas. TTL_DURATION determina la duración máxima permitida para la fase de tiempo de inactividad de escritura. Si el tiempo de inactividad de escritura supera este límite, el proceso de reubicación vuelve automáticamente al paso de copia incremental y se vuelven a habilitar las operaciones de escritura en el bucket. El valor debe estar dentro del rango de 6h (6 horas) a 48h (48 horas). Si no se especifica, el valor predeterminado es 12h (12 horas).
  3. Usa cURL para llamar a la API de JSON:

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/bucket/BUCKET_NAME/operations/OPERATION_ID/advanceRelocateBucket"

    Aquí:

    • JSON_FILE_NAME es el nombre del archivo JSON que creaste.
    • BUCKET_NAME es el nombre del bucket que deseas reubicar.
    • OPERATION_ID es el ID de la operación de larga duración, que se muestra en la respuesta de los métodos a los que llamas. Por ejemplo, se muestra la siguiente respuesta cuando se llama a Operations: list y el ID de operación de larga duración es AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.

Valida el proceso de reubicación del bucket

Después de iniciar una reubicación, verifica que se haya completado correctamente. En esta sección, se proporciona orientación para confirmar que la transferencia de datos se realizó correctamente.

Valida el éxito del proceso de reubicación con los siguientes métodos:

  • Sondea operaciones de larga duración: La reubicación de buckets es una operación de larga duración. Puedes sondear la operación de larga duración con operation id para supervisar su progreso y confirmar su finalización correcta verificando el estado success. Esto implica consultar periódicamente el estado de la operación hasta que alcance un estado final. Para obtener información sobre cómo supervisar operaciones de larga duración, consulta Usa operaciones de larga duración en Cloud Storage.

  • Analizar las entradas de los registros de auditoría de Cloud: Los registros de auditoría de Cloud proporcionan un registro detallado de los eventos y las operaciones en tu Google Cloud entorno. Puedes analizar las entradas de los Registros de auditoría de Cloud asociadas con la reubicación para validar su éxito. Analiza los registros en busca de errores, advertencias o comportamientos inesperados que puedan indicar problemas durante la transferencia. Para obtener información sobre cómo ver los registros de auditoría de Cloud, consulta Cómo ver los registros de auditoría.

    Las siguientes entradas de registro te ayudan a determinar si el traslado fue exitoso o no:

    • Reubicación correcta: Relocate bucket succeeded. All existing objects are now in the new placement configuration.

    • No se pudo realizar la reubicación: Relocate bucket has failed. Bucket location remains unchanged.

    Con las notificaciones de Pub/Sub, también puedes configurar alertas que te notifiquen cuando aparezca el evento específico de éxito o error en los registros. Si deseas obtener información para configurar notificaciones de Pub/Sub, consulta Configura notificaciones de Pub/Sub para Cloud Storage.

Completa las tareas posteriores a la reubicación del bucket

Después de reubicar correctamente tu bucket, completa los siguientes pasos:

  1. Opcional: Restaura los controles de acceso basados en etiquetas en tu bucket.
  2. Las configuraciones existentes del informe de inventario no se conservan durante el proceso de reubicación y deberás volver a crearlas de forma manual. Para obtener información sobre cómo crear una configuración de informes de inventario, consulta Crea una configuración de informes de inventario.
  3. Actualiza tus configuraciones de infraestructura como código, como Terraform y el conector de configuración de Google Kubernetes Engine, para especificar la nueva ubicación del bucket.
  4. Los extremos regionales están vinculados a ubicaciones específicas y deberás modificar el código de tu aplicación para que refleje el nuevo extremo.

Cómo manejar operaciones de reubicación de bucket fallidas

Ten en cuenta los siguientes factores antes de controlar las operaciones de reubicación de bucket que fallaron:

  • Si la reubicación de un bucket falla, es posible que queden recursos obsoletos, como archivos temporales o copias de datos incompletas, en el destino. Debes esperar entre 7 y 14 días antes de iniciar otra reubicación de bucket al mismo destino. Puedes iniciar una reubicación de bucket a un destino diferente de inmediato.

  • Si la ubicación de destino no es la óptima para tus datos, te recomendamos que reviertas la reubicación. Sin embargo, no puedes iniciar una reubicación de inmediato. Se requiere un período de espera de hasta 14 días para que puedas volver a iniciar el proceso de traslado. Esta restricción se implementó para garantizar la estabilidad y evitar conflictos de datos.

¿Qué sigue?