Questa pagina descrive come pianificare le esportazioni dei dati di 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 di dati gestite, devi completare le seguenti attività:
- Abilita la fatturazione per il tuo progetto Google Cloud. Solo i progetti Google Cloud con la fatturazione abilitata possono utilizzare la funzionalità di esportazione e importazione.
- Le operazioni di esportazione richiedono un bucket Cloud Storage di destinazione. Crea un Cloud Storagebucket in una posizione vicina alla posizione del tuo database Cloud Firestore. Non puoi utilizzare un bucket con pagamenti a carico del richiedente per le operazioni di esportazione.
Crea una funzione Cloud e un job Cloud Scheduler
Segui i passaggi riportati di seguito per creare una funzione Cloud Functions Node.js che avvia un'esportazione di dati Cloud Firestore e un job Cloud Scheduler per chiamare la funzione:
Interfaccia a riga di comando di Firebase
-
Installa la Firebase CLI. In una nuova directory, inizializza la CLI per Cloud Functions:
firebase init functions --project PROJECT_ID
- Seleziona JavaScript come lingua.
- (Facoltativo) Attiva ESLint.
- Inserisci
yper installare le dipendenze.
-
Sostituisci il codice nel file
functions/index.jscon il seguente: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'); }); });
-
Nel codice precedente, modifica quanto segue:
- Sostituisci
BUCKET_NAMEcon il nome del tuo bucket. - Sostituisci
YOUR_PROJECT_IDcon l'ID del tuo progetto. - Modifica
every 24 hoursper impostare la pianificazione dell'esportazione. Utilizza la sintassi cron.yaml di App Engine o il formato cron di Unix (* * * * *). -
Modifica
collectionIds: []per esportare solo i gruppi di raccolte specificati. Lascia invariato per esportare tutti i gruppi di raccolte.
- Sostituisci
-
Esegui il deployment della funzione pianificata:
firebase deploy --only functions
Console Google Cloud
Crea una funzione Cloud
-
Vai alla pagina Cloud Functions nella console Google Cloud:
- Fai clic su Scrivi una funzione.
- Inserisci un nome funzione, ad esempio
firestore-export. - In Trigger, seleziona Cloud Pub/Sub.
- Nella sezione Argomento, seleziona Crea nuovo argomento. Inserisci un nome per
l'argomento Pub/Sub, ad esempio
initiateFirestoreExport. Prendi nota del nome dell'argomento perché ti servirà per creare il job Cloud Scheduler. - In Codice sorgente, seleziona Editor incorporato. Inserisci il
seguente codice in
index.js: Nel codice riportato sopra, modifica quanto segue: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 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); }); };
- Sostituisci
BUCKET_NAMEcon il nome del tuo bucket. -
Modifica
collectionIds: []per esportare solo i gruppi di raccolte specificati. Lascia invariato per esportare tutti i gruppi di raccolte.
- Sostituisci
- In
package.json, aggiungi la seguente dipendenza:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - In Funzione da eseguire, inserisci
scheduledFirestoreExport, il nome della funzione inindex.js. - Fai clic su Crea per eseguire il deployment della funzione Cloud Functions.
Crea un job Cloud Scheduler
A questo punto, crea un job Cloud Scheduler che chiama la tua funzione Cloud Functions:
-
Vai alla pagina Cloud Scheduler nella console Google Cloud:
- Fai clic su Crea job.
- Inserisci un Nome per il job, ad esempio
scheduledFirestoreExport. - Inserisci una Frequenza, ad esempio
every 24 hours. - Seleziona un fuso orario.
- In Target, seleziona Pub/Sub. Nel campo Argomento,
inserisci il nome dell'argomento Pub/Sub che hai definito insieme alla tua
funzione Cloud,
initiateFirestoreExportnell'esempio precedente. - Nel campo Payload, inserisci
start export. Il job richiede un payload definito, ma la funzione Cloud Functions precedente non utilizza effettivamente questo valore. - Fai clic su Crea.
Configurare i permessi di accesso
Successivamente, autorizza Cloud Function ad avviare le operazioni di esportazione e a scrivere nel bucket GCS.
Questa funzione Cloud utilizza l'account di servizio predefinito del progetto per autenticare e autorizzare le operazioni di esportazione. Quando crei un progetto, viene creato un account di servizio predefinito con il seguente nome:
PROJECT_ID@appspot.gserviceaccount.com
Questo account di servizio richiede l'autorizzazione per avviare un'operazione di esportazione e per scrivere nel bucket Cloud Storage. Per concedere queste autorizzazioni, assegnare i seguenti ruoli IAM all'account di servizio predefinito:
Cloud Datastore Import Export Admin-
Ruolo
OwneroStorage Adminnel bucket
Per assegnare questi ruoli, puoi utilizzare gli strumenti da riga di comando gcloud e gsutil.
Se non sono già installati, puoi accedere a questi strumenti da Cloud Shell nella console Google Cloud:
Avvia Cloud Shell
-
Assegna il ruolo Cloud Datastore Import Export Admin. Sostituisci PROJECT_ID ed esegui il seguente comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
Assegna il ruolo di Amministratore di archiviazione al tuo bucket. Sostituisci PROJECT_ID e BUCKET_NAME ed esegui il seguente comando:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
Se disabiliti o elimini il tuo account di servizio predefinito App Engine, la tua app App Engine perderà l'accesso al tuo database Cloud Firestore. Se hai disattivato il service account App Engine, puoi riattivarlo. Consulta la sezione Abilitare un service account. Se hai eliminato il tuo account di servizio App Engine negli ultimi 30 giorni, puoi ripristinarlo; consulta la sezione Ripristino dell'eliminazione di un account di servizio.
Metti alla prova il tuo lavoro Cloud Scheduler e Cloud Function
Puoi testare il job Cloud Scheduler nella pagina Cloud Scheduler della console Google Cloud.
Vai alla pagina Cloud Scheduler nella console Google Cloud.
Vai a Cloud SchedulerNella riga del nuovo job Cloud Scheduler, fai clic su Esegui ora.
Dopo qualche secondo, il job Cloud Scheduler dovrebbe aggiornare la colonna dei risultati a Success (Riuscito) e Last run (Ultima esecuzione) all'ora corrente. Potrebbe essere necessario fare clic su Aggiorna.
La pagina Cloud Scheduler conferma solo che il job ha chiamato la tua funzione Cloud Functions. Apri la pagina Cloud Functions per visualizzare i log della funzione.
Visualizza i log di Cloud Functions
Per verificare se la funzione Cloud ha avviato correttamente un'operazione di esportazione, apri i log della funzione:
Console Firebase
Vai alla pagina Cloud Functions nella console Firebase.
Console di GCP
Vai alla pagina Cloud Functions nella console Google Cloud.
Visualizzare l'avanzamento dell'esportazione
Puoi utilizzare il comando gcloud firestore operations list per visualizzare lo stato di avanzamento delle operazioni di esportazione. Per maggiori informazioni, consulta Gestione delle operazioni di esportazione e importazione.
Una volta completata un'operazione di esportazione, puoi visualizzare i file di output nel bucket Cloud Storage: