Sposta i dati tra progetti
Questa pagina descrive come utilizzare le funzionalità di importazione ed esportazione gestite per spostare i dati Firestore da un progetto all'altro. Ciò può essere utile per configurare un ambiente di sviluppo o per eseguire la migrazione permanente di un'app a un altro progetto. L'esempio in questa pagina mostra come esportare i dati da un progetto di origine e quindi importarli in un progetto di destinazione. Lo spostamento di dati tra progetti prevede i seguenti passaggi:
- Crea un bucket Cloud Storage per conservare i dati del progetto di origine.
- Esporta i dati dal progetto di origine nel bucket.
- Concedi al progetto di destinazione l'autorizzazione a leggere dal bucket.
- Importa i dati dal bucket nel progetto di destinazione.
Prima di iniziare
Prima di poter utilizzare il servizio gestito di esportazione e importazione, devi completare le attività seguenti:
- Abilita la fatturazione sia per il progetto di origine sia per il progetto di destinazione. Solo i progetti Google Cloud con fatturazione abilitata possono utilizzare la funzionalità di esportazione e importazione.
-
Assicurati che il tuo account disponga delle autorizzazioni IAM necessarie nel progetto di origine e nel progetto di destinazione. Se sei proprietario di entrambi i progetti, il tuo account dispone delle autorizzazioni necessarie. In caso contrario, i seguenti ruoli IAM concedono le autorizzazioni necessarie per le operazioni di esportazione e importazione di Firestore:
Owner
,Cloud Datastore Owner
oCloud Datastore Import Export Admin
Un proprietario del progetto può concedere uno di questi ruoli seguendo i passaggi in Concedi l'accesso.
-
Configura lo strumento a riga di comando
gcloud
e connettiti al progetto in uno dei seguenti modi:-
Accedi a
gcloud
dalla console Google Cloud utilizzando Cloud Shell.Assicurati che
gcloud
sia configurato per il progetto corretto:gcloud config set project [SOURCE_PROJECT_ID]
-
-
Configura gli indici nel nuovo progetto. Gli indici composti devono corrispondere nei progetti di origine e di destinazione. Gli indici devono essere configurati per primi per evitare di dover elaborare ogni documento più volte.
Esporta i dati dal progetto di origine
Esporta i tuoi dati creando un bucket Cloud Storage per i tuoi file di esportazione Firestore e avviando un'operazione di esportazione.
crea un bucket Cloud Storage
Crea un bucket Cloud Storage nella stessa posizione del tuo database Firestore. Per visualizzare la posizione del database, consulta le impostazioni di località del progetto. Non puoi utilizzare un bucket Pagamenti a carico del richiedente per le operazioni di esportazione e importazione.
Se il bucket Cloud Storage non si trova nel progetto di origine, devi concedere all'account di servizio predefinito del progetto di origine l'accesso al bucket. Ogni progetto Google Cloud ha un account di servizio predefinito creato automaticamente con il nome PROJECT_ID@appspot.gserviceaccount.com
. Le operazioni di esportazione di Firestore utilizzano questo account di servizio predefinito per autorizzare le operazioni dei bucket di Cloud Storage. Per concedere all'account di servizio predefinito l'accesso al bucket di origine, concedigli il ruolo Storage Admin
.
Puoi concedere questo ruolo con lo strumento gsutil
disponibile in Cloud Shell:
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
Puoi anche concedere questo ruolo nella console Google Cloud.
Disabilita operazioni di scrittura (facoltativo)
Se l'app continua a scrivere nel database mentre esegui un'operazione di esportazione, potresti non acquisire tutte le scritture nei file di esportazione. Per esportare i dati da uno stato coerente, disabilita le scritture sul database aggiornando le regole di sicurezza e interrompendo qualsiasi operazione di SDK Admin.
Aggiorna le regole di sicurezza
Nella scheda Regole di Firestore della console, aggiorna le regole di sicurezza del progetto di origine per negare tutte le scritture. Ad esempio:
// Deny write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow write: if false; } // Reads do not affect export operations // Add your read rules here } }
Interrompere le scritture da SDK Admin
Le regole di sicurezza non interrompono le scritture provenienti da ambienti server con privilegi creati utilizzando un SDK Firebase Admin o una libreria client di Google Cloud Server. Assicurati di interrompere le operazioni di scrittura dai server di amministrazione arrestando o aggiornando i server.
Avviare un'operazione di esportazione
Usa il comando gcloud firestore export
per esportare
i dati dal progetto di origine. Puoi esportare tutti i dati o solo
raccolte specifiche. Sostituisci [SOURCE_BUCKET]
con il nome del tuo bucket Cloud Storage:
- Esporta tutti i dati
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Esporta raccolte specifiche
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async
Prendi nota del outputURIPrefix
dell'operazione di esportazione, perché utilizzerai in seguito. Per impostazione predefinita, Firestore aggiunge una pre-correzione ai file di esportazione in base a un timestamp:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
Durante l'esecuzione dell'operazione di esportazione, puoi utilizzare il comando firestore operations list
per visualizzare l'avanzamento dell'operazione:
gcloud firestore operations list
Importa i dati nel progetto di destinazione
Successivamente, concedi al progetto di destinazione l'accesso ai file di dati Firestore e avvia un'operazione di importazione.
Concedere al progetto di destinazione l'accesso ai file di dati
Prima di poter avviare un'operazione di importazione, devi assicurarti che il progetto di destinazione possa accedere ai file di dati Firestore.
Sposta i file di dati in un bucket locale
Se la località del bucket di origine è diversa da quella del progetto di destinazione Firestore, devi spostare i file di dati in un bucket Cloud Storage nella stessa località del progetto di destinazione.
Sposta i file di dati in un altro bucket Cloud Storage seguendo i passaggi descritti in Spostamento e ridenominazione dei bucket.
Per tutti i passaggi successivi, utilizza questo nuovo bucket come [SOURCE_BUCKET]
.
Concedi all'account di servizio del progetto l'accesso al bucket di origine
Se il bucket di origine non si trova nel progetto di destinazione, devi concedere all'account di servizio predefinito del progetto di destinazione l'accesso al bucket di origine. L'account di servizio predefinito è denominato [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com
. Per concedere all'account di servizio predefinito l'accesso al bucket di origine, concedigli le autorizzazioni corrette per accedere al bucket.
Puoi concedere i ruoli necessari con lo strumento gsutil
disponibile in Cloud Shell:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
Puoi anche concedere questo ruolo nella console Google Cloud.
Avviare un'operazione di importazione
Prima di avviare l'operazione di importazione, assicurati che gcloud
sia configurato per il progetto corretto:
gcloud config set project [DESTINATION_PROJECT_ID]
Utilizza il comando gcloud firestore import
per importare i dati del bucket di origine nel progetto di destinazione:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
Dove [EXPORT_PREFIX]
corrisponde al precaricamento nell'outputUriPrefix
dell'operazione di esportazione. Ad esempio:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
Durante l'esecuzione dell'operazione di esportazione, puoi utilizzare il comando firestore operations list
per visualizzare l'avanzamento dell'operazione:
gcloud firestore operations list