Planifier les exportations de données

Cette page explique comment planifier les exportations de vos données Cloud Firestore. Pour exécuter des exportations selon un planning, nous vous recommandons d'utiliser Cloud Functions et Cloud Scheduler.

Avant que tu commences

Avant de planifier des exportations de données gérées, vous devez effectuer les tâches suivantes :

  1. Activez 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.
  2. Les opérations d'exportation nécessitent un bucket Cloud Storage de destination. Créez un bucket Cloud Storage dans un emplacement proche de l'emplacement de votre base de données Cloud Firestore . Vous ne pouvez pas utiliser un bucket Requester Pay pour les opérations d'exportation.

Créer une fonction Cloud et une tâche Cloud Scheduler

Suivez les étapes ci-dessous pour créer une fonction cloud Node.js qui lance une exportation de données Cloud Firestore et une tâche Cloud Scheduler pour appeler cette fonction :

CLI Firebase
  1. Installez la CLI Firebase . Dans un nouveau répertoire, initialisez la CLI pour Cloud Functions :

    firebase init functions --project PROJECT_ID
    1. Sélectionnez JavaScript pour la langue.
    2. Eventuellement, activez ESLint.
    3. Entrez y pour installer les dépendances.
  2. Remplacez le code dans le fichier functions/index.js par ce qui suit :

    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');
      });
    });
  3. Dans le code ci-dessus, modifiez ce qui suit :
    • Remplacez BUCKET_NAME par le nom de votre compartiment.
    • Modifiez every 24 hours pour définir votre calendrier d'exportation. Utilisez soit la syntaxe AppEngine cron.yaml , soit le format unix-cron ( * * * * * ).
    • Modifiez collectionIds: [] pour exporter uniquement les groupes de collections spécifiés. Laissez tel quel pour exporter toutes les collections.

  4. Déployez la fonction planifiée :

    firebase deploy --only functions
Console GCP
Créer une fonction cloud
  1. Accédez à la page Fonctions Cloud dans la console GCP :

    Accédez aux fonctions cloud

  2. Cliquez sur Créer une fonction
  3. Entrez un nom de fonction tel que firestoreExport
  4. Sous Déclencheur , sélectionnez Cloud Pub/Sub
  5. Sous Sujet , sélectionnez Créer un nouveau sujet . Saisissez un nom pour le sujet pub/sub, tel que initiateFirestoreExport . Notez le nom du sujet car vous en avez besoin pour créer votre tâche Cloud Scheduler.
  6. Sous Code source , sélectionnez Éditeur en ligne . Entrez le code suivant sous 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);
        });
    };
    Dans le code ci-dessus, modifiez ce qui suit :
    • Remplacez BUCKET_NAME par le nom de votre compartiment.
    • Modifiez collectionIds: [] pour exporter uniquement les groupes de collections spécifiés. Laissez tel quel pour exporter toutes les collections.

  7. Sous package.json , ajoutez la dépendance suivante :
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Sous Fonction à exécuter , saisissez scheduledFirestoreExport , le nom de la fonction dans index.js .
  9. 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 :

  1. Accédez à la page Cloud Scheduler dans la console GCP :

    Accédez à Planificateur Cloud

  2. Cliquez sur Créer un travail .
  3. Entrez un nom pour la tâche, tel que scheduledFirestoreExport .
  4. Saisissez une Fréquence , par exemple, every 24 hours .
  5. Sélectionnez un fuseau horaire .
  6. 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.
  7. Dans le champ Payload , saisissez start export . La tâche nécessite une charge utile définie, mais la fonction Cloud ci-dessus n'utilise pas réellement cette valeur.
  8. Cliquez sur Créer .
À ce stade, vous avez déployé votre tâche Cloud Function et Cloud Scheduler, mais votre fonction Cloud a toujours besoin d'autorisations d'accès pour exécuter des opérations d'exportation.

Configurer les autorisations d'accès

Ensuite, accordez à la fonction Cloud l'autorisation de démarrer les opérations d'exportation et d'écrire dans votre compartiment 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 l'autorisation de démarrer une opération d'exportation et d'é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 ou Storage Admin sur le bucket

Vous pouvez utiliser les outils de ligne de commande gcloud et gsutil pour attribuer ces rôles.

S'ils ne sont pas déjà installés, vous pouvez accéder à ces outils depuis Cloud Shell dans la console Google Cloud Platform :
Démarrer Cloud Shell

  1. Attribuez le rôle d'administrateur d'importation et d'exportation Cloud Datastore . Remplacez 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
    
  2. Attribuez le rôle d'administrateur de stockage sur votre compartiment. Remplacez PROJECT_ID et BUCKET_NAME et 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 Cloud Firestore. Si vous avez désactivé votre compte de service App Engine, vous pouvez le réactiver (voir activation d'un compte de service ). Si vous avez supprimé votre compte de service App Engine au cours des 30 derniers jours, vous pouvez restaurer votre compte de service (voir Annuler la suppression d'un compte de service ).

Testez votre tâche Cloud Scheduler et votre fonction Cloud

Vous pouvez tester votre tâche Cloud Scheduler sur la page Cloud Scheduler de la console Google Cloud Platform.

  1. Accédez à la page Cloud Scheduler dans la console GCP.
    Accédez à Planificateur Cloud

  2. Dans la ligne de votre nouvelle tâche Cloud Scheduler, cliquez sur Exécuter maintenant .

    Après quelques secondes, la tâche Cloud Scheduler doit mettre à jour la colonne de résultats sur Succès et Dernière exécution à l'heure actuelle. 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 Cloud Function pour voir les journaux de votre fonction.

Afficher les journaux de la fonction Cloud

Pour voir si la fonction Cloud a démarré avec succès une opération d'exportation, ouvrez les journaux de la fonction :

Console Firebase

Accédez à la page Cloud Functions dans la console Firebase.

Accédez aux journaux de fonctions

Console GCP

Accédez à la page Fonctions Cloud dans la console GCP.

Accédez à la visionneuse de journaux

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 bucket Cloud Storage :

Ouvrez le navigateur Cloud Storage