Pianificare le esportazioni dei dati

In questa pagina viene descritto come pianificare le esportazioni dei Cloud Firestore. Per eseguire le esportazioni in base a una pianificazione, ti consigliamo di utilizzare Cloud Functions e Cloud Scheduler.

Prima di iniziare

Prima di pianificare le esportazioni dei dati gestite, devi completare le seguenti attività:

  1. Attiva per il tuo progetto Google Cloud. Solo i progetti Google Cloud con la fatturazione abilitata possono utilizzare la funzionalità di esportazione e importazione.
  2. Le operazioni di esportazione richiedono un bucket Cloud Storage di destinazione. Crea un bucket Cloud Storage in una località vicino i tuoi Cloud Firestore località del database. Non puoi utilizzare un bucket per i pagamenti a carico del richiedente per l'esportazione operazioni aziendali.

Crea una funzione Cloud Functions e un job Cloud Scheduler

Segui questi passaggi per creare una Cloud Function Node.js che avvia un'esportazione di dati Cloud Firestore e un job Cloud Scheduler per chiamare questa funzione:

interfaccia a riga di comando di Firebase
  1. Installa l'interfaccia a riga di comando di Firebase. In una nuova directory, inizializza l'interfaccia a riga di comando per Cloud Functions:

    firebase init functions --project PROJECT_ID
    1. Seleziona JavaScript per la lingua.
    2. Se vuoi, abilita ESLint.
    3. Inserisci y per installare le dipendenze.
  2. Sostituisci il codice nel file functions/index.js con quanto segue:

    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. Nel codice riportato sopra, modifica quanto segue:
    • Sostituisci BUCKET_NAME con il nome del bucket.
    • Modifica every 24 hours per impostare la pianificazione dell'esportazione. Utilizza la sintassi cron.yaml di App Engine o il formato unix-cron (* * * * *).
    • Modifica collectionIds: [] per esportare solo i gruppi di raccolte specificati. Lascia invariato per esportare tutte le raccolte.

  4. Esegui il deployment della funzione pianificata:

    firebase deploy --only functions
Console Google Cloud
Crea una funzione Cloud
  1. Vai alla pagina Cloud Functions nella console Google Cloud:

    Vai a Cloud Functions

  2. Fai clic su Crea funzione
  3. Inserisci un nome per la funzione, ad esempio firestoreExport
  4. In Trigger, seleziona Cloud Pub/Sub
  5. In Argomento, seleziona Crea nuovo argomento. Inserisci un nome per l'argomento Pub/Sub, ad esempio initiateFirestoreExport. Prendi nota del nome dell'argomento ti servirà per creare il tuo job Cloud Scheduler.
  6. In Codice sorgente, seleziona Editor incorporato. Inserisci il seguente codice sotto 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);
        });
    };
    Nel codice riportato sopra, modifica quanto segue:
    • Sostituisci BUCKET_NAME con il nome del tuo di sincronizzare la directory di una VM con un bucket.
    • Modifica collectionIds: [] per esportare solo i gruppi di raccolte specificati. Lascia invariato per esportare tutte le raccolte.

  7. In package.json, aggiungi la seguente dipendenza:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. In Funzione da eseguire, inserisci scheduledFirestoreExport, il nome della funzione in index.js.
  9. Fai clic su Crea per eseguire il deployment della Cloud Function.
Crea un job Cloud Scheduler

A questo punto, crea un job Cloud Scheduler che chiami la tua funzione Cloud Functions:

  1. Nella console Google Cloud, vai alla pagina Cloud Scheduler:

    Vai a Cloud Scheduler

  2. Fai clic su Crea job.
  3. Inserisci un nome per il job, ad esempio scheduledFirestoreExport.
  4. Inserisci un valore per Frequenza, ad esempio every 24 hours.
  5. Seleziona un Fuso orario.
  6. In Target, seleziona Pub/Sub. Nel campo Argomento, inserisci il nome dell'argomento Pub/Sub definito accanto Cloud Function Functions, initiateFirestoreExport nell'esempio in alto.
  7. Nel campo Payload, inserisci start export. Il job richiede un payload definito, ma la funzione Cloud sopra riportata non utilizza effettivamente questo valore.
  8. Fai clic su Crea.
di Gemini Advanced. A questo punto, hai eseguito il deployment della funzione Cloud Functions e di Cloud Scheduler un job, ma la tua Cloud Function ha bisogno delle autorizzazioni di accesso per l'esecuzione operazioni di esportazione.

Configurare le autorizzazioni di accesso

Successivamente, concedi alla Cloud Function l'autorizzazione per avviare l'esportazione operazioni e scrivere nel bucket GCS.

Questa funzione Cloud Functions utilizza l'account di servizio predefinito del progetto per autenticare e autorizzare le operazioni di esportazione. Quando crei un progetto, viene creato per te un account di servizio predefinito con il seguente nome:

PROJECT_ID@appspot.gserviceaccount.com

Questo account di servizio richiede l'autorizzazione per avviare un'esportazione e scrivere nel bucket Cloud Storage. Per concedere questi di servizio, assegna i seguenti ruoli IAM all'account di servizio predefinito:

  • Cloud Datastore Import Export Admin
  • Ruolo Owner o Storage Admin nel bucket

Puoi usare le righe di comando gcloud e gsutil strumenti per assegnare questi ruoli.

Se non l'hai già installata, puoi accedere a questi di Cloud Shell nella console Google Cloud:
Avvia Cloud Shell

  1. Assegna il ruolo Amministratore importazione ed esportazione di Cloud Datastore. Sostituisci PROJECT_ID ed esegui questo comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
  2. Assegna il ruolo Storage Admin al tuo bucket. Sostituisci PROJECT_ID e BUCKET_NAME ed esegui questo comando :

    gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \
        gs://BUCKET_NAME

Se disabiliti o elimini il tuo account di servizio predefinito di App Engine, il tuo App Engine app perderà l'accesso al tuo database Cloud Firestore. Se hai disattivato il tuo account di servizio App Engine, puoi riattivarlo. consulta l'articolo sull'attivazione di un account di servizio. Se hai eliminato il tuo account di servizio App Engine negli ultimi 30 giorni: puoi ripristinare l'account di servizio, annullare l'eliminazione di un account di servizio.

Testa il job Cloud Scheduler e la funzione Cloud Functions

Puoi testare il tuo job Cloud Scheduler nella pagina Cloud Scheduler di la console Google Cloud.

  1. Vai alla pagina Cloud Scheduler nella console Google Cloud.
    Vai a Cloud Scheduler

  2. Nella riga del nuovo job Cloud Scheduler, fai clic su Esegui ora.

    Dopo alcuni secondi, il job Cloud Scheduler dovrebbe aggiornare il risultato colonna Success e Ultima esecuzione fino all'ora attuale. Potresti aver bisogno per fare clic su Aggiorna.

La pagina Cloud Scheduler conferma solo che il job ha chiamato la tua funzione Cloud. Apri la pagina della funzione Cloud per visualizzare i relativi log.

Visualizza i log di Cloud Functions

Per verificare se la Cloud Function ha avviato correttamente un'operazione di esportazione, apri i log della funzione:

Console Firebase

Vai alla pagina Cloud Functions nella console Firebase.

Vai a Log delle funzioni

Console di GCP

Vai alla pagina Cloud Functions nella console Google Cloud.

Vai al visualizzatore log

Visualizzare l'avanzamento dell'esportazione

Puoi utilizzare il comando gcloud firestore operations list per visualizzare l'avanzamento delle operazioni di esportazione, gestione delle operazioni di esportazione e importazione.

Al termine di un'operazione di esportazione, puoi visualizzare i file di output Cloud Storage bucket:

Apri il browser Cloud Storage