Transfiere datos entre proyectos

En esta página, se describe cómo usar las funciones administradas de importación y exportación para mover datos de 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 Google Cloud que tengan la facturación habilitada pueden usar la función de importación y exportación.
  2. Asegúrate de que tu cuenta tenga los permisos de IAM necesarios en tu proyecto de origen y en tu proyecto de destino. Si eres el propietario de ambos proyectos, tu cuenta ya tiene los permisos necesarios. De lo contrario, las siguientes funciones de IAM otorgan los permisos necesarios para las operaciones de importación y exportación de 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 Otorga 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 los datos mediante la creación de un depósito de Cloud Storage para guardar los archivos de exportación de Firestore y comienza a exportar.

Crea un depósito de Cloud Storage

Crea un depósito de Cloud Storage en la misma ubicación de la base de datos de 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 Google Cloud tiene una cuenta de servicio predeterminada creada de forma automática con el nombre PROJECT_ID@appspot.gserviceaccount.com. Las operaciones de exportación de Cloud Firestore usan esta cuenta para autorizar las operaciones del depósito de Cloud Storage. Para permitir que la cuenta de servicio predeterminada acceda al 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 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 Firestore, actualiza las reglas de seguridad del proyecto de 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 del servidor de Google Cloud. 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 firestore export para exportar datos desde tu proyecto de origen. Puedes exportar todos los datos o solo colecciones específicas. Reemplaza [SOURCE_BUCKET] por el nombre de tu depósito de Cloud Storage.

Para exportar todos los datos, usa el siguiente comando:
gcloud firestore export gs://[SOURCE_BUCKET] --async
Exporta colecciones específicas
gcloud 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 lo usarás más adelante. De forma predeterminada, Firestore agrega un prefijo a los archivos de exportación en función de una 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 firestore operations list

Importa datos al proyecto de destino

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

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

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

Traslada los archivos de datos a un depósito local

Si la ubicación del depósito de origen difiere de la ubicación de Firestore del proyecto de destino, debes trasladar los archivos de datos a un depósito de Cloud Storage que se encuentre en la misma ubicación que el 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:admin \
gs://[SOURCE_BUCKET]

También puedes otorgar esta función en Google Cloud 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 firestore import para importar los datos desde tu depósito de origen a tu proyecto de destino:

gcloud 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 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 de la siguiente manera:

gcloud firestore operations list