Mover datos entre proyectos

Esta página describe cómo usar las funciones de importación y exportación administradas para mover datos de Cloud Firestore de un proyecto a otro. Esto puede resultar útil para configurar un entorno de desarrollo o como parte de la migración permanente de una aplicación a otro proyecto. El ejemplo de esta página demuestra cómo exportar datos de un proyecto de origen y luego importar esos datos a un proyecto de destino. Mover datos entre proyectos implica los siguientes pasos:

  1. Crea un depósito de Cloud Storage para almacenar los datos de tu proyecto de origen.
  2. Exporte los datos de su proyecto de origen al depósito.
  3. Dale permiso a tu proyecto de destino para leer desde el depósito.
  4. Importe los datos del depósito a su proyecto de destino.

Antes de que empieces

Antes de poder utilizar el servicio administrado de exportación e importación, debe completar las siguientes tareas:

  1. Habilite la facturación tanto para su proyecto de origen como para su proyecto de destino. Solo los proyectos de Google Cloud con facturación habilitada pueden utilizar la funcionalidad de exportación e importación.
  2. Asegúrese de que su cuenta tenga los permisos necesarios de Cloud IAM en su proyecto de origen y de destino. Si es propietario de ambos proyectos, su cuenta tiene los permisos necesarios. De lo contrario, las siguientes funciones de Cloud IAM otorgan los permisos necesarios para las operaciones de exportación e importació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 en Conceder acceso .

  3. Configura la herramienta de línea de comandos gcloud y conéctate a tu proyecto de una de las siguientes maneras:

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

Exportar datos del proyecto de origen

Exporta tus datos creando un depósito de Cloud Storage para tus archivos de exportación de Cloud Firestore e iniciando una operación de exportación.

Crear un depósito de Cloud Storage

Crea un depósito de Cloud Storage en la misma ubicación que tu base de datos de Cloud Firestore. Para ver la ubicación de su base de datos, consulte la configuración de ubicación de su proyecto . No puede utilizar un depósito de Pagos del solicitante para operaciones de exportación e importación.

Si tu depósito de Cloud Storage no está en tu proyecto de origen , debes otorgar acceso al depósito a la cuenta de servicio predeterminada del proyecto de origen. 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 utilizan esta cuenta de servicio predeterminada para autorizar las operaciones del depósito de Cloud Storage. Para otorgarle a la cuenta de servicio predeterminada acceso a su depósito de origen, concédale 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 este rol en la consola de Google Cloud .

Deshabilitar operaciones de escritura (opcional)

Si su aplicación continúa escribiendo en su base de datos mientras realiza una operación de exportación, es posible que no capture todas esas escrituras en sus archivos de exportación. Para exportar datos desde un estado consistente, deshabilite las escrituras en su base de datos actualizando sus reglas de seguridad y deteniendo cualquier operación del Admin SDK.

  1. Actualizar reglas de seguridad

    En la pestaña Reglas de Cloud Firestore de la consola, actualice las reglas de seguridad de su proyecto de origen para denegar todas las escrituras. 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. Detener escrituras desde los SDK de administrador

    Las reglas de seguridad no impiden las escrituras provenientes de entornos de servidores privilegiados creados con un SDK de administrador de Firebase o una biblioteca cliente de Google Cloud Server . Asegúrese de detener las operaciones de escritura desde sus servidores de administración cerrando o actualizando sus servidores.

Iniciar una operación de exportación

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

Exportar todos los datos
gcloud firestore export gs://[SOURCE_BUCKET] --async
Exportar colecciones específicas
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Tome nota del outputURIPrefix de su operación de exportación, ya que lo usará más adelante. De forma predeterminada, Cloud Firestore agrega un prefijo a tus archivos de exportación según una marca de tiempo:

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

Mientras se ejecuta la operación de exportación, puede usar el comando firestore operations list para ver el progreso de su operación:

gcloud firestore operations list

Importar datos al proyecto de destino

A continuación, otorgue al proyecto de destino acceso a sus archivos de datos de Cloud Firestore e inicie una operación de importación.

Dale al proyecto de destino acceso a tus archivos de datos.

Antes de poder comenzar una operación de importación, debe asegurarse de que su proyecto de destino pueda acceder a sus archivos de datos de Cloud Firestore.

Mover archivos de datos a un depósito local

Si la ubicación de tu depósito de origen es diferente de la ubicación de Cloud Firestore de tu proyecto de destino, debes mover tus archivos de datos a un depósito de Cloud Storage en la misma ubicación que tu proyecto de destino.

Mueva sus archivos de datos a otro depósito de Cloud Storage siguiendo los pasos en Mover y cambiar el nombre de depósitos . Para todos los pasos siguientes, utilice este nuevo depósito como [SOURCE_BUCKET] .

Dale a la cuenta de servicio del proyecto acceso a tu depósito de origen

Si su depósito de origen no está en su proyecto de destino, debe otorgar acceso a la cuenta de servicio predeterminada del proyecto de destino a su depósito de origen. La cuenta de servicio predeterminada se llama [DESTINATION_PROJECT_ID] @appspot.gserviceaccount.com . Para otorgarle a la cuenta de servicio predeterminada acceso a su depósito de origen, concédale los permisos adecuados para acceder al depósito.

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 .

Iniciar una operación de importación

Antes de comenzar la operación de importación, asegúrate de que gcloud esté configurado para el proyecto correcto:

gcloud config set project [DESTINATION_PROJECT_ID]

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

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

Donde [EXPORT_PREFIX] coincide con el prefijo en outputUriPrefix de su operación de exportación. Por ejemplo:

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

Mientras se ejecuta la operación de exportación, puede usar el comando firestore operations list para ver el progreso de su operación:

gcloud firestore operations list