En esta página, se describe cómo programar las exportaciones de tus datos de Cloud Firestore. Para ejecutar exportaciones programadas, te recomendamos usar Cloud Functions y Cloud Scheduler.
Antes de comenzar
Antes de programar exportaciones de datos administrados, debes completar las siguientes tareas:
- Habilita la facturación para tu proyecto de Google Cloud. Solo los proyectos de Google Cloud que tengan la facturación habilitada pueden usar la función de importación y exportación.
- Las operaciones de exportación requieren un bucket de Cloud Storage de destino. Crea un bucket de Cloud Storage en una ubicación cercana a la ubicación de la base de datos de Cloud Firestore. No puedes usar un bucket de pagos del solicitante para las operaciones de exportación.
Crea una Cloud Function y un trabajo de Cloud Scheduler
Sigue estos pasos para crear una Cloud Function de Node.js que inicia una exportación de datos Cloud Firestore y un trabajo Cloud Scheduler para llamar a esa función:
Firebase CLI
-
Instala Firebase CLI. En un directorio nuevo, inicializa la CLI para Cloud Functions:
firebase init functions --project PROJECT_ID
- Selecciona el lenguaje JavaScript.
- Opcionalmente, habilita ESLint.
- Ingresa
y
para instalar las dependencias.
-
Reemplaza el código del archivo
functions/index.js
con lo siguiente:const functions = require('firebase-functions'); const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME'; exports.scheduledFirestoreExport = functions.pubsub .schedule('every 24 hours') .onRun((context) => { const projectId = process.env.GCP_PROJECT; const databaseName = client.databasePath(projectId, '(default)'); return client.exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or set to a list of collection IDs to export, // collectionIds: ['users', 'posts'] collectionIds: [] }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); }) .catch(err => { console.error(err); throw new Error('Export operation failed'); }); });
- En el código anterior, modifica lo siguiente:
- Reemplaza
BUCKET_NAME
por el nombre de tu bucket. - Modifica
every 24 hours
para establecer tu programa de exportación. Utiliza la sintaxis cron.yaml de App Engine o el formato unix-cron (* * * * *
). -
Modifica
collectionIds: []
para que solo se exporten los grupos de colecciones especificados. No lo modifiques si quieres exportar todas las colecciones.
- Reemplaza
-
Implementa la función programada con este comando:
firebase deploy --only functions
Consola de Google Cloud
Crea una Cloud Function
-
Ve a la página de Cloud Functions en la consola de Google Cloud:
- Haz clic en Crear función.
- Ingresa un nombre de función, como
firestoreExport
- En Activador, selecciona Cloud Pub/Sub.
- En Tema, selecciona Crear tema nuevo. Ingresa un nombre para el tema de Pub/Sub, como
initiateFirestoreExport
. Anota el nombre del tema, ya que lo necesitarás para crear tu trabajo Cloud Scheduler. - En Código fuente, selecciona Editor directo. Ingresa el siguiente código en
index.js
: En el código anterior, modifica lo siguiente:const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { const databaseName = client.databasePath( process.env.GCP_PROJECT, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or define a list of collection IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
- Reemplaza
BUCKET_NAME
por el nombre de tu bucket. -
Modifica
collectionIds: []
para que solo se exporten los grupos de colecciones especificados. No lo modifiques si quieres exportar todas las colecciones.
- Reemplaza
- En
package.json
, agrega la siguiente dependencia:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- En Función que se ejecutará, ingresa
scheduledFirestoreExport
, el nombre de la función deindex.js
. - Haz clic en Crear para implementar la Cloud Function.
Crear un trabajo de Cloud Scheduler
A continuación, crea un trabajo de Cloud Scheduler que llame a tu Cloud Function:
-
Ve a la página Cloud Scheduler en la consola de Google Cloud:
- Haz clic en Crear trabajo.
- Ingresa un Nombre para el trabajo, como
scheduledFirestoreExport
. - Ingresa una Frecuencia, como
every 24 hours
. - Selecciona una Zona horaria.
- En Destino, selecciona Pub/Sub. En el campo Tema, ingresa el nombre del tema de Pub/Sub que definiste junto con tu función de Cloud Functions,
initiateFirestoreExport
, en el ejemplo anterior. - En el campo Carga útil, ingresa
start export
. El trabajo requiere que se defina una carga útil, pero la Cloud Function anterior no utiliza realmente este valor. - Haz clic en Crear.
Configura los permisos de acceso
A continuación, otórgale permiso a tu Cloud Function para que pueda iniciar las operaciones de exportación y escribir en el bucket de GCS.
Esta Cloud Function usa la cuenta de servicio predeterminada de tu proyecto para autenticar y autorizar sus operaciones de exportación. Cuando creas un proyecto, se crea una cuenta de servicio predeterminada con el siguiente nombre:
PROJECT_ID@appspot.gserviceaccount.com
Esta cuenta de servicio requiere permiso para iniciar una exportación y escribir en el bucket Cloud Storage. Para otorgar esos permisos, asigna las siguientes funciones de IAM a la cuenta de servicio predeterminada:
Cloud Datastore Import Export Admin
- Función
Owner
oStorage Admin
en el depósito
Puedes usar las herramientas de línea de comandos de gcloud
y gsutil
para asignar estas funciones.
Si aún no lo has hecho, puedes acceder a estas herramientas desde Cloud Shell en la consola de Google Cloud:
Inicia Cloud Shell
-
Asigna la función Administrador de importación y exportación de Cloud Datastore: Reemplaza PROJECT_ID y ejecuta el siguiente comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
Asigna la función Administrador de almacenamiento en tu bucket: Reemplaza PROJECT_ID y BUCKET_NAME, y ejecuta el siguiente comando:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
Si inhabilitas o borras tu cuenta de servicio predeterminada de App Engine, tu app de App Engine perderá el acceso a tu base de datos de Cloud Firestore. Si inhabilitaste tu cuenta de servicio de App Engine, puedes volver a habilitarla. Para ello, consulta cómo habilitar una cuenta de servicio. Si borraste tu cuenta de servicio de App Engine en los últimos 30 días, puedes restablecerla. Para ello, consulta cómo recuperar una cuenta de servicio.
Prueba tu trabajo de Cloud Scheduler y Cloud Function
Puedes probar tu trabajo de Cloud Scheduler en la página Cloud Scheduler de la consola de Google Cloud.
Ve a la página Cloud Scheduler en la consola de Google Cloud.
Ir a Cloud SchedulerEn la fila de tu nuevo trabajo de Cloud Scheduler, haz clic en Ejecutar ahora.
Después de unos segundos, el trabajo de Cloud Scheduler debe actualizar la columna de resultados a Correcto y Última ejecución a la hora actual. Es posible que debas hacer clic en Actualizar.
La página de Cloud Scheduler solo confirma que el trabajo llamó a tu Cloud Function. Abre la página de Cloud Function para ver los registros de tu función.
Visualiza los registros de Cloud Function
Para ver si la Cloud Function inició una operación de exportación correctamente, abre los registros de la función:
Firebase console
Ve a la página Cloud Functions en Firebase console.
GCP Console
Ve a la página Cloud Functions en la consola de Google Cloud.
Visualiza el progreso de la exportación
Puedes usar el comando gcloud firestore operations list
para ver el progreso de tus operaciones de exportación. Consulta cómo administrar las operaciones de importación y exportación.
Una vez que se completa una operación de exportación, puedes ver los archivos de salida en tu bucket de Cloud Storage:
Abre el navegador de Cloud Storage