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 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:
- Crie 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 dados 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 Cloud 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 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
ouCloud Datastore Import Export Admin
Um proprietário de projeto pode conceder esses papéis 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 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 Cloud 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 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 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 Cloud 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 bucket de origem, atribua a ela
o papel
Storage Admin
.
É possível conceder esse papel 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 é 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.
Atualizar as regras de segurança
Na guia Regras do Cloud Firestore 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
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 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
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 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 bucket local
Se o local do bucket de origem for diferente do local do Cloud Firestore do projeto de destino, 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 etapas
em Como mover e renomear 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 conceder os papéis necessários 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 é 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