Spostare i dati tra i progetti

Questa pagina descrive come utilizzare le funzionalità di importazione ed esportazione gestite per spostare i dati Cloud Firestore da un progetto a un altro. Questa operazione può essere utile per configurare un ambiente di sviluppo o come parte 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 poi importarli in un progetto di destinazione. Lo spostamento dei dati tra i 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 nel bucket.
  3. Concedi al progetto di destinazione l'autorizzazione a leggere dal bucket.
  4. Importa i dati dal bucket nel progetto di destinazione.

Prima di iniziare

Prima di poter utilizzare il servizio di esportazione e importazione gestito, devi completare le seguenti attività:

  1. Abilita la fatturazione sia per il progetto di origine sia per il progetto di destinazione. Solo Google Cloud progetti con la fatturazione abilitata possono utilizzare la funzionalità di esportazione e importazione.
  2. Assicurati che il tuo account disponga delle autorizzazioni Cloud IAM necessarie nel progetto di origine e di destinazione. Se sei proprietario del progetto per entrambi i progetti, il tuo account dispone delle autorizzazioni richieste. autorizzazioni. In caso contrario, i seguenti ruoli Cloud IAM concedono le autorizzazioni necessarie per Cloud Firestore operazioni di esportazione e importazione:

    Owner, Cloud Datastore Owner o Cloud Datastore Import Export Admin

    Un proprietario del progetto può concedere uno di questi ruoli seguendo i passaggi descritti in Concedere 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 compositi devono corrispondere tra i progetti di origine e di destinazione. Gli indici devono essere configurati per primi per evitare di dover elaborare ogni documento più volte.

Esportare i dati dal progetto di origine

Esporta i dati creando un Cloud Storage bucket per i tuoi Cloud Firestore file di esportazione e avviando un'operazione di esportazione.

Creare un Cloud Storage bucket

Crea un Cloud Storage bucket nella stessa località del Cloud Firestore database. Per visualizzare la località del database, consulta l' impostazione della località del progetto. Non puoi utilizzare un bucket con pagamento a carico del richiedente o un bucket rapido per le operazioni di esportazione e importazione.

Se il bucket Cloud Storage non si trova nel progetto di origine, devi concedere al service account predefinito del progetto di origine l'accesso al bucket. Ogni progetto Google Cloud ha un service account predefinito creato automaticamente con il nome PROJECT_ID@appspot.gserviceaccount.com. Cloud Firestore le operazioni di esportazione utilizzano questo service account predefinito per autorizzare Cloud Storage le operazioni del bucket. Per concedere al service account predefinito l'accesso al bucket di origine, concedigli il Storage Admin ruolo.

Puoi concedere questo ruolo con lo gsutil strumento disponibile 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.

Disabilitare le operazioni di scrittura (facoltativo)

Se la tua app continua a scrivere nel database mentre esegui un'operazione di esportazione, potresti non acquisire tutte queste scritture nei file di esportazione. Per esportare i dati da uno stato coerente, disabilita le scritture nel database aggiornando le regole di sicurezza e interrompendo tutte le operazioni dell'SDK Admin.

  1. Aggiorna le regole di sicurezza

    Nella console Firebase, vai alla scheda Database e archiviazione > Firestore > Regole.

    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
        }
      }
    
  2. Interrompi le scritture dagli 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 server Google Cloud. Assicurati di interrompere le operazioni di scrittura dai server di amministrazione spegnendo o aggiornando i server.

Avviare un'operazione di esportazione

Utilizza il comando gcloud firestore export per esportare i dati dal progetto di origine. Puoi esportare tutti i dati o solo gruppi di raccolte specifici. Sostituisci [SOURCE_BUCKET] con il nome del tuo Cloud Storage bucket:

Esporta tutti i dati
gcloud firestore export gs://[SOURCE_BUCKET] --async
Esporta gruppi di raccolte specifici
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async

Prendi nota di outputURIPrefix dell'operazione di esportazione, perché lo utilizzerai in un secondo momento. Per impostazione predefinita, Cloud 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 il comando firestore operations list per visualizzare l'avanzamento dell'operazione:

gcloud firestore operations list

Importare i dati nel progetto di destinazione

Successivamente, concedi al progetto di destinazione l'accesso ai file di dati Cloud 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 Cloud Firestore file di dati.

Spostare i file di dati in un bucket locale

Se la località del bucket di origine è diversa dalla Cloud Firestore località del progetto di destinazione, devi spostare i file di dati in un Cloud Storage bucket nella stessa località del progetto di destinazione.

Sposta i file di dati in un altro Cloud Storage bucket seguendo i passaggi descritti in Spostare e rinominare i bucket. Per tutti i passaggi seguenti, utilizza questo nuovo bucket come [SOURCE_BUCKET].

Concedere al service account del progetto l'accesso al bucket di origine

Se il bucket di origine non si trova nel progetto di destinazione, devi concedere al service account predefinito del progetto di destinazione l'accesso al bucket di origine. Il service account predefinito è denominato [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Per concedere al service account predefinito l'accesso al bucket di origine, concedigli le autorizzazioni appropriate per accedere al bucket.

Puoi concedere i ruoli necessari con lo gsutil strumento disponibile 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 gcloud sia configurato 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

Durante l'esecuzione dell'operazione di esportazione, puoi utilizzare il comando firestore operations list per visualizzare l'avanzamento dell'operazione:

gcloud firestore operations list