Ir para o console

Mover dados entre projetos

Veja nesta página 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 app para outro projeto. O exemplo nesta página demonstra como exportar dados de um projeto de origem e, em seguida, como importar esses dados para um projeto de destino. Para mover dados entre projetos é necessário seguir as seguintes etapas:

  1. Criar um intervalo do Cloud Storage para armazenar os dados do seu projeto de origem.
  2. Exportar os dados do projeto de origem para o intervalo.
  3. Dar permissão ao projeto de destino para ler a partir do intervalo.
  4. Importar os dados do intervalo para o projeto de destino.

Antes de começar

Antes de usar o serviço gerenciado de exportação e importação, é necessário concluir as tarefas a seguir:

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

    Owner, Cloud Datastore Owner ou Cloud Datastore Import Export Admin

    Um proprietário de projeto pode conceder essas funções seguindo as instruções disponíveis na página Como conceder acesso.

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

    • Acesse a ferramenta gcloud no Console do Google Cloud Platform usando o Cloud Shell.

      Iniciar o Cloud Shell

      Verifique se o gcloud está configurado para o projeto correto:

      gcloud config set project [SOURCE_PROJECT_ID]
    • Instale e inicialize o SDK do Google Cloud.

      Adicione o componente gcloud beta se ele ainda não estiver instalado. Ele contém os comandos de exportação e importação do Cloud Firestore:

      gcloud components install beta

Exportar dados do projeto de origem

Para exportar os dados, crie um intervalo do Cloud Storage para seus arquivos de exportação do Cloud Firestore e inicie uma operação de exportação.

Criar um intervalo do Cloud Storage

Crie um intervalo do Cloud Storage no mesmo local do seu banco de dados do Cloud Firestore. Para ver a localização do seu banco de dados, consulte a configuração do local do projeto. Não é possível usar um intervalo 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, será necessário conceder acesso ao intervalo à conta de serviço padrão do projeto de origem. Cada projeto do GCP tem uma conta de serviço padrão criada automaticamente chamada PROJECT_ID@appspot.gserviceaccount.com. As operações de exportação do Cloud Firestore usam essa conta de serviço padrão para autorizar as operações de intervalo do Cloud Storage. Para fornecer acesso ao intervalo de origem à conta de serviço padrão, conceda o papel Storage Admin a ela.

É possível conceder esse papel com a ferramenta gsutil disponível no Cloud Shell:

Iniciar o Cloud Shell

gsutil iam ch serviceAccount:[SOURCE_PROJECT_ID]@appspot.gserviceaccount.com:admin \
gs://[BUCKET_NAME]

Também é possível conceder esse papel no Console do Google Cloud Platform.

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

Se o aplicativo continuar gravando no banco de dados enquanto uma operação de exportação é realizada, 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 no banco de dados ao atualizar as regras de segurança e interromper as operações do SDK Admin.

  1. Atualize as regras de segurança

    Na guia Regras do Cloud Firestore do Console, atualize suas 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 dos SDKs Admins

    As regras de segurança não interrompem gravações de ambientes de servidor privilegiados criados com o SDK Admin do Firebase ou uma biblioteca de cliente de servidor do Google Cloud. Certifique-se de interromper as operações de gravação dos servidores de administração ao desligar ou atualizar seus servidores.

Começar uma operação de exportação

Use o comando gcloud beta firestore export para exportar dados do seu projeto de origem. É possível exportar todos os dados ou apenas conjuntos específicos. Substitua [SOURCE_BUCKET] pelo nome do seu intervalo do Cloud Storage:

Exportar todos os dados
gcloud beta firestore export gs://[SOURCE_BUCKET] --async
Exportar conjuntos específicos
gcloud beta firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async

Anote o outputURIPrefix da sua operação de exportação porque você usará ele mais tarde. Por padrão, o Cloud Firestore adiciona um prefixo aos seus arquivos de exportação com base em um carimbo de data/hora:

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

Enquanto a operação de exportação estiver sendo executada, é possível usar o comando firestore operations list para visualizar o progresso da operação:

gcloud beta firestore operations list

Importar dados para o projeto de destino

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

Conceder ao projeto de destino acesso aos arquivos de dados

Antes de iniciar uma operação de importação, é necessário garantir que seu projeto de destino possa acessar os arquivos de dados do Cloud Firestore.

Mover arquivos de dados para um intervalo local

Se o local do intervalo de origem for diferente do local do projeto de destino no Cloud Firestore, será necessário mover seus arquivos de dados para um intervalo do Cloud Storage no mesmo local do projeto de destino.

Mova seus arquivos de dados para outro intervalo do Cloud Storage seguindo as instruções na página Como mover e renomear intervalos. Nos próximos passos, use esse novo intervalo como [SOURCE_BUCKET].

Conceder à conta de serviço do projeto acesso ao intervalo de origem

Se o intervalo de origem não estiver no projeto de destino, será necessário conceder ao intervalo de origem acesso à conta de serviço padrão do projeto de destino. A conta de serviços padrão é denominada [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. Para fornecer acesso ao intervalo de origem à conta de serviço padrão, conceda o papel Storage Admin a ela.

É possível conceder esse papel com a ferramenta gsutil disponível no Cloud Shell:

Iniciar o Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:storage.admin \
gs://[SOURCE_BUCKET]

Também é possível conceder essa função no Console do GCP.

Começar uma operação de importação

Antes de iniciar a operação de importação, verifique se o gcloud está configurado para o projeto correto:

gcloud config set project [DESTINATION_PROJECT_ID]

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

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

Em que [EXPORT_PREFIX] corresponde ao prefixo na operação de exportação outputUriPrefix. Por exemplo:

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

Enquanto a operação de exportação estiver sendo executada, é possível usar o comando firestore operations list para visualizar o progresso da operação:

gcloud beta firestore operations list