Ir a la consola

Transfiere datos entre proyectos

En esta página, se describe cómo usar las funciones administradas de importación y exportación a fin de trasladar datos de Cloud Firestore de un proyecto a otro. Esto puede ser útil para la configuración de un entorno de desarrollo o como parte de la migración permanente de una app a otro proyecto. En el ejemplo en esta página, se muestra cómo exportar los datos de un proyecto de origen para importarlos a un proyecto de destino. El traslado de datos entre proyectos implica realizar los siguientes pasos:

  1. Crea un depósito de Cloud Storage para conservar los datos de tu proyecto de origen.
  2. Exporta los datos de tu proyecto de origen al depósito.
  3. Otórgale permisos a tu proyecto de destino para que lea los datos desde el depósito.
  4. Importa los datos del depósito a tu proyecto de destino.

Antes de comenzar

Antes de usar el servicio administrado de importación y exportación, debes completar las siguientes tareas:

  1. Habilita la facturación para el proyecto de origen y el de destino. Solo los proyectos de GCP que tengan la facturación habilitada pueden usar la funcionalidad de importación y exportación.
  2. Asegúrate de que tu cuenta tenga los permisos necesarios de Cloud IAM en los proyectos de origen y los de destino. Si eres el propietario de ambos proyectos, tu cuenta ya tiene los permisos necesarios. De lo contrario, las siguientes funciones de Cloud IAM otorgan los permisos necesarios para realizar las operaciones de importación y exportación de Cloud Firestore:

    Owner, Cloud Datastore Owner, o Cloud Datastore Import Export Admin

    El propietario de un proyecto puede otorgar una de estas funciones si sigue los pasos en Otorgar acceso.

  3. Configura la herramienta de línea de comandos de gcloud y conecta tu proyecto de una de las siguientes maneras:

Exporta los datos del proyecto de origen

Exporta tus datos mediante la creación de un depósito de Cloud Storage para guardar los archivos de exportación de Cloud Firestore y, luego, comienza a exportar.

Crea un depósito de Cloud Storage

Crea un depósito de Cloud Storage en la misma ubicación de tu base de datos de Cloud Firestore. Consulta la configuración de la ubicación de un proyecto para ver la ubicación de la base de datos. No puedes usar un depósito de pagos del solicitante para las operaciones de importación y exportación.

Si el depósito de Cloud Storage no se encuentra en tu proyecto de origen, debes permitir que la cuenta de servicio predeterminada del proyecto de origen acceda al depósito. Cada proyecto de GCP tiene una cuenta de servicio predeterminada que se crea automáticamente con el nombre PROJECT_ID@appspot.gserviceaccount.com. Las operaciones de exportación de Cloud Firestore usan esta cuenta para autorizar las operaciones de depósito de Cloud Storage. Para permitir que acceda a tu depósito de origen, otórgale la función Storage Admin.

Puedes otorgar esta función con la herramienta gsutil, disponible en Cloud Shell:

Iniciar Cloud Shell

gsutil iam ch serviceAccount:[SOURCE_PROJECT_ID]@appspot.gserviceaccount.com:admin \
gs://[BUCKET_NAME]

También puedes otorgar esta función en Google Cloud Platform Console.

Inhabilita las operaciones de escritura (opcional)

Si la app sigue realizando operaciones de escritura en tu base de datos mientras realizas exportaciones, es posible que no se capturen todas las operaciones de escritura en los archivos de exportación. Para exportar datos de una etapa coherente, actualiza tus reglas de seguridad y detén todas las operaciones del SDK de Admin con el objetivo de inhabilitar las operaciones de escritura en tu base de datos.

  1. Actualiza las reglas de seguridad.

    En la pestaña Reglas de la consola de Cloud Firestore, actualiza las reglas de seguridad de tu proyecto origen para que se rechacen todas las operaciones de escritura. Por ejemplo:

      // Deny write access to all users under any conditions
      service cloud.firestore {
        match /databases/{database}/documents {
          match /{document=**} {
            allow write: if false;
          }
          // Reads do not affect export operations
          // Add your read rules here
        }
      }
    
  2. Detén las operaciones de escritura en los SDK de Admin.

    Las reglas de seguridad no detienen las operaciones de escritura provenientes de entornos de servidor privilegiados que se hayan creado mediante un SDK de Firebase Admin o una biblioteca cliente de Google Cloud Server. Asegúrate de apagar o actualizar tus servidores de administración para detener las operaciones de escritura provenientes de ellos.

Inicia una operación de exportación

Usa el comando gcloud beta firestore export para exportar datos desde tu proyecto de origen. Puedes exportar todos los datos o solo colecciones específicas. Reemplaza el [SOURCE_BUCKET] por el nombre de tu depósito de Cloud Storage:

Para exportar todos los datos, usa el siguiente comando:
gcloud beta firestore export gs://[SOURCE_BUCKET] --async
Exporta colecciones específicas
gcloud beta firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Toma nota del outputURIPrefix de la operación de exportación, ya que más adelante lo usarás. Cloud Firestore agrega de manera predeterminada un prefijo a los archivos de exportación en función de la siguiente marca de tiempo:

outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418

A medida que se ejecuta la operación de exportación, puedes usar el comando firestore operations list para ver su progreso.

gcloud beta firestore operations list

Importa datos al proyecto destino

A continuación, permite que el proyecto de destino acceda a tus archivos de datos de Cloud Firestore y comienza la operación de importación.

Permite que el proyecto de destino acceda a tus archivos de datos

Antes de comenzar la operación de importación, asegúrate de que tu proyecto de destino pueda acceder a los archivos de datos de Cloud Firestore.

Traslada los archivos de datos a un depósito local

Si la ubicación del depósito fuente difiere de la ubicación de Cloud Firestore de tu proyecto de destino, debes trasladar tus archivos de datos a un depósito de Cloud Storage que se encuentre en la misma ubicación que tu proyecto de destino.

Sigue los pasos indicados en Transferir y cambiar el nombre de los depósitos para trasladar tus archivos de datos a otro depósito de Cloud Storage; luego, usa ese depósito nuevo como el [SOURCE_BUCKET] para todos los pasos siguientes.

Permite que la cuenta de servicio del proyecto acceda a tu depósito de origen

Si el depósito de origen no se encuentra en tu proyecto de destino, debes permitir que la cuenta de servicio predeterminada del proyecto de destino acceda al depósito de origen. La cuenta de servicio predeterminada se llama [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Para permitir que acceda a tu depósito de origen, otórgale la función Storage Admin.

Puedes otorgar esta función con la herramienta gsutil, disponible en Cloud Shell:

Iniciar Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:storage.admin \
gs://[SOURCE_BUCKET]

También puedes otorgar esta función en GCP console.

Inicia una operación de importación

Antes de iniciar la operación de importación, asegúrate de configurar gcloud para el proyecto adecuado:

gcloud config set project [DESTINATION_PROJECT_ID]

Usa el comando gcloud beta firestore import para importar los datos desde tu depósito de origen a tu proyecto de destino:

gcloud beta firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async

En el que [EXPORT_PREFIX] coincide con el prefijo en outputUriPrefix de tus operaciones de exportación. Por ejemplo:

gcloud beta firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async

A medida que se ejecuta la operación de exportación, puedes usar el comando firestore operations list para ver su progreso.

gcloud beta firestore operations list