Mover dados entre projetos
Nesta página, você verá como usar os recursos gerenciados de importação e exportação para mover dados do 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:
- Criar um bucket do Cloud Storage para armazenar os dados do seu projeto de origem.
- Exportar os dados do projeto de origem para o bucket.
- Dar permissão ao projeto de destino para ler a partir do bucket.
- Importar os dados do bucket 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:
- Ative o faturamento para seu projeto de origem e de destino. Somente projetos do Google Cloud com faturamento ativado podem usar a funcionalidade de exportação e importação.
-
Verifique se a conta tem as permissões necessárias do IAM nos projetos de origem e 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 IAM concedem as permissões necessárias para as operações de exportação e importação do Firestore:
Owner
,Cloud Datastore Owner
ouCloud 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.
-
Configure a ferramenta de linha de comando
gcloud
e use uma das maneiras a seguir para conectar-se ao seu projeto:-
Acesse
gcloud
no Console do Google Cloud usando o Cloud Shell.Verifique se a
gcloud
está configurada para o projeto correto:gcloud config set project [SOURCE_PROJECT_ID]
-
-
Configure índices no seu novo projeto. Os índices compostos precisam corresponder entre os projetos de origem e de destino. Os índices precisam ser configurados primeiro para evitar a necessidade de processar cada documento várias vezes.
Exportar dados do projeto de origem
Para exportar os dados, crie um bucket do Cloud Storage para seus arquivos de exportação do Firestore e inicie uma operação de exportação.
Criar um bucket do Cloud Storage
Crie um bucket do Cloud Storage no mesmo local que o banco de dados do 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 bucket de pagamentos do solicitante para operações de exportação e importação.
Se o bucket do Cloud Storage não estiver no
projeto de origem, será preciso conceder acesso ao bucket
à 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 Firestore usam essa conta de serviço padrão para autorizar as operações de bucket
do Cloud Storage. Para conceder à conta de serviço padrão acesso ao seu intervalo de origem, atribua a ela o papel Storage Admin
.
Para conceder esse papel, use a
ferramenta gsutil
,
disponível no Cloud Shell:
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
Também é possível conceder esse papel no Console do Google Cloud.
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.
Atualize as regras de segurança
Na guia Regras do console do Firestore, atualize as regras de segurança do projeto de origem para negar todas as gravações. 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 } }
Interromper gravações dos SDKs Admins
As regras de segurança não impedem gravações provenientes de ambientes de servidor privilegiados, criados com o SDK Admin do Firebase ou com a 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 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 bucket 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 a operação de exportação outputURIPrefix
, porque você a usará mais tarde. Por padrão, o 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
Use o comando firestore operations list
para visualizar o andamento da execução da operação de exportação:
gcloud firestore operations list
Importar dados para o projeto de destino
Em seguida, conceda ao projeto de destino acesso aos arquivos de dados do 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 Firestore.
Mover arquivos de dados para um intervalo local
Se o local do bucket de origem for diferente do local do projeto de destino no Firestore, será necessário mover seus 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 instruções na página Como renomear e mover buckets.
Nas próximas etapas, use esse novo bucket como o [SOURCE_BUCKET]
.
Conceder à conta de serviço do projeto acesso ao bucket de origem
Se o bucket de origem não estiver no projeto de destino, será preciso conceder ao
bucket de origem acesso à conta de serviço padrão do projeto de destino. A conta de serviço padrão é denominada [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com
. Para
conceder o acesso ao seu bucket de origem à conta de serviço padrão, atribua
as permissões necessárias a ela.
É possível distribuir os papéis necessários com a
gsutil
ferramenta
disponível no Cloud Shell:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
Também é possível conceder esse papel no Console do Google Cloud.
Começar uma operação de importação
Antes de iniciar a operação de importação, verifique se a ferramenta gcloud
está configurada 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
Em que [EXPORT_PREFIX]
corresponde ao prefixo da operação de exportação em outputUriPrefix
. Exemplo:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
Use o comando firestore operations list
para visualizar o andamento da execução da operação de exportação:
gcloud firestore operations list