Questa pagina descrive come pianificare le esportazioni dei dati 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 gestiti, è necessario completare le seguenti attività:
- 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 posizione vicino alla posizione del database Cloud Firestore . Non è possibile utilizzare un intervallo a carico del richiedente per le operazioni di esportazione.
Crea una funzione Cloud e un lavoro Cloud Scheduler
Segui i passaggi seguenti per creare una funzione Cloud Node.js che avvia un'esportazione di dati Cloud Firestore e un processo Cloud Scheduler per chiamare tale funzione:
CLI di Firebase
Installa la CLI Firebase . In una nuova directory, inizializza la CLI per Cloud Functions:
firebase init functions --project PROJECT_ID
- Seleziona JavaScript per la lingua.
- Facoltativamente, abilitare ESLint.
- Immettere
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 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
Distribuire la funzione pianificata:
firebase deploy --only functions
Console GCP
Creare una funzione cloud
Vai alla pagina Cloud Functions nella console GCP:
- Fare clic su Crea funzione
- Immettere un nome di funzione come
firestoreExport
- In Trigger selezionare Cloud Pub/Sub
- In Argomento , seleziona Crea nuovo argomento . Immettere un nome per l'argomento pub/sub, ad esempio
initiateFirestoreExport
. Prendi nota del nome dell'argomento perché ti serve per creare il tuo lavoro Cloud Scheduler. - In Codice sorgente , seleziona Editor in linea . 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 sopra, modificare 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
aggiungere 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 distribuire la Funzione Cloud.
Crea un lavoro di pianificazione cloud
Successivamente, crea un processo Cloud Scheduler che chiama la tua Cloud Function:
Vai alla pagina Cloud Scheduler nella console GCP:
- Fare clic su Crea lavoro .
- Immettere un nome per il lavoro, 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 Cloud Function,
initiateFirestoreExport
nell'esempio precedente. - Nel campo Payload , inserisci
start export
. Il lavoro richiede un payload definito, ma la funzione Cloud di cui sopra in realtà non utilizza questo valore. - Fare clic su Crea .
Configurare i permessi di accesso
Successivamente, concedi a Cloud Function l'autorizzazione per avviare le operazioni di esportazione e per scrivere nel tuo bucket GCS.
Questa funzione Cloud utilizza l'account di servizio predefinito del tuo 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'operazione di esportazione e per 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 da 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 di Google Cloud Platform:
Avvia Cloud Shell
Assegna il ruolo di amministratore import-export di Cloud Datastore . Sostituisci PROJECT_ID ed esegui il comando seguente:
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 comando seguente:
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, la tua app App Engine perderà l'accesso al database Cloud Firestore. Se hai disabilitato il tuo account di servizio App Engine, puoi riabilitarlo, vedi Abilitazione di un account di servizio . Se hai eliminato il tuo account di servizio App Engine negli ultimi 30 giorni, puoi ripristinarlo, consulta Annullamento dell'eliminazione di un account di servizio .
Metti alla prova il tuo lavoro Cloud Scheduler e Cloud Function
Puoi testare il tuo lavoro Cloud Scheduler nella pagina Cloud Scheduler della console di Google Cloud Platform.
Vai alla pagina Cloud Scheduler nella console GCP.
Vai a Pianificazione cloudNella riga relativa al nuovo processo Cloud Scheduler, fai clic su Esegui ora .
Dopo alcuni secondi, il processo Cloud Scheduler dovrebbe aggiornare la colonna dei risultati su Successo e Ultima esecuzione sull'ora corrente. Potrebbe essere necessario fare clic su Aggiorna .
La pagina Cloud Scheduler conferma solo che il lavoro ha chiamato la tua Cloud Function. Apri la pagina Cloud Function per visualizzare i log della tua funzione.
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.
Console GCP
Vai alla pagina Cloud Functions nella console GCP.
Visualizza l'avanzamento dell'esportazione
Puoi utilizzare il comando gcloud firestore operations list
per visualizzare lo stato di avanzamento delle operazioni di esportazione, vedere gestione delle operazioni di esportazione e importazione .
Una volta completata un'operazione di esportazione, puoi visualizzare i file di output nel bucket Cloud Storage:
Apri il browser di archiviazione cloud