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 bucket de Cloud Storage para conservar los datos de tu proyecto de origen.
  2. Exporta los datos de tu proyecto de origen al bucket.
  3. Otórgale permisos a tu proyecto de destino para que lea los datos desde el bucket.
  4. Importa los datos del bucket 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:

  4. Configura índices en tu nuevo proyecto. Los índices compuestos deben coincidir entre los proyectos de origen y de destino. Los índices se deben configurar primero para evitar tener que procesar cada documento varias veces.

Exporta los datos del proyecto de origen

Exporta los datos mediante la creación de un bucket de Cloud Storage para guardar los archivos de exportación de Firestore y comienza a exportar.

Cree un bucket 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 bucket de pagos del solicitante para las operaciones de importación y exportación.

Si el bucket 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 bucket. 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 bucket de Cloud Storage. Para permitir que acceda a tu depósito de origen, otórgale la función Storage Admin.

Puedes otorgar este rol con la herramienta gsutil, disponible en Cloud Shell:

Iniciar Cloud Shell

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.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 bucket 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 bucket local

Si la ubicación del bucket de origen difiere de la ubicación de Firestore del proyecto de destino, debes trasladar los archivos de datos a un bucket 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 bucket nuevo como el [SOURCE_BUCKET] para todos los pasos siguientes.

Permite que la cuenta de servicio del proyecto acceda a tu bucket de origen

Si el bucket de origen no se encuentra en tu proyecto de destino, debes permitir que la cuenta de servicio predeterminada del proyecto de destino acceda al bucket de origen. La cuenta de servicio predeterminada se llama [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Para permitir que la cuenta de servicio predeterminada acceda al bucket de origen, otórgale los permisos adecuados para acceder al bucket.

Puedes otorgar los roles necesarios con la herramienta gsutil, disponible en Cloud Shell:

Iniciar Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

También puedes otorgar este rol en la consola de Google Cloud.

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 bucket 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 tu operación 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