Reubicar segmentos

En esta página se describe el proceso para cambiar la ubicación de los contenedores. Para obtener información sobre el cambio de ubicación de los segmentos, consulta Cambio de ubicación de los segmentos.

Antes de empezar

Antes de poder cambiar la ubicación de los contenedores, debes completar los siguientes pasos:

  1. Configurar Storage Intelligence

  2. Habilita la eliminación lógica.

  3. Consulta las cuotas y los límites para asegurarte de que la nueva ubicación tenga cuotas suficientes para alojar los datos del contenedor.

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

  5. Elimina las etiquetas de contenedor que haya.

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

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

Obtener los roles necesarios

Para obtener los permisos que necesitas para cambiar la ubicación de los segmentos, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de Storage (roles/storage.admin) en el proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene los permisos necesarios para cambiar la ubicación de los contenedores. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para cambiar la ubicación de los contenedores, se necesitan los siguientes permisos:

  • Para cambiar la ubicación de un contenedor, sigue estos pasos: storage.buckets.relocate
  • Para ver el estado de una operación de cambio de ubicación de un segmento, siga estos pasos: storage.bucketOperations.get
  • Para ver la lista de operaciones de cambio de ubicación de segmentos de un proyecto, siga estos pasos: storage.bucketOperations.list
  • Para cancelar una operación de cambio de ubicación de un segmento, sigue estos pasos: storage.bucketOperations.cancel
  • Para ver los metadatos de un segmento durante las fases de prueba y copia de datos incremental de la reubicación del segmento, sigue estos pasos: storage.buckets.get
  • Para obtener un objeto de un contenedor que quieras cambiar de ubicación, haz lo siguiente: storage.objects.get
  • Para mostrar los objetos de un segmento que quieras cambiar de ubicación, haz lo siguiente: storage.objects.list

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

Reubicar segmentos

En esta sección se describe el proceso para cambiar la ubicación de los segmentos de Cloud Storage. Cuando cambias la ubicación de un contenedor, inicias el proceso de copia de datos incremental, lo monitorizas y, a continuación, inicias el paso de sincronización final. Para obtener más información sobre estos pasos, consulta Información sobre el proceso de cambio de ubicación de los contenedores.

Realizar una prueba de funcionamiento

Para minimizar los posibles problemas durante el proceso de cambio de ubicación de los contenedores, te recomendamos que hagas una prueba. Una prueba de funcionamiento simula el proceso de cambio de ubicación del contenedor sin mover datos, lo que te ayuda a detectar y resolver problemas en las primeras fases. La prueba de funcionamiento comprueba las siguientes incompatibilidades:

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

Línea de comandos

Simula la prueba de funcionamiento de la reubicación del contenedor:

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

Donde:

  • BUCKET_NAME es el nombre del contenedor que quieres cambiar de ubicación.

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

Después de iniciar una 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. Para hacer un seguimiento del progreso y la finalización de la prueba, consulta los detalles de la operación de larga duración.

Si la prueba revela algún problema, resuélvelo antes de continuar con el paso para iniciar la copia incremental de datos.

APIs REST

API JSON

  1. Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado Authorization.

  2. Crea un archivo JSON que contenga la configuración del segmento, que debe incluir los parámetros destinationLocation y validateOnly. Consulta la Buckets: relocate documentación para ver la lista completa de ajustes. Estos son los ajustes habituales que puedes incluir:

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

    Donde:

    • DESTINATION_LOCATION es la ubicación de destino del contenedor.
    • LOCATIONS es una lista de códigos de ubicación que se utilizarán para la configuración dual.
    • validateOnly se ha definido como true para realizar una prueba.
  3. Usa cURL para llamar a la API 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"

    Donde:

    • JSON_FILE_NAME es el nombre del archivo JSON que has creado.
    • BUCKET_NAME es el nombre del contenedor que quieres cambiar de ubicación.

    Después de iniciar una prueba, se inicia una operación de larga duración. La prueba de funcionamiento se completa correctamente si se cumplen las siguientes condiciones:

    • La prueba de funcionamiento no detecta ningún error.
    • El recurso operations devuelve el valor del campo done como 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 revela algún problema, resuélvelo antes de continuar con el paso para iniciar la copia incremental de datos.

Iniciar la copia de datos incremental

Línea de comandos

Inicia la operación de cambio de ubicación del contenedor:

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

Donde:

  • BUCKET_NAME es el nombre del contenedor que quieres cambiar de ubicación.

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

APIs REST

API JSON

  1. Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado Authorization.

  2. Crea un archivo JSON que contenga la configuración del segmento. Consulta la Buckets: relocate documentación para ver la lista completa de ajustes. Estos son los ajustes habituales que puedes incluir:

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

    Donde:

    • DESTINATION_LOCATION es la ubicación de destino del contenedor.
    • LOCATIONS es una lista de códigos de ubicación que se utilizarán para la configuración dual.
    • validateOnly se define como false para iniciar el paso de copia de datos incremental de la reubicación del contenedor.
  3. Usa cURL para llamar a la API 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"

    Donde:

    • JSON_FILE_NAME es el nombre del archivo JSON que has creado.
    • BUCKET_NAME es el nombre del contenedor que quieres cambiar de ubicación.

Monitorizar la copia de datos incremental

El proceso de cambio de ubicación de un contenedor es una operación de larga duración que debe monitorizarse para ver cómo avanza. Puede 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 los detalles de una operación de larga duración, enumerar o cancelar operaciones de larga duración, consulta 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
  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 de la salida generada por la operación de copia de datos incremental:

Nombre del campo Descripción Posibles valores
done Indica que se ha completado la operación de cambio de ubicación del contenedor. 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 un cubo.
metadata.commonMetadata Metadatos comunes a todas las operaciones.
metadata.commonMetadata.createTime Hora en la que se creó la operación de larga duración.
metadata.commonMetadata.endTime Hora en la que finalizó la operación de larga duración.
metadata.commonMetadata.progressPercent El progreso estimado de la operación de larga duración, en porcentaje. Entre 0 y 100%. El valor -1 significa que el progreso es desconocido o no aplicable.
metadata.commonMetadata.requestedCancellation Indica si el usuario ha solicitado 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 Hora a la que se actualizó la operación de larga duración por última vez.
metadata.destinationLocation Ubicación de destino del segmento.
metadata.finalizationState Indica si se puede 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 no es necesario realizar el paso de sincronización final para este segmento y que puedes omitirlo.
  • BLOCKED_ON_ERRORS: indica que el paso de finalización se ha pausado 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 ha completado correctamente.
metadata.progress Detalles del progreso de la operación de reubicación.
metadata.progress.byteProgressPercent Progreso de los bytes copiados en porcentaje. Entre 0 y 100%. El valor -1 significa que el progreso es desconocido o no aplicable.
metadata.progress.discoveredBytes Número de bytes detectados en el segmento de origen.
metadata.progress.discoveredObjectCount Número de objetos descubiertos en el segmento de origen.
metadata.progress.discoveredSyncCount Número de actualizaciones de metadatos de objetos detectadas en el segmento de origen.
metadata.progress.objectProgressPercent Progreso de los objetos copiados en porcentaje. Entre 0 y 100%. El valor -1 significa que el progreso es desconocido o no aplicable.
metadata.progress.remainingBytes Número de bytes que quedan por copiar del contenedor de origen al de destino.
metadata.progress.remainingObjectCount Número de objetos que quedan por copiar del segmento de origen al de destino.
metadata.progress.remainingSyncCount Número de actualizaciones de metadatos de objetos restantes que se van a sincronizar.
metadata.progress.syncProgressPercent Progreso de las actualizaciones de metadatos de objetos que se van a sincronizar en porcentaje. Entre 0 y 100%. El valor -1 significa que el progreso es desconocido o no aplicable.
metadata.relocationState Estado general de la operación de cambio de ubicación del contenedor.
  • SYNCING: indica que el paso de copia de datos incremental está copiando objetos del segmento de origen al de destino.
  • FINALIZING: indica que se ha iniciado el paso de finalización.
  • FAILED: indica que se ha producido un error en el paso de copia de datos incremental y no se ha completado correctamente.
  • SUCCEEDED: indica que el paso de copia de datos incremental se ha completado correctamente.
  • CANCELLED: indica que se ha cancelado el paso de copia de datos incremental.
metadata.sourceLocation Ubicación de origen del segmento.
metadata.validateOnly Indica si se ha iniciado una prueba de la reubicación del segmento. true, false
metadata.estimatedWriteDowntimeDuration Duración estimada del tiempo de inactividad de escritura. Se rellena cuando finalizationState es READY. El valor mínimo es 7200s.
metadata.writeDowntimeExpireTime La hora en la que caduca el tiempo de inactividad de escritura.
name 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 El tipo de respuesta.
selfLink Un enlace a esta operación.

Si tienes problemas al interactuar con otras funciones de Cloud Storage, consulta Limitaciones.

Iniciar el paso de sincronización final

El último paso de la sincronización implica un periodo durante el cual no puedes realizar operaciones de escritura en el contenedor. Te recomendamos que programes el paso de sincronización final en un momento que minimice las interrupciones en tus aplicaciones.

Antes de continuar, comprueba que el contenedor esté totalmente preparado consultando el valor de finalizationState en el resultado del paso copia de datos incrementales. 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 cambio de ubicación del segmento una vez que el valor de finalizationState sea READY:

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

Donde:

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

Define la marca ttl para tener más 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

Donde:

TTL_DURATION es el tiempo de vida (TTL) de la fase de inactividad de escritura durante un proceso de reubicación. Se expresa como una cadena, como 12h para 12 horas. El valor TTL_DURATION determina la duración máxima permitida de la fase 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 entre 6h (6 horas) y 48h (48 horas). Si no se especifica ningún valor, se utiliza 12h (12 horas) de forma predeterminada.

APIs REST

API JSON

  1. Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado Authorization.

  2. Crea un archivo JSON que contenga la configuración para cambiar la ubicación del segmento. Consulta la Buckets: advanceRelocateBucket documentación para ver la lista completa de ajustes. Estos son los ajustes habituales que puedes incluir:

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

    Donde:

    • EXPIRE_TIME es el tiempo que tarda en caducar el tiempo de inactividad de escritura.
    • TTL_DURATION es el tiempo de vida (TTL) de la fase de inactividad de escritura durante un proceso de reubicación. Se expresa como una cadena, como 12h para 12 horas. El valor TTL_DURATION determina la duración máxima permitida de la fase 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 entre 6h (6 horas) y 48h (48 horas). Si no se especifica ningún valor, se utiliza 12h (12 horas) de forma predeterminada.
  3. Usa cURL para llamar a la API 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"

    Donde:

    • JSON_FILE_NAME es el nombre del archivo JSON que has creado.
    • BUCKET_NAME es el nombre del contenedor que quieres cambiar de ubicación.
    • OPERATION_ID es el ID de la operación de larga duración, que se devuelve en la respuesta de los métodos que llamas. Por ejemplo, la siguiente respuesta se devuelve al llamar a Operations: list y el ID de la operación de larga duración es AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74.

Validar el proceso de cambio de ubicación del segmento

Después de iniciar una reubicación, comprueba que se haya completado correctamente. En esta sección se explica cómo confirmar que la transferencia de datos se ha realizado correctamente.

Valide que el proceso de reubicación se ha completado correctamente con los siguientes métodos:

  • Sondear operaciones de larga duración: la reubicación de un contenedor es una operación de larga duración. Puedes sondear la operación de larga duración mediante el operation id para monitorizar su progreso y confirmar que se ha completado correctamente verificando el estado success. Esto implica consultar periódicamente el estado de la operación hasta que alcance un estado terminal. Para obtener información sobre cómo monitorizar operaciones de larga duración, consulta Usar operaciones de larga duración en Cloud Storage.

  • Analizar entradas de registros de auditoría de Cloud: los registros de auditoría de Cloud proporcionan un registro detallado de los eventos y las operaciones de tu entorno de Google Cloud . Puedes analizar las entradas de registros de auditoría de Cloud asociadas a la reubicación para comprobar si se ha completado correctamente. 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 auditoría de Cloud, consulta Ver registros de auditoría.

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

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

    • Reubicación fallida: Relocate bucket has failed. Bucket location remains unchanged.

    Con las notificaciones de Pub/Sub, también puedes configurar alertas que te avisen cuando aparezca en los registros el evento de éxito o de fallo específico. Para obtener información sobre cómo configurar las notificaciones de Pub/Sub, consulta Configurar notificaciones de Pub/Sub para Cloud Storage.

Completar las tareas posteriores al cambio de ubicación del contenedor

Una vez que hayas cambiado la ubicación de tu contenedor, sigue estos pasos:

  1. Opcional: Restaura los controles de acceso basados en etiquetas de tu contenedor.
  2. Las configuraciones de informes de inventario no se conservan durante el proceso de cambio de ubicación, por lo que tendrá que volver a crearlas manualmente. Para obtener información sobre cómo crear una configuración de informe de inventario, consulta Crear una configuración de informe 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 endpoints regionales están vinculados a ubicaciones concretas, por lo que tendrás que modificar el código de tu aplicación para reflejar el nuevo endpoint.

Cómo gestionar las operaciones de cambio de ubicación de segmentos fallidas

Tenga en cuenta los siguientes factores antes de gestionar las operaciones de reubicación de cubos fallidas:

  • Si no se puede cambiar la ubicación de un contenedor, es posible que queden recursos obsoletos en el destino, como archivos temporales o copias de datos incompletas. Debes esperar entre 7 y 14 días antes de iniciar otra reubicación de un contenedor en el mismo destino. Puedes iniciar una reubicación de un contenedor a otro destino inmediatamente.

  • Si la ubicación de destino no es la óptima para tus datos, puede que quieras deshacer el cambio de ubicación. Sin embargo, no puedes iniciar una reubicación de inmediato. Debes esperar hasta 14 días para poder volver a iniciar el proceso de traslado. Esta restricción se ha implementado para garantizar la estabilidad y evitar conflictos de datos.

Siguientes pasos