Planifier les exportations de données
Cette page explique comment planifier des exportations de vos données Firestore. Pour planifier les exportations, nous vous recommandons à l'aide des fonctions Cloud Run et de Cloud Scheduler.
Avant de commencer
Avant de planifier l'exportation des données gérées, vous devez effectuer les tâches suivantes :
- Activer la facturation pour votre projet Google Cloud. Seuls les projets Google Cloud 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éer un bucket Cloud Storage dans un emplacement proche de celui où se trouve votre base de données Cloud Firestore. Vous ne pouvez pas utiliser un bucket Requester Pays pour les opérations d'exportation.
Créer une fonction Cloud et une tâche Cloud Scheduler
Pour créer une fonction Cloud Node.js qui lance les exportations de données Firestore, ainsi qu'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 Fonctions Cloud Run:
firebase init functions --project PROJECT_ID
- Sélectionnez le langage JavaScript.
- Vous pouvez également activer ESLint.
- Saisissez
y
pour installer les dépendances.
-
Remplacez le code du fichier
functions/index.js
par 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 ci-dessus, modifiez les éléments suivants :
- Remplacez
BUCKET_NAME
par le nom de votre bucket. - Modifiez
every 24 hours
pour 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 toutes les 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 de la console Google Cloud:
- Cliquez sur Créer une fonction
- Saisissez un nom de fonction tel que
firestoreExport
- 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 tâche Cloud Scheduler. - Sous Code source, sélectionnez Éditeur intégré. Saisissez le code suivant sous
index.js
: Dans le code ci-dessus, 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) => { 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); }); };
- Remplacez
BUCKET_NAME
par le nom de votre bucket. -
Modifiez
collectionIds: []
pour n'exporter que les groupes de collections spécifiés. Laissez tel quel pour exporter toutes les collections.
- 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 de 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,
initiateFirestoreExport
dans l'exemple ci-dessus. - Dans le champ Charge utile, saisissez
start export
. La tâche demande de définir une charge utile, mais la fonction Cloud ci-dessus 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 fonction Cloud utilise le compte de service par défaut de votre projet pour authentifier et autoriser ses opérations d'exportation. Lorsque vous créez un projet, un compte de service par défaut est créé pour vous avec le nom suivant :
PROJECT_ID@appspot.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 par défaut :
Cloud Datastore Import Export Admin
-
Rôle
Owner
ouStorage Admin
dans le bucket
Vous pouvez utiliser les outils de ligne de commande gcloud
et gsutil
pour attribuer ces rôles.
Si ce n'est pas déjà fait, vous pouvez accéder à ces
depuis Cloud Shell dans la console Google Cloud:
Démarrer Cloud Shell
-
Attribuez le rôle Administrateur des importations et des exportations Cloud Datastore. Remplacez l'élément PROJECT_ID et exécutez la commande suivante :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
Attribuez le rôle Administrateur de l'espace de stockage sur votre bucket. Remplacez les éléments PROJECT_ID et BUCKET_NAME, puis exécutez la commande suivante :
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
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 Firestore. Si vous avez désactivé votre compte de service App Engine, vous pouvez le réactiver, comme décrit dans la section 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 votre fonction Cloud
Vous pouvez tester votre job 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
Accédez à la page Fonctions Cloud Run de la console Firebase.
Console GCP
Accédez à la page Fonctions Cloud Run de 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'exportation terminée, vous pouvez afficher les fichiers de sortie dans votre bucket Cloud Storage :
Ouvrir le navigateur Cloud Storage