En esta página, se describe cómo usar las funciones administradas de importación y exportación para mover 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:
- Crea un bucket de Cloud Storage para conservar los datos de tu proyecto de origen.
- Exporta los datos de tu proyecto de origen al bucket.
- Otórgale permisos a tu proyecto de destino para que lea los datos desde el bucket.
- 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:
- Habilita la facturación para el proyecto de origen y el de destino. Solo los proyectos de Google Cloud con facturación habilitada pueden usar la función de importación y exportación.
-
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
oCloud Datastore Import Export Admin
El propietario de un proyecto puede otorgar una de estas funciones si sigue los pasos en Otorga acceso.
-
Configura la herramienta de línea de comandos de
gcloud
y conecta tu proyecto de una de las siguientes maneras:-
Accede a
gcloud
desde la consola de Google Cloud con Cloud Shell.Asegúrate de que
gcloud
esté configurado para el proyecto correcto:gcloud config set project [SOURCE_PROJECT_ID]
-
-
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
Para exportar tus datos, crea un bucket de Cloud Storage para los archivos de exportación de Cloud Firestore y comienza una operación de exportación.
Crea un bucket Cloud Storage
Crea un bucket de Cloud Storage en la misma ubicación que 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 que se crea automáticamente con el nombre PROJECT_ID@appspot.gserviceaccount.com
. Las operaciones de exportación de Cloud Firestore usan esta cuenta de servicio predeterminada 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:
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.
Actualiza las reglas de seguridad.
En la pestaña Reglas de la consola de Cloud 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 } }
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. De forma predeterminada, Cloud 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 de la siguiente manera:
gcloud firestore operations list
Importa datos al proyecto destino
A continuación, permite que el proyecto de destino acceda a los archivos de datos de Cloud Firestore y comienza una 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 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 Cómo mover 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:
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