Sposta i dati tra i progetti

Questa pagina descrive come utilizzare le funzionalità di importazione ed esportazione gestite per spostare i dati di Cloud Firestore da un progetto a un altro. Ciò può essere utile per configurare un ambiente di sviluppo o come parte della migrazione permanente di un'app su 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 dei dati tra progetti prevede i seguenti passaggi:

  1. Crea un bucket Cloud Storage per conservare i dati dal tuo progetto di origine.
  2. Esporta i dati dal tuo progetto di origine al bucket.
  3. Concedi al tuo 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, è necessario completare le seguenti attività:

  1. Abilita la fatturazione sia per il progetto di origine che per il progetto di destinazione. Solo i progetti Google Cloud con 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 nel progetto di destinazione. Se sei il proprietario di entrambi i progetti, il tuo account dispone delle autorizzazioni richieste. Altrimenti, i seguenti ruoli Cloud IAM concedono le autorizzazioni necessarie per le operazioni di esportazione e importazione di Cloud Firestore:

    Owner , Cloud Datastore Owner o Cloud Datastore Import Export Admin

    Un proprietario del progetto può concedere uno di questi ruoli seguendo i passaggi in Concedere l'accesso .

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

  4. Imposta gli indici nel tuo nuovo progetto. Gli indici compositi devono corrispondere tra i progetti di origine e di destinazione. Gli indici dovrebbero essere impostati per primi per evitare di dover elaborare ciascun documento più volte.

Esportare i dati dal progetto di origine

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

Crea un bucket Cloud Storage

Crea un bucket Cloud Storage nella stessa posizione del database Cloud Firestore. Per visualizzare la posizione del database, consulta l'impostazione della posizione del progetto . Non è possibile utilizzare un intervallo a carico del richiedente per le operazioni di esportazione e importazione.

Se il tuo bucket Cloud Storage non è nel tuo progetto di origine , devi concedere all'account di servizio predefinito del progetto di origine l'accesso al bucket. Ogni progetto Google Cloud dispone di un account di servizio predefinito creato automaticamente con il nome PROJECT_ID @appspot.gserviceaccount.com . Le operazioni di esportazione di Cloud Firestore utilizzano questo account di servizio predefinito per autorizzare le operazioni del bucket 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:

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 .

Disabilita 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 sul database aggiornando le regole di sicurezza e interrompendo qualsiasi operazione dell'SDK Admin.

  1. Aggiorna le regole di sicurezza

    Nella scheda Regole Cloud Firestore della console, aggiorna le regole di sicurezza del progetto di origine per negare tutte le scritture. Per 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. Interrompere la scrittura dagli SDK di amministrazione

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

Inizia un'operazione di esportazione

Utilizza il comando gcloud firestore export per esportare i dati dal tuo 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
Esporta raccolte specifiche
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Prendi nota outputURIPrefix dell'operazione di esportazione poiché lo utilizzerai in seguito. 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 lo stato di 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 di Cloud 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, devi assicurarti che il progetto di destinazione possa accedere ai file di dati Cloud Firestore.

Sposta i file di dati in un bucket locale

Se la posizione del bucket di origine è diversa dalla posizione Cloud 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 i passaggi in Spostamento e ridenominazione dei bucket . Per tutti i passaggi seguenti, utilizza questo nuovo bucket come [SOURCE_BUCKET] .

Concedi all'account di servizio del progetto l'accesso al tuo bucket di origine

Se il tuo bucket di origine non è nel tuo progetto di destinazione, devi concedere all'account di servizio predefinito del progetto di destinazione l'accesso al tuo 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 adeguate per accedere al bucket.

Puoi concedere i ruoli necessari con lo strumento gsutil 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 .

Inizia un'operazione di importazione

Prima di iniziare 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 outputUriPrefix dell'operazione di esportazione. Per 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 lo stato di avanzamento dell'operazione:

gcloud firestore operations list