Mover dados entre projetos

Esta página descreve como usar os recursos gerenciados de importação e exportação para mover dados do Cloud Firestore de um projeto para outro. Isso pode ser útil para configurar um ambiente de desenvolvimento ou como parte da migração permanente de um aplicativo para outro projeto. O exemplo nesta página demonstra como exportar dados de um projeto de origem e depois importar esses dados para um projeto de destino. A movimentação de dados entre projetos envolve as seguintes etapas:

  1. Crie um bucket do Cloud Storage para armazenar os dados do seu projeto de origem.
  2. Exporte os dados do seu projeto de origem para o bucket.
  3. Dê permissão ao projeto de destino para ler o bucket.
  4. Importe os dados do bucket para o projeto de destino.

Antes de você começar

Antes de poder usar o serviço gerenciado de exportação e importação, você deve concluir as seguintes tarefas:

  1. Ative o faturamento para o projeto de origem e para o projeto de destino. Somente projetos do Google Cloud com faturamento ativado podem usar a funcionalidade de exportação e importação.
  2. Verifique se sua conta tem as permissões necessárias do Cloud IAM no projeto de origem e no projeto de destino. Se você for proprietário de ambos os projetos, sua conta terá as permissões necessárias. Caso contrário, os seguintes papéis do Cloud IAM concederão as permissões necessárias para operações de exportação e importação do Cloud Firestore:

    Owner , Cloud Datastore Owner ou Cloud Datastore Import Export Admin

    O proprietário do projeto pode conceder uma dessas funções seguindo as etapas em Conceder acesso .

  3. Configure a ferramenta de linha de comando gcloud e conecte-se ao seu projeto de uma das seguintes maneiras:

  4. Configure índices em seu novo projeto. Os índices compostos devem corresponder entre os projetos de origem e de destino. Os índices devem ser configurados primeiro para evitar a necessidade de processar cada documento várias vezes.

Exportar dados do projeto de origem

Exporte seus dados criando um bucket do Cloud Storage para os arquivos de exportação do Cloud Firestore e iniciando uma operação de exportação.

Crie um intervalo do Cloud Storage

Crie um bucket do Cloud Storage no mesmo local do banco de dados do Cloud Firestore. Para visualizar a localização do seu banco de dados, consulte a configuração de localização do seu projeto . Você não pode usar um bucket de pagamentos do solicitante para operações de exportação e importação.

Se o intervalo do Cloud Storage não estiver no projeto de origem , você deverá conceder acesso ao intervalo à conta de serviço padrão do projeto de origem. Cada projeto do Google Cloud tem uma conta de serviço padrão criada automaticamente com o nome PROJECT_ID @appspot.gserviceaccount.com . As operações de exportação do Cloud Firestore usam essa conta de serviço padrão para autorizar operações de bucket do Cloud Storage. Para conceder à conta de serviço padrão acesso ao seu bucket de origem, conceda a ela a função Storage Admin .

Você pode conceder esse papel com a ferramenta gsutil disponível no Cloud Shell:

Iniciar o Cloud Shell

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\
gs://[BUCKET_NAME]@

Você também pode conceder esse papel no console do Google Cloud .

Desabilitar operações de gravação (opcional)

Se o seu aplicativo continuar gravando no banco de dados enquanto você executa uma operação de exportação, talvez você não capture todas essas gravações nos arquivos de exportação. Para exportar dados de um estado consistente, desative as gravações em seu banco de dados atualizando suas regras de segurança e interrompendo quaisquer operações do SDK Admin.

  1. Atualizar regras de segurança

    Na guia Regras do Cloud Firestore do console, atualize as regras de segurança do projeto de origem para negar todas as gravações. Por exemplo:

      // 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. Interromper gravações de SDKs administrativos

    As regras de segurança não impedem gravações provenientes de ambientes de servidores privilegiados criados usando um Firebase Admin SDK ou uma biblioteca de cliente do Google Cloud Server . Certifique-se de interromper as operações de gravação de seus servidores administrativos, desligando ou atualizando seus servidores.

Iniciar uma operação de exportação

Use o comando gcloud firestore export para exportar dados do seu projeto de origem. Você pode exportar todos os seus dados ou apenas coleções específicas. Substitua [SOURCE_BUCKET] pelo nome do seu intervalo do Cloud Storage:

Exportar todos os dados
gcloud firestore export gs://[SOURCE_BUCKET] --async
Exportar coleções específicas
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Anote o outputURIPrefix da sua operação de exportação, pois você o usará mais tarde. Por padrão, o Cloud Firestore adiciona uma pré-correção aos arquivos de exportação com base em um carimbo de data/hora:

outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418

À medida que a operação de exportação é executada, você pode usar o comando firestore operations list para visualizar o progresso da operação:

gcloud firestore operations list

Importe dados para o projeto de destino

Em seguida, conceda ao projeto de destino acesso aos arquivos de dados do Cloud Firestore e inicie uma operação de importação.

Conceda ao projeto de destino acesso aos seus arquivos de dados

Antes de iniciar uma operação de importação, verifique se o projeto de destino pode acessar os arquivos de dados do Cloud Firestore.

Mova arquivos de dados para um bucket local

Se o local do bucket de origem for diferente do local do Cloud Firestore do projeto de destino, você deverá mover os arquivos de dados para um bucket do Cloud Storage no mesmo local do projeto de destino.

Mova seus arquivos de dados para outro bucket do Cloud Storage seguindo as etapas em Mover e renomear buckets . Para todas as etapas a seguir, use esse novo intervalo como [SOURCE_BUCKET] .

Conceda à conta de serviço do projeto acesso ao bucket de origem

Se o bucket de origem não estiver no projeto de destino, você deverá conceder à conta de serviço padrão do projeto de destino acesso ao bucket de origem. A conta de serviço padrão é chamada [DESTINATION_PROJECT_ID] @appspot.gserviceaccount.com . Para conceder à conta de serviço padrão acesso ao bucket de origem, conceda a ela as permissões adequadas para acessar o bucket.

Você pode conceder os papéis necessários com a ferramenta gsutil disponível no Cloud Shell:

Iniciar o Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

Você também pode conceder esse papel no console do Google Cloud .

Iniciar uma operação de importação

Antes de iniciar a operação de importação, certifique-se de que gcloud esteja configurado para o projeto correto:

gcloud config set project [DESTINATION_PROJECT_ID]

Use o comando gcloud firestore import para importar os dados do bucket de origem para o projeto de destino:

gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async

Onde [EXPORT_PREFIX] corresponde ao pré-fixo no outputUriPrefix da sua operação de exportação. Por exemplo:

gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async

À medida que a operação de exportação é executada, você pode usar o comando firestore operations list para visualizar o progresso da operação:

gcloud firestore operations list