Esta página describe cómo programar exportaciones de sus datos de Cloud Firestore. Para ejecutar exportaciones según una programación, recomendamos utilizar Cloud Functions y Cloud Scheduler.
Antes de que empieces
Antes de programar exportaciones de datos administrados, debe completar las siguientes tareas:
- Habilite la facturación para su proyecto de Google Cloud. Solo los proyectos de Google Cloud con facturación habilitada pueden utilizar la función de exportación e importación.
- Las operaciones de exportación requieren un depósito de Cloud Storage de destino. Crea un depósito de Cloud Storage en una ubicación cercana a la ubicación de tu base de datos de Cloud Firestore . No puede utilizar un depósito de Pagos del solicitante para operaciones de exportación.
Crear una función de nube y un trabajo de programador de nube
Siga los pasos a continuación para crear una función en la nube de Node.js que inicie una exportación de datos de Cloud Firestore y un trabajo de Cloud Scheduler para llamar a esa función:
CLI de base de fuego
Instale Firebase CLI . En un nuevo directorio, inicialice la CLI para Cloud Functions:
firebase init functions --project PROJECT_ID
- Seleccione JavaScript para el idioma.
- Opcionalmente, habilite ESLint.
- Ingrese
y
para instalar dependencias.
Reemplace el código en el 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, modifique lo siguiente:
- Reemplace
BUCKET_NAME
con el nombre de su depósito. - Modifique
every 24 hours
para configurar su cronograma de exportación. Utilice la sintaxis cron.yaml de AppEngine o el formato Unix-cron (* * * * *
). Modifique
collectionIds: []
para exportar solo los grupos de colección especificados. Déjelo como está para exportar todas las colecciones.
- Reemplace
Implementar la función programada:
firebase deploy --only functions
Consola GCP
Crear una función en la nube
Vaya a la página de Funciones de la nube en GCP Console:
- Haga clic en Crear función
- Ingrese un nombre de función como
firestoreExport
- En Activador , seleccione Cloud Pub/Sub
- En Tema , seleccione Crear nuevo tema . Ingrese un nombre para el tema de publicación/sub, como
initiateFirestoreExport
. Tome nota del nombre del tema, ya que lo necesita para crear su trabajo de Cloud Scheduler. - En Código fuente , seleccione Editor en línea . Ingrese el siguiente código en
index.js
: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); }); };
En el código anterior, modifique lo siguiente:- Reemplace
BUCKET_NAME
con el nombre de su depósito. Modifique
collectionIds: []
para exportar solo los grupos de colección especificados. Déjelo como está para exportar todas las colecciones.
- Reemplace
- En
package.json
, agregue la siguiente dependencia:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- En Función a ejecutar , ingrese
scheduledFirestoreExport
, el nombre de la función enindex.js
. - Haga clic en Crear para implementar la función de nube.
Crear un trabajo de Programador de la nube
A continuación, cree un trabajo de Cloud Scheduler que llame a su función de nube:
Vaya a la página de Cloud Scheduler en GCP Console:
- Haga clic en Crear trabajo .
- Ingrese un nombre para el trabajo, como
scheduledFirestoreExport
. - Introduzca una Frecuencia , por ejemplo,
every 24 hours
. - Seleccione una zona horaria .
- En Destino , seleccione Pub/Sub . En el campo Tema , ingrese el nombre del tema de publicación/sub que definió junto con su función en la nube,
initiateFirestoreExport
en el ejemplo anterior. - En el campo Carga útil , ingrese
start export
. El trabajo requiere una carga útil definida, pero la función de nube anterior en realidad no utiliza este valor. - Haga clic en Crear .
Configurar permisos de acceso
A continuación, otorgue permiso a la función de nube para iniciar operaciones de exportación y escribir en su depósito de GCS.
Esta función de nube utiliza la cuenta de servicio predeterminada de su proyecto para autenticar y autorizar sus operaciones de exportación. Cuando crea 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 operación de exportación y escribir en su depósito de Cloud Storage. Para otorgar estos permisos, asigne las siguientes funciones de IAM a la cuenta de servicio predeterminada:
-
Cloud Datastore Import Export Admin
- Rol
Owner
oStorage Admin
en el depósito
Puedes usar las herramientas de línea de comandos gcloud
y gsutil
para asignar estos roles.
Si aún no están instaladas, puede acceder a estas herramientas desde Cloud Shell en la consola de Google Cloud Platform:
Iniciar Cloud Shell
Asigne la función de administrador de importación y exportación de Cloud Datastore . Reemplace PROJECT_ID y ejecute el siguiente comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
Asigne la función de administrador de almacenamiento en su depósito. Reemplace PROJECT_ID y BUCKET_NAME y ejecute el siguiente comando:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
Si desactiva o elimina su cuenta de servicio predeterminada de App Engine, su aplicación App Engine perderá el acceso a su base de datos de Cloud Firestore. Si deshabilitó su cuenta de servicio de App Engine, puede volver a habilitarla; consulte habilitar una cuenta de servicio . Si eliminaste tu cuenta de servicio de App Engine en los últimos 30 días, puedes restaurarla; consulta cómo recuperar una cuenta de servicio .
Pruebe su trabajo de Cloud Scheduler y su función de nube
Puede probar su trabajo de Cloud Scheduler en la página Cloud Scheduler de Google Cloud Platform Console.
Vaya a la página de Cloud Scheduler en GCP Console.
Ir al programador de la nubeEn la fila de su nuevo trabajo de Cloud Scheduler, haga clic en Ejecutar ahora .
Después de unos segundos, el trabajo de Cloud Scheduler debería actualizar la columna de resultados a Éxito y Última ejecución a la hora actual. Es posible que tengas que hacer clic en Actualizar .
La página de Cloud Scheduler solo confirma que el trabajo llamó su función de nube. Abra la página Cloud Function para ver los registros de su función.
Ver los registros de la función de nube
Para ver si la función de nube inició correctamente una operación de exportación, abra los registros de la función:
Consola de base de fuego
Vaya a la página Cloud Functions en Firebase console.
Consola GCP
Vaya a la página Cloud Functions en GCP Console.
Ver 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 exportación e importación .
Una vez completada una operación de exportación, puedes ver los archivos de salida en tu depósito de Cloud Storage:
Abra el navegador de almacenamiento en la nube