Spostare dati tra progetti

Questa pagina descrive come utilizzare le funzionalità di importazione ed esportazione gestite per spostare i dati di Firestore da un progetto all'altro. Questa operazione può essere utile per configurare un ambiente di sviluppo o nell'ambito della 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 importarli in un progetto di destinazione. Lo spostamento di dati tra progetti prevede i seguenti passaggi:

  1. Crea un bucket Cloud Storage per contenere i dati del progetto di origine.
  2. Esporta i dati dal progetto di origine al bucket.
  3. Concedi al progetto di destinazione l'autorizzazione per leggere dal bucket.
  4. 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à:

  1. 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.
  2. Assicurati che il tuo account disponga delle autorizzazioni IAM necessarie autorizzazioni nel progetto di origine progetto di destinazione. Se sei il proprietario di entrambi i progetti, il tuo account dispone delle autorizzazioni necessarie. In caso contrario, i seguenti ruoli IAM grantono le autorizzazioni necessarie per le operazioni di esportazione e importazione di Firestore:

    Owner, Cloud Datastore Owner o Cloud Datastore Import Export Admin

    Un proprietario del progetto può concedere uno di questi ruoli seguendo le passi in Concedi l'accesso.

  3. Configura lo strumento a riga di comando gcloud e connettiti al tuo progetto in uno dei seguenti modi:

  4. 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.

Esportare i dati dal progetto di origine

Esporta i dati creando un bucket Cloud Storage per i file di esportazione di Firestore e avviando 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 la impostazione della posizione 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. Le operazioni di esportazione di Firestore utilizzano questo account di servizio predefinito per autorizzare le operazioni sui bucket Cloud Storage. 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:

Avvia 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.

(Facoltativo) Disattiva le operazioni di scrittura

Se l'app continua a scrivere nel database durante l'esecuzione di un'operazione di esportazione, potresti non acquisire tutte le scritture nei file di esportazione. Per esportare i dati da uno stato coerente, disattiva le scritture nel database aggiornando le regole di sicurezza e interrompendo eventuali operazioni dell'SDK Admin.

  1. 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
        }
      }
    
  2. Interrompi le scritture dagli SDK Admin

    Le regole di sicurezza non bloccano le scritture provenienti da ambienti di server privilegiati creati utilizzando un SDK Firebase Admin o una libreria client di server Google Cloud. Assicurati di interrompere le operazioni di scrittura dai server di amministrazione spegnendo o aggiornando i server.

Avvia un'operazione di esportazione

Usa il comando gcloud firestore export per eseguire l'esportazione 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
Esportare raccolte specifiche
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Prendi nota di outputURIPrefix dell'operazione di esportazione che utilizzerai in un secondo momento. 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 posizione del bucket di origine è diversa dalla posizione di Firestore del progetto di destinazione, devi spostare i file di dati in un bucket Cloud Storage nella stessa posizione del 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:

Avvia 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 sia configurato gcloud per il progetto corretto:

gcloud config set project [DESTINATION_PROJECT_ID]

Utilizza il comando gcloud firestore import per importare i dati nel 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

Quando è in corso l'operazione di esportazione, puoi utilizzare firestore operations list per visualizzare l'avanzamento dell'operazione:

gcloud firestore operations list