Programar exportaciones de datos
En esta página se describe cómo programar exportaciones de datos de Firestore. Para ejecutar exportaciones de forma programada, te recomendamos que uses funciones de Cloud Run y Cloud Scheduler.
Antes de empezar
Antes de programar exportaciones de datos gestionadas, debes completar las siguientes tareas:
- Habilita la facturación de tu Google Cloud proyecto. Solo los proyectos con la facturación habilitada pueden usar la función de exportación e importación. Google Cloud
- Las operaciones de exportación requieren un segmento de Cloud Storage de destino. Crea un segmento de Cloud Storage en una ubicación cercana a la ubicación de tu base de datos de Firestore. No puedes usar un contenedor de pago del solicitante para las operaciones de exportación.
Crear una función de Cloud Functions y una tarea de Cloud Scheduler
Sigue estos pasos para crear una función de Cloud Functions de Node.js que inicie una exportación de datos de Firestore y una tarea de Cloud Scheduler para llamar a esa función:
CLI de Firebase
-
Instala la CLI de Firebase. En un directorio nuevo, inicializa la CLI para Cloud Run Functions:
firebase init functions --project PROJECT_ID
- Selecciona JavaScript como idioma.
- Opcionalmente, habilita ESLint.
- Introduce
y
para instalar las dependencias.
-
Sustituye el código del archivo
functions/index.js
por el 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:
- Sustituye
BUCKET_NAME
por el nombre de tu segmento. - Sustituye
YOUR_PROJECT_ID
por el ID de tu proyecto. - Modifica
every 24 hours
para definir la programación de exportación. Usa la sintaxis cron.yaml de App Engine o el formato cron de UNIX (* * * * *
). -
Modifica
collectionIds: []
para exportar solo los grupos de colecciones especificados. Déjalo como está para exportar todas las colecciones.
- Sustituye
-
Despliega la función programada:
firebase deploy --only functions
Google Cloud consola
Crea un rol de Cloud Functions
-
Ve a la página Cloud Functions de la consola de Google Cloud :
- Haz clic en Escribir una función.
- Introduce un nombre de función, como
firestore-export
. - En Activador, selecciona Cloud Pub/Sub.
- En Tema, selecciona Crear tema. Introduce un nombre para el tema de Pub/Sub, como
initiateFirestoreExport
. Anota el nombre del tema, ya que lo necesitarás para crear tu tarea de Cloud Scheduler. - En Código fuente, selecciona Editor insertado. Introduce el siguiente código en
index.js
: En el código anterior, modifique 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( YOUR_PROJECT_ID, '(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); }); };
- Sustituye
BUCKET_NAME
por el nombre de tu segmento. -
Modifica
collectionIds: []
para exportar solo los grupos de colecciones especificados. Déjalo como está para exportar todas las colecciones.
- Sustituye
- En
package.json
, añade la siguiente dependencia:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- En Función que se va a ejecutar, introduce
scheduledFirestoreExport
, el nombre de la función enindex.js
. - Haz clic en Crear para desplegar la función de Cloud Functions.
Crear una tarea de Cloud Scheduler
A continuación, crea una tarea de Cloud Scheduler que llame a tu función de Cloud:
-
Ve a la página Cloud Scheduler de la consola de Google Cloud :
- Haz clic en Crear trabajo.
- Introduce un nombre para el trabajo, como
scheduledFirestoreExport
. - Introduce una frecuencia; por ejemplo,
every 24 hours
. - Selecciona una zona horaria.
- En Destino, selecciona Pub/Sub. En el campo Tema,
introduce el nombre del tema de publicación/suscripción que hayas definido junto con tu
función de Cloud,
initiateFirestoreExport
en el ejemplo anterior. - En el campo Carga útil, introduce
start export
. El trabajo requiere una carga útil definida, pero la función de Cloud anterior no usa este valor. - Haz clic en Crear.
Configurar permisos de acceso
A continuación, concede a la función de Cloud permiso para iniciar operaciones de exportación y escribir en tu segmento de GCS.
Esta función de Cloud 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 necesita permiso para iniciar una operación de exportación y para escribir en tu segmento de Cloud Storage. Para conceder estos permisos, asigna los siguientes roles de gestión de identidades y accesos a la cuenta de servicio predeterminada:
Cloud Datastore Import Export Admin
-
Owner
oStorage Admin
en el contenedor
Puedes usar las herramientas de línea de comandos gcloud
y gsutil
para asignar estos roles.
Si aún no lo has hecho, puedes acceder a estas herramientas desde Cloud Shell en la Google Cloud consola:
Iniciar Cloud Shell
-
Asigna el rol Administrador de importaciones y exportaciones de Cloud Datastore. Sustituye 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 el rol Administrador de Storage en tu segmento. Sustituye 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 eliminas la cuenta de servicio predeterminada de App Engine, tu aplicación de App Engine perderá el acceso a tu base de datos de Firestore. Si has inhabilitado tu cuenta de servicio de App Engine, puedes volver a habilitarla. Consulta cómo habilitar una cuenta de servicio. Si has eliminado tu cuenta de servicio de App Engine en los últimos 30 días, puedes restaurarla. Consulta cómo restaurar una cuenta de servicio.
Probar la tarea de Cloud Scheduler y la función de Cloud
Puedes probar tu tarea de Cloud Scheduler en la página Cloud Scheduler de la consola de Google Cloud .
Ve a la página Cloud Scheduler de la consola de Google Cloud .
Ir a Cloud SchedulerEn la fila de la nueva tarea de Cloud Scheduler, haz clic en Ejecutar ahora.
Al cabo de unos segundos, el trabajo de Cloud Scheduler debería actualizar la columna Resultado a Éxito y la columna Ú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 la tarea ha llamado a tu función de Cloud. Abre la página de Cloud Functions para ver los registros de tu función.
Ver los registros de la función de Cloud
Para ver si Cloud Functions ha iniciado correctamente una operación de exportación, abre los registros de la función:
Consola de Firebase
Ve a la página Funciones de Cloud Run de la consola de Firebase.
Consola de GCP
Ve a la página Funciones de Cloud Run de la Google Cloud consola.
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 Gestión de operaciones de exportación e importación.
Una vez que se haya completado una operación de exportación, podrá ver los archivos de salida en su segmento de Cloud Storage:
Abrir el navegador de Cloud Storage