Mova dados entre projetos
Esta página descreve como usar as funcionalidades de importação e exportação geridas para mover dados do Firestore de um projeto para outro. Isto pode ser útil para configurar um ambiente de desenvolvimento ou como parte da migração permanente de uma app para outro projeto. O exemplo nesta página demonstra como exportar dados de um projeto de origem e, em seguida, importar esses dados para um projeto de destino. A movimentação de dados entre projetos envolve os seguintes passos:
- Crie um contentor do Cloud Storage para armazenar os dados do projeto de origem.
- Exporte os dados do projeto de origem para o contentor.
- Conceda ao projeto de destino autorização para ler a partir do contentor.
- Importe os dados do contentor para o projeto de destino.
Antes de começar
Antes de poder usar o serviço de exportação e importação gerido, tem de concluir as seguintes tarefas:
- Ative a faturação para o projeto de origem e o projeto de destino. Apenas Google Cloud os projetos com a faturação ativada podem usar a funcionalidade de exportação e importação.
-
Certifique-se de que a sua conta tem as autorizações de IAM necessárias no projeto de origem e no projeto de destino. Se for proprietário do projeto de ambos os projetos, a sua conta tem as autorizações necessárias. Caso contrário, as seguintes funções de IAM concedem as autorizaçõ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 do projeto pode conceder uma destas funções seguindo os passos em Conceder acesso.
-
Configure a ferramenta de linha de comandos
gcloud
e ligue-se ao seu projeto de uma das seguintes formas:-
Aceda ao
gcloud
a partir da Google Cloud consola através do Cloud Shell.Certifique-se de que o dispositivo
gcloud
está configurado para o projeto correto:gcloud config set project [SOURCE_PROJECT_ID]
-
-
Configure os índices no seu novo projeto. Os índices compostos devem corresponder entre os projetos de origem e destino. Os índices devem ser configurados primeiro para evitar ter de processar cada documento várias vezes.
Exporte dados do projeto de origem
Exporte os seus dados criando um contentor do Cloud Storage para os seus ficheiros de exportação do Firestore e iniciando uma operação de exportação.
Crie um contentor do Cloud Storage
Crie um contentor do Cloud Storage na mesma localização que a sua base de dados do Firestore. Para ver a localização da base de dados, consulte a definição de localização do projeto. Não pode usar um contentor Requester Pays para operações de exportação e importação.
Se o contentor do Cloud Storage não estiver no
projeto de origem, tem de conceder à conta de serviço predefinida do projeto de origem acesso ao contentor. Cada Google Cloud projeto
tem uma conta de serviço predefinida criada automaticamente com o nome PROJECT_ID@appspot.gserviceaccount.com
. As operações de exportação do Firestore usam esta conta de serviço predefinida para autorizar operações do contentor do Cloud Storage. Para conceder à conta de serviço predefinida acesso ao seu contentor de origem, atribua-lhe a função Storage Admin
.
Pode conceder esta função com 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 pode conceder esta função na Google Cloud consola.
Desative as operações de escrita (opcional)
Se a sua app continuar a escrever na base de dados enquanto realiza uma operação de exportação, pode não captar todas essas escritas nos ficheiros de exportação. Para exportar dados de um estado consistente, desative as gravações na base de dados atualizando as regras de segurança e interrompendo todas as operações do SDK de administração.
Atualize as regras de segurança
No separador Regras do Firestore da consola, atualize as regras de segurança do projeto de origem para negar todas as escritas. 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 } }
Interrompa as escritas dos SDKs Admin
As regras de segurança não impedem as gravações provenientes de ambientes de servidor privilegiados criados através de um SDK de administrador do Firebase ou de uma biblioteca de cliente de servidor do Google Cloud. Certifique-se de que interrompe as operações de escrita dos seus servidores de administração encerrando ou atualizando os servidores.
Inicie uma operação de exportação
Use o comando gcloud firestore export
para exportar dados do projeto de origem. Pode exportar todos os seus dados ou apenas coleções específicas. Substitua [SOURCE_BUCKET]
pelo nome do seu contentor do Cloud Storage:
- Exportar todos os dados
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Exporte coleções específicas
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async
Tome nota do outputURIPrefix
da operação de exportação, uma vez que o vai usar mais tarde. Por predefinição, o Firestore adiciona um prefixo aos seus ficheiros de exportação com base numa indicação de tempo:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
À medida que a operação de exportação é executada, pode usar o comando firestore operations list
para ver 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 seus ficheiros de dados do Firestore e inicie uma operação de importação.
Conceda ao projeto de destino acesso aos seus ficheiros de dados
Antes de poder iniciar uma operação de importação, tem de se certificar de que o projeto de destino consegue aceder aos seus ficheiros de dados do Firestore.
Mova ficheiros de dados para um contentor local
Se a localização do contentor de origem for diferente da localização do Firestore do projeto de destino, tem de mover os ficheiros de dados para um contentor do Cloud Storage na mesma localização que o projeto de destino.
Siga os passos em Mover e mudar o nome de contentores para mover os seus ficheiros de dados para outro contentor do Cloud Storage.
Para todos os passos seguintes, use este novo contentor como o [SOURCE_BUCKET]
.
Conceda à conta de serviço do projeto acesso ao seu contentor de origem
Se o seu contentor de origem não estiver no projeto de destino, tem de conceder à conta de serviço predefinida do projeto de destino acesso ao seu contentor de origem. A conta de serviço predefinida chama-se [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com
. Para conceder à conta de serviço predefinida acesso ao seu contentor de origem, conceda-lhe as autorizações adequadas para aceder ao contentor.
Pode conceder as funções necessárias com a ferramenta
gsutil
disponível no Cloud Shell:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
Também pode conceder esta função na Google Cloud consola.
Inicie uma operação de importação
Antes de iniciar a operação de importação, certifique-se de que gcloud
está configurado
para o projeto correto:
gcloud config set project [DESTINATION_PROJECT_ID]
Use o comando gcloud firestore import
para importar os dados do seu contentor de origem para o projeto de destino:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
Onde [EXPORT_PREFIX]
corresponde ao prefixo na outputUriPrefix
da 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, pode usar o comando firestore operations list
para ver o progresso da operação:
gcloud firestore operations list