Spostare dati tra progetti
In questa pagina viene descritto come utilizzare le funzionalità di importazione ed esportazione gestite per spostare i dati Firestore da una progetto a un altro. Può essere utile per configurare un ambiente di sviluppo o nell'ambito della migrazione definitiva di un'app a un altro progetto. L'esempio in questa pagina mostra come esportare i dati da un progetto di origine e poi importarli in un progetto di destinazione. Spostamento dei dati tra i progetti sono previsti i seguenti passaggi:
- Creare un bucket Cloud Storage in cui inserire i dati del progetto di origine.
- Esporta i dati dal progetto di origine nel bucket.
- Concedi al progetto di destinazione l'autorizzazione di lettura 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 la le seguenti attività:
- Abilita la fatturazione sia per il progetto di origine sia per il progetto di destinazione. Solo Google Cloud I progetti 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 dei requisiti richiesti autorizzazioni. In caso contrario, i seguenti ruoli IAM concedi le autorizzazioni necessarie per Firestore le operazioni di esportazione e importazione:
Owner
,Cloud Datastore Owner
oCloud Datastore Import Export Admin
Un proprietario del progetto può concedere uno di questi ruoli seguendo le passi in Concedi l'accesso.
-
Configura lo strumento a riga di comando
gcloud
e connettiti al tuo 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 tra i progetti di origine e di destinazione. Gli indici devono essere configurati per evitare di dover elaborare ogni documento più volte.
Esporta i dati dal progetto di origine
Esporta i dati creando un bucket Cloud Storage per Firestore esporta i file e avvia un'operazione di esportazione.
Crea un bucket Cloud Storage
Crea un Bucket Cloud Storage nella stessa località di Firestore per configurare un database. Per visualizzare la posizione del database, consulta l'impostazione di località del progetto. Non puoi utilizzare un bucket Chiedi al richiedente di pagare 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
. Firestore
le operazioni di esportazione usano questo account di servizio predefinito per autorizzare Cloud Storage
delle operazioni del bucket. Per assegnare
l'accesso all'account di servizio predefinito al bucket di origine, concedigli il
Storage Admin
ruolo.
Puoi concedere questo ruolo con il
Strumento gsutil
disponibili 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 la tua app continua a scrivere sul database mentre esegui un'esportazione potresti non acquisire tutte queste scritture nei file di esportazione. A esporta i dati da uno stato coerente, disabilita le scritture sul database aggiornando le regole di sicurezza e l'interruzione delle operazioni dell'SDK Admin.
Aggiorna le regole di sicurezza
Nel file Firestore Scheda Regole della console, aggiorna le regole di sicurezza del progetto di origine scrive. 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 } }
Interrompi le scritture dagli SDK amministrativi
Le regole di sicurezza non interrompono le scritture provenienti dai server con privilegi ambienti creati utilizzando un amministratore Firebase SDK o un Google Cloud Client server Raccolta. Assicurati di interrompere le operazioni di scrittura dai server di amministrazione l'arresto o l'aggiornamento dei server.
Avvia un'operazione di esportazione
Usa il comando gcloud firestore export
per eseguire l'esportazione
dal progetto di origine. Puoi esportare tutti i tuoi 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
- Esportare 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, poiché lo utilizzerai in seguito. Per impostazione predefinita, Firestore aggiunge un prefisso 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 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 Firestore e avvia un'operazione di importazione.
Concedi al progetto di destinazione l'accesso ai tuoi file di dati
Prima di poter iniziare un'operazione di importazione, è necessario assicurati che il progetto di destinazione possa accedere a Firestore di archiviazione dei dati.
Sposta i file di dati in un bucket locale
Se la località del bucket di origine è diversa dalla località Località Firestore del progetto di destinazione, devi spostare i tuoi file di dati in un bucket Cloud Storage nella località come progetto di destinazione.
Sposta i file di dati in un altro bucket Cloud Storage seguendo la procedura descritta in Spostamento e rinominazione 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 fornire all'account di servizio predefinito del progetto di destinazione l'accesso al bucket di origine. La
l'account di servizio predefinito è denominato
[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com
. Per
dare al service account predefinito l'accesso al bucket di origine, concedigli le
autorizzazioni appropriate per accedere al bucket.
Puoi concedere i ruoli necessari con
Strumento gsutil
disponibili 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.
Avvia un'operazione di importazione
Prima di avviare l'operazione di importazione, assicurati che sia configurato gcloud
per il progetto corretto:
gcloud config set project [DESTINATION_PROJECT_ID]
Utilizza il comando gcloud firestore import
per importare i dati in
del bucket di origine nel progetto di destinazione:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
Dove [EXPORT_PREFIX]
corrisponde al prefisso in 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 firestore operations list
per visualizzare l'avanzamento dell'operazione:
gcloud firestore operations list