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 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 necesarios de Cloud IAM en el proyecto de origen y el de destino. Si eres el propietario de ambos proyectos, tu cuenta ya tiene los permisos necesarios. De lo contrario, los siguientes roles 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 uno de estos roles siguiendo los pasos que se indican 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 tus datos mediante la creación de un bucket de Cloud Storage para guardar los archivos de exportación de Cloud Firestore y, luego, comienza a exportar.

Crea un bucket de Cloud Storage

Crea un bucket 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 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 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 del bucket de Cloud Storage. Para permitir que la cuenta de servicio predeterminada acceda al bucket de origen, otórgale el rol 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 este rol en la consola de Google Cloud.

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

gcloud 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 bucket local

Si la ubicación del bucket de origen difiere de la ubicación de Cloud Firestore de tu proyecto de destino, debes trasladar tus archivos de datos a un bucket 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 buckets para trasladar tus archivos de datos a otro bucket 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