Cómo reubicar buckets

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

Antes de comenzar

Antes de reubicar buckets, completa los siguientes pasos:

  1. Configura Storage Intelligence.

  2. Habilita la opción de borrar de forma no definitiva.

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

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

  5. Quita las etiquetas de bucket existentes.

  6. Si usas informes de inventario, guarda tus configuraciones.

  7. Obtén los roles necesarios, que se describen en la siguiente sección.

Obtén las funciones necesarias

Para obtener los permisos que necesitas para reubicar buckets, pídele a tu administrador que te otorgue el rol de IAM Administrador de almacenamiento (roles/storage.admin) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para reubicar buckets. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para cambiar la ubicación de los buckets:

  • Para reubicar un bucket, haz lo siguiente: storage.buckets.relocate
  • Para ver el estado de una operación de reubicación de bucket, haz lo siguiente: storage.bucketOperations.get
  • Para ver la lista de operaciones de reubicación de bucket de un proyecto, haz lo siguiente: storage.bucketOperations.list
  • Para cancelar una operación de reubicación de un bucket, haz lo siguiente: storage.bucketOperations.cancel
  • Para ver los metadatos de un bucket durante las fases de ejecución de prueba y copia de datos incremental de la reubicación del bucket, haz lo siguiente: storage.buckets.get
  • Para obtener un objeto en un bucket que deseas reubicar, haz lo siguiente: storage.objects.get
  • Para enumerar los objetos en un bucket que deseas reubicar, haz lo siguiente: storage.objects.list

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Reubicar buckets

En esta sección, se describe el proceso para cambiar la ubicación de los buckets de Cloud Storage. Cuando reubicas un bucket, inicias el proceso de copia de datos incremental, lo supervisas y, luego, inicias el paso de sincronización final. Para obtener más información sobre estos pasos, consulta Información sobre el proceso de reubicación bucket 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 de validación. Una prueba de validación simula el proceso de reubicación del bucket sin mover datos, lo que te ayuda a detectar y resolver problemas de forma anticipada. La ejecución de prueba verifica las siguientes incompatibilidades:

Si bien una prueba no puede identificar todos los problemas posibles, 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 consumen mucho tiempo durante la reubicación real.

Línea de comandos

Simula la prueba de validación de la reubicación del bucket:

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.

Después de iniciar una ejecución de prueba, se inicia una operación de larga duración. Recibirás un ID de operación y una descripción de la operación. Haz un seguimiento del progreso y la finalización de la ejecución de prueba obteniendo los detalles de la operación de larga duración.

Si la prueba de validación revela algún problema, soluciónalo antes de continuar con el paso para iniciar la 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.

    Después de iniciar una ejecución de prueba, se inicia una operación de larga duración. La simulación se realiza correctamente cuando se cumplen las siguientes condiciones:

    • La ejecución de prueba no informa ningún error.
    • El recurso operations devuelve un valor de campo done de true.

      {
      "kind": "storage#operation",
      "name": "projects/_/buckets/bucket/operations/operation_id",
      "metadata": {
        "@type": OperationMetadataType*,
        metadata OperationMetadata*
      },
      "done": "true",
      "response": {
        "@type": ResponseResourceType*,
        response ResponseResource*
      }
      }

    Si la prueba de validación revela algún problema, soluciónalo antes de continuar con el paso para iniciar la copia de datos incremental.

Inicia la copia de datos incrementales

Línea de comandos

Inicia la operación de reubicación del bucket:

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 del bucket es una operación de larga duración que se debe supervisar para ver cómo avanza. Puedes consultar periódicamente la lista de operaciones de larga duración para ver el estado del paso de copia de datos incremental. Para obtener información sobre cómo obtener detalles de una operación de larga duración, enumerar o cancelar operaciones de larga duración, consulta Usa operaciones de larga duración en Cloud Storage.

En el siguiente ejemplo, se muestra el resultado que genera 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
  estimatedWriteDowntimeDuration: '7200s'
  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 la finalización de 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 reubicación de bucket.
metadata.commonMetadata Son los metadatos comunes a todas las operaciones.
metadata.commonMetadata.createTime Es la fecha y hora en que se creó la operación de larga duración.
metadata.commonMetadata.endTime Es la hora en 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 aplicable.
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 fecha y hora en la que se actualizó la operación de larga duración por última vez.
metadata.destinationLocation Es la ubicación de destino del bucket.
metadata.finalizationState Indica la disponibilidad para iniciar el paso de sincronización final.
  • READY: Indica que puedes iniciar el paso de sincronización final. 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 se pausó temporalmente debido a errores. Deberás resolver los errores para continuar con el paso.
  • RUNNING: Indica que el paso de finalización está en curso.
  • FINALIZED: Indica que el paso de finalización se completó correctamente.
metadata.progress Son los detalles del progreso de la operación de reubicación.
metadata.progress.byteProgressPercent Progreso de los bytes copiados en porcentaje. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no aplicable.
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 Es la cantidad de actualizaciones de metadatos de objetos descubiertas en el bucket de origen.
metadata.progress.objectProgressPercent Es el progreso de los objetos copiados en porcentaje. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no aplicable.
metadata.progress.remainingBytes Es la cantidad de bytes que aún se deben copiar del bucket de origen al bucket de destino.
metadata.progress.remainingObjectCount Cantidad de objetos que aún se deben 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 Es el progreso de las actualizaciones de metadatos de objetos que se sincronizarán, expresado en porcentaje. Entre 0 y 100%. Un valor de -1 significa que el progreso es desconocido o no aplicable.
metadata.relocationState Es el estado general de la operación de 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 incremental 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 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.estimatedWriteDowntimeDuration Es la duración estimada del tiempo de inactividad de escritura. Se propaga una vez que finalizationState es READY. El valor mínimo es 7200s.
metadata.writeDowntimeExpireTime Fecha y hora en que vence el tiempo de inactividad por escritura.
name Es el identificador único de esta operación de reubicación.
Formato: projects/_/buckets/bucket-name/operations/operation-id
response Es la respuesta de la operación.
response.@type Es el tipo de respuesta.
selfLink Es un vínculo a esta operación.

Si tienes problemas cuando interactúas con otras funciones de Cloud Storage, 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 en tus aplicaciones.

Antes de continuar, verifica que el bucket esté completamente preparado. Para ello, revisa el valor de finalizationState en el resultado del paso de copia de datos incremental. El valor de finalizationState debe ser READY para continuar.

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

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 del 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) para la fase de inactividad de escritura durante un proceso de reubicación. Se expresa como una cadena, por ejemplo, 12h para 12 horas. El parámetro TTL_DURATION determina la duración máxima permitida para la fase de inactividad de escritura. Si el tiempo de inactividad de escritura supera este límite, el proceso de reubicación volverá automáticamente al paso de copia incremental y se volverán 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 del bucket. 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 fecha y hora en que vence el tiempo de inactividad de escritura.
    • TTL_DURATION es el tiempo de actividad (TTL) para la fase de inactividad de escritura durante un proceso de reubicación. Se expresa como una cadena, por ejemplo, 12h para 12 horas. El parámetro TTL_DURATION determina la duración máxima permitida para la fase de inactividad de escritura. Si el tiempo de inactividad de escritura supera este límite, el proceso de reubicación volverá automáticamente al paso de copia incremental y se volverán 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 la transferencia correcta de datos.

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 que se completó correctamente 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.

  • Analiza 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 entorno de Google Cloud . Puedes analizar las entradas de los Registros de auditoría de Cloud asociadas con la reubicación para validar su éxito. Analiza los registros para detectar errores, advertencias o comportamientos inesperados que puedan indicar problemas durante la transferencia. Para obtener información sobre cómo ver los registros de Registros de auditoría de Cloud, consulta Visualiza los registros de auditoría.

    Las siguientes entradas de registro te ayudan a determinar si la migración se realizó correctamente o no:

    • Reubicación exitosa: 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 el evento específico de éxito o falla aparezca en los registros. Para obtener información sobre cómo configurar las notificaciones de Pub/Sub, consulta Configura las notificaciones de Pub/Sub para Cloud Storage.

Completa las tareas posteriores a la reubicación del bucket

Después de que hayas reubicado correctamente tu bucket, completa los siguientes pasos:

  1. Opcional: Restaura los controles de acceso basados en etiquetas en tu bucket.
  2. Las configuraciones existentes de los informes de inventario no se conservan durante el proceso de reubicación, por lo que 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, por lo que deberás modificar el código de tu aplicación para reflejar el nuevo extremo.

Cómo controlar las operaciones de reubicación de bucket fallidas

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

  • Si falla la reubicación de un bucket, 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 del bucket al mismo destino. Puedes iniciar la reubicación de un bucket a otro destino de inmediato.

  • Si la ubicación de destino no es la óptima para tus datos, es posible que desees revertir 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 antes de que puedas volver a iniciar el proceso de reubicación. Esta restricción se aplica para garantizar la estabilidad y evitar conflictos de datos.

¿Qué sigue?