Cette page explique comment planifier des exportations de vos Cloud Firestore données. Pour exécuter des exportations selon une planification, nous vous recommandons d'utiliser Cloud Functions et Cloud Scheduler.
Avant de commencer
Avant de planifier l'exportation des données gérées, vous devez effectuer les tâches suivantes :
- Activez la facturation pour votre Google Cloud projet. Seuls les Google Cloud projets pour lesquels la facturation est activée peuvent utiliser la fonctionnalité d'exportation et d'importation.
- Les opérations d'exportation nécessitent un bucket Cloud Storage de destination. Créez un bucketCloud Storage dans un emplacement proche de l'emplacement Cloud Firestore de votre base de données. Vous ne pouvez pas utiliser un bucket Requester Pays pour les opérations d'exportation.
Créer une fonction Cloud et une Cloud Scheduler tâche
Pour créer une fonction Cloud Node.js qui déclenche une exportation de données Cloud Firestore et une tâche Cloud Scheduler pour appeler cette fonction, procédez comme suit :
CLI Firebase
-
Installez la CLI Firebase. Dans un nouveau répertoire, initialisez la CLI pour Cloud Functions :
firebase init functions --project PROJECT_ID
- Sélectionnez le langage JavaScript.
- Vous pouvez également activer ESLint.
- Saisissez
ypour installer les dépendances.
-
Remplacez le code du fichier
functions/index.jspar le code suivant :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'); }); });
-
Dans le code précédent, modifiez les éléments suivants :
- Remplacez
BUCKET_NAMEpar le nom de votre bucket. - Remplacez
YOUR_PROJECT_IDpar l'ID de votre projet . - Modifiez
every 24 hourspour définir votre calendrier d'exportation. Utilisez la syntaxe AppEngine cron.yaml ou le format unix-cron (* * * * *). -
Modifiez
collectionIds: []pour n'exporter que les groupes de collections spécifiés. Laissez tel quel pour exporter tous les groupes de collections.
- Remplacez
-
Déployez la fonction planifiée :
firebase deploy --only functions
Console Google Cloud
Créer une fonction Cloud
-
Accédez à la page Cloud Functions dans la console Google Cloud :
- Cliquez sur Écrire une fonction.
- Saisissez un nom de fonction tel que
firestore-export. - Sous Déclencheur, sélectionnez Cloud Pub/Sub
- Sous Sujet, sélectionnez Créer un sujet. Saisissez un nom pour
le sujet Pub/Sub, par exemple
initiateFirestoreExport. Notez le nom du sujet car vous en aurez besoin pour créer votre Cloud Scheduler tâche. - Sous Code source, sélectionnez Éditeur intégré. Saisissez le
code suivant sous
index.js: Dans le code précédent, modifiez les éléments suivants :const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { // Access the GCLOUD_PROJECT environment variable set by the runtime. const projectId = process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT; // Use the DATABASE_ID environment variable if set, // otherwise default to '(default)' const databaseId = process.env.DATABASE_ID || '(default)'; const databaseName = client.databasePath( projectId, databaseId ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collection groups // or define a list of collection group IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
- Remplacez
BUCKET_NAMEpar le nom de votre bucket. -
Modifiez
collectionIds: []pour n'exporter que les groupes de collections spécifiés. Laissez tel quel pour exporter tous les groupes de collections. -
(Facultatif) Si vous utilisez une base de données non par défaut, assurez-vous de définir la variable d'environnement
DATABASE_IDlorsque vous créez la fonction Cloud. Si vous utilisez un environnement d'exécution dans lequelGOOGLE_CLOUD_PROJECTn'est pas défini automatiquement, vous devrez peut-être le définir manuellement ou le remplacer par l'ID de votre projet dans le code.
- Remplacez
- Sous
package.json, ajoutez la dépendance suivante :{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - Sous Fonction à exécuter, saisissez
scheduledFirestoreExport, le nom de la fonction dansindex.js. - Cliquez sur Créer pour déployer la fonction Cloud.
Créer une tâche Cloud Scheduler
Ensuite, créez une tâche Cloud Scheduler qui appelle votre fonction Cloud :
-
Accédez à la page Cloud Scheduler dans la console Google Cloud :
- Cliquez sur Créer une tâche.
- Saisissez un Nom pour la tâche, par exemple
scheduledFirestoreExport. - Saisissez une Fréquence, par exemple
every 24 hours. - Sélectionnez un Fuseau horaire.
- Sous Cible, sélectionnez Pub/Sub. Dans le champ Sujet , saisissez le nom du sujet Pub/Sub que vous avez défini à côté de votre fonction Cloud,
initiateFirestoreExportdans l'exemple précédent. - Dans le champ Charge utile, saisissez
start export. La tâche demande de définir une charge utile, mais la fonction Cloud précédente n'utilise pas cette valeur en réalité. - Cliquez sur Créer.
Configurer les autorisations d'accès
Vous devez ensuite attribuer une autorisation à la fonction Cloud pour lancer les opérations d'exportation et écrire dans votre bucket GCS.
Cette Cloud Run fonction utilise un compte de service pour authentifier et autoriser ses opérations d'exportation. Le compte de service utilisé dépend de votre Cloud Functions configuration :
- Cloud Functions (1re génération) : utilise le App Engine compte de service
par défaut
PROJECT_ID@appspot.gserviceaccount.com - Cloud Functions (2e génération) : utilise le compte de service Compute Engine
par défaut :
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ce compte de service nécessite une autorisation pour démarrer une opération d'exportation et pour écrire dans votre bucket Cloud Storage. Pour accorder ces autorisations, attribuez les rôles IAM suivants au compte de service :
Cloud Datastore Import Export Admin- Rôle
Storage Adminsur le bucket Cloud Run Invoker(obligatoire pour Cloud Functions (2e génération) afin d'autoriser le service déclencheur à appeler la fonction)
Vous pouvez utiliser les outils de ligne de commande gcloud et gsutil pour attribuer ces rôles.
Si vous n'avez pas déjà installé ces
outils, vous pouvez y accéder à partir de Cloud Shell dans la console Google Cloud :
Démarrer Cloud Shell
-
Attribuez le rôle Administrateur des importations et des exportations Cloud Datastore. Remplacez PROJECT_ID et SERVICE_ACCOUNT (par exemple,
PROJECT_ID@appspot.gserviceaccount.comouPROJECT_NUMBER-compute@developer.gserviceaccount.com), puis exécutez la commande suivante :gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/datastore.importExportAdmin -
Attribuez le rôle Administrateur de l'espace de stockage sur votre bucket. Remplacez SERVICE_ACCOUNT et BUCKET_NAME, puis exécutez la commande suivante :
gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \ gs://BUCKET_NAME -
(Pour Cloud Functions (2e génération)) Attribuez le Cloud Run Demandeur rôle au compte de service. Remplacez PROJECT_ID et SERVICE_ACCOUNT, puis exécutez la commande suivante :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/run.invoker
Si vous désactivez ou supprimez votre compte de service App Engine par défaut, votre application App Engine perdra l'accès à votre base de données Cloud Firestore. Si vous avez désactivé votre compte de service App Engine, vous pouvez le réactiver, voir Activer un compte de service. Si vous avez supprimé votre compte de service App Engine au cours des 30 derniers jours, vous pouvez le restaurer, comme décrit dans la section Annuler la suppression d'un compte de service.
Tester votre tâche Cloud Scheduler et fonction Cloud
Vous pouvez tester votre tâche Cloud Scheduler sur la page Cloud Scheduler de la console Google Cloud.
Accédez à la page Cloud Scheduler dans la console Google Cloud.
Accéder à Cloud SchedulerDans la ligne de votre nouvelle tâche Cloud Scheduler, cliquez sur Exécuter.
Au bout de quelques secondes, la tâche Cloud Scheduler doit mettre à jour la colonne de résultats à Opération réussie et Dernière exécution à l'heure en cours. Vous devrez peut-être cliquer sur Actualiser.
La page Cloud Scheduler confirme uniquement que la tâche a appelé votre fonction Cloud. Ouvrez la page Fonction Cloud pour afficher les journaux de votre fonction.
Afficher les journaux Cloud Functions
Pour vérifier si la fonction Cloud a correctement démarré une opération d'exportation, ouvrez les journaux de la fonction :
Console Firebase
Dans la console Firebase, accédez à Hébergement et sans serveur > Fonctions.
Console GCP
Accédez à la page Cloud Functions dans la console Google Cloud.
Afficher la progression de l'exportation
Vous pouvez utiliser la commande gcloud firestore operations list pour afficher la
progression de vos opérations d'exportation. Voir
Gestion des opérations d'exportation et d'importation.
Une fois l'opération d'exportation terminée, vous pouvez afficher les fichiers de sortie dans votre Cloud Storage bucket :
Ouvrir l'explorateur Cloud Storage