Pianificare le esportazioni di dati
In questa pagina viene descritto come pianificare le esportazioni dei dati di Firestore. Per eseguire le esportazioni in base a una pianificazione, consigliamo di usare Cloud Functions e Cloud Scheduler.
Prima di iniziare
Prima di pianificare le esportazioni dei dati gestite, devi completare le attività seguenti:
- Abilita la fatturazione per il tuo progetto Google Cloud. Solo i progetti Google Cloud con fatturazione abilitata possono utilizzare la funzionalità di esportazione e importazione.
- Le operazioni di esportazione richiedono un bucket Cloud Storage di destinazione. Crea un bucket Cloud Storage in una località vicino alla località del tuo database Firestore. Non puoi utilizzare un bucket Pagamenti a carico del richiedente per le operazioni di esportazione.
crea una funzione Cloud Function e un job Cloud Scheduler
Segui i passaggi riportati di seguito per creare una Cloud Function Node.js che avvii un'esportazione di dati Firestore e un job Cloud Scheduler per chiamare questa funzione:
interfaccia a riga di comando di Firebase
-
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
- Seleziona JavaScript come lingua.
- Facoltativamente, abilita ESLint.
- Inserisci
y
per installare le dipendenze.
-
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'); }); });
-
Nel codice riportato sopra, modifica quanto segue:
- Sostituisci
BUCKET_NAME
con il nome del tuo bucket. - Modifica
every 24 hours
per impostare la pianificazione dell'esportazione. Utilizza la sintassi cron.yaml di AppEngine o il formato unix-cron (* * * * *
). -
Modifica
collectionIds: []
per esportare solo i gruppi di raccolte specificati. Lascia così com'è per esportare tutte le 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 Crea funzione
- Inserisci un nome di funzione, ad esempio
firestoreExport
- 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 in base alle tue esigenze per creare il job Cloud Scheduler. - In Codice sorgente, seleziona Editor incorporato. Inserisci il
seguente codice in
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 bucket. -
Modifica
collectionIds: []
per esportare solo i gruppi di raccolte specificati. Lascia così com'è per esportare tutte le raccolte.
- Sostituisci
- In
package.json
, aggiungi la dipendenza seguente:{ "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 Cloud Function.
Crea un job Cloud Scheduler
A questo punto, crea un job Cloud Scheduler che chiami la Cloud Function:
-
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 Destinazione, seleziona Pub/Sub. Nel campo Argomento, inserisci il nome dell'argomento Pub/Sub che hai definito insieme alla Cloud Function,
initiateFirestoreExport
nell'esempio precedente. - Nel campo Payload, inserisci
start export
. Il job richiede un payload definito, ma la Cloud Function indicata sopra non utilizza in realtà questo valore. - Fai clic su Crea.
Configurare le autorizzazioni di accesso
Successivamente, autorizza la Cloud Function ad avviare le operazioni di esportazione e la scrittura nel bucket GCS.
Questa funzione Cloud Functions utilizza l'account di servizio predefinito del tuo progetto per autenticare e autorizzare le relative 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'operazione di esportazione e scrivere nel bucket Cloud Storage. Per concedere queste autorizzazioni, assegna i seguenti ruoli IAM all'account di servizio predefinito:
Cloud Datastore Import Export Admin
-
Ruolo
Owner
oStorage Admin
nel bucket
Puoi utilizzare gli strumenti a riga di comando gcloud
e gsutil
per assegnare questi ruoli.
Se non sono già installati, puoi accedere a questi
strumenti da Cloud Shell nella console Google Cloud:
Avvia Cloud Shell
-
Assegna il ruolo Amministratore esportazione importazione 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
-
Assegna il ruolo Amministratore Storage al 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, l'app App Engine perderà l'accesso al tuo database Firestore. Se hai disabilitato il tuo account di servizio App Engine, puoi riabilitarlo, vedi Abilitazione di un account di servizio. Se hai eliminato l'account di servizio App Engine negli ultimi 30 giorni, puoi ripristinarlo. Consulta l'articolo sull'annullamento dell'eliminazione di un account di servizio.
Testa il job Cloud Scheduler e la 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 di Cloud Scheduler, fai clic su Esegui ora.
Dopo alcuni secondi, il job di Cloud Scheduler dovrebbe aggiornare la colonna dei risultati su Successo e Ultima esecuzione all'ora attuale. Potrebbe essere necessario fare clic su Aggiorna.
La pagina Cloud Scheduler conferma solo che il job denominato funzione Cloud Function. Apri la pagina Cloud Function per visualizzare i log della funzione.
Visualizza i log della funzione Cloud Function
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.
Console di GCP
Vai alla pagina Cloud Functions nella console Google Cloud.
Visualizza avanzamento dell'esportazione
Puoi utilizzare il comando gcloud firestore operations list
per visualizzare l'avanzamento delle operazioni di esportazione. Consulta la pagina relativa alla gestione delle operazioni di esportazione e importazione.
Al termine di un'operazione di esportazione, puoi visualizzare i file di output nel bucket Cloud Storage: