Esta página descreve como programar exportações dos seus dados do Cloud Firestore. Para gerar exportações programadas, recomendamos usar o Cloud Functions e o Cloud Scheduler.
Antes de começar
Antes de programar exportações de dados gerenciados, conclua as seguintes tarefas:
- Ative o faturamento para o projeto do Google Cloud. Somente os projetos do Google Cloud com faturamento ativado podem usar o recurso de exportação e importação.
- As operações de exportação exigem um bucket de destino do Cloud Storage. Criar um bucket do Cloud Storage em um local próximo do Cloud Firestore local do seu banco de dados. Não é possível usar um bucket de pagamentos do solicitante para operações de exportação.
Criar uma função do Cloud e um job do Cloud Scheduler
Siga as etapas abaixo para criar uma função do Cloud Node.js que inicie uma exportação de dados do Cloud Firestore e um job do Cloud Scheduler para chamar essa função:
CLI do Firebase
-
Instale a CLI do Firebase. Em um novo diretório, inicialize a CLI para o Cloud Functions:
firebase init functions --project PROJECT_ID
- Selecione JavaScript como a linguagem.
- Opcionalmente, ative o ESLint.
- Digite
y
para instalar dependências.
-
Substitua o código no arquivo
functions/index.js
pelo seguinte:const functions = require('firebase-functions'); const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME'; exports.scheduledFirestoreExport = functions.pubsub .schedule('every 24 hours') .onRun((context) => { const projectId = process.env.GCP_PROJECT; const databaseName = client.databasePath(projectId, '(default)'); return client.exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or set to a list of collection IDs to export, // collectionIds: ['users', 'posts'] collectionIds: [] }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); }) .catch(err => { console.error(err); throw new Error('Export operation failed'); }); });
-
No código acima, modifique o seguinte:
- Substitua
BUCKET_NAME
pelo nome do bucket. - Modifique
every 24 hours
para definir a programação de exportação. Use a sintaxe cron.yaml do AppEngine ou o formato unix-cron (* * * * *
). -
Modifique
collectionIds: []
para exportar somente os grupos de coleções especificados. Deixe como está para exportar todas as coleções.
- Substitua
-
Implante a função programada:
firebase deploy --only functions
Console do Google Cloud
Criar uma função do Cloud
-
Acesse a página do Cloud Functions no console do Google Cloud.
- Clique em Criar função.
- Insira um nome de função como
firestoreExport
- Em Gatilho, selecione Cloud Pub/Sub
- Em Tópico, selecione Criar novo tópico. Digite um nome para o
tópico pub/sub, por exemplo,
initiateFirestoreExport
. Anote o nome do tópico, conforme necessário para criar o job do Cloud Scheduler. - Em Código-fonte, selecione Editor in-line. Insira o
seguinte código em
index.js
:const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { const databaseName = client.databasePath( process.env.GCP_PROJECT, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or define a list of collection IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
No código acima, modifique o seguinte:- Substitua
BUCKET_NAME
pelo nome do bucket. -
Modifique
collectionIds: []
para exportar somente os grupos de coleções especificados. Deixe como está para exportar todas as coleções.
- Substitua
- Em
package.json
, adicione a seguinte dependência:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- Em Função a ser executada, insira
scheduledFirestoreExport
, o nome da função emindex.js
. - Clique em Criar para implantar a função do Cloud.
Criar um job do Cloud Scheduler
Em seguida, crie um job do Cloud Scheduler que chame a função do Cloud:
-
Acesse a página do Cloud Scheduler no console do Google Cloud:
- Clique em Criar job.
- Insira um Nome para o job, como
scheduledFirestoreExport
. - Insira uma Frequência, por exemplo,
every 24 hours
. - Selecione um fuso horário.
- Em Destino, selecione Pub/Sub. No campo Tópico, insira o nome do tópico pub/sub que você definiu com a função do Cloud,
initiateFirestoreExport
no exemplo acima. - No campo Payload, insira
start export
. O job requer a definição do payload, mas a função do Cloud acima não usa esse valor. - Clique em Criar.
Configurar as permissões de acesso
Em seguida, conceda à função do Cloud a permissão para iniciar operações de exportação e gravar no bucket do GCS.
Esta função do Cloud usa a conta de serviço padrão do projeto para autenticar e autorizar as operações de exportação. Quando um projeto é criado, uma conta de serviço padrão é criada para você com o seguinte nome:
PROJECT_ID@appspot.gserviceaccount.com
Essa conta de serviço precisa de permissão para iniciar uma operação de exportação e gravar no bucket do Cloud Storage. Para conceder essas permissões, atribua os seguintes papéis de IAM à conta de serviço padrão:
Cloud Datastore Import Export Admin
-
Owner
ouStorage Admin
papel no bucket
Use as ferramentas de linha de
comando gcloud
e gsutil
para atribuir essas funções.
Se ainda não estiverem instaladas, acesse essas ferramentas em Cloud Shell no console do Google Cloud:
Iniciar Cloud Shell
-
Atribua o papel Administrador de exportação e importação do Cloud Datastore. Substitua PROJECT_ID e execute o seguinte comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
Atribua o papel Administrador do Storage ao bucket. Substitua PROJECT_ID e BUCKET_NAME e execute o seguinte comando:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
Se você desativar ou excluir sua conta de serviço padrão do App Engine, seu aplicativo do App Engine vai perder o acesso ao banco de dados do Cloud Firestore. Se você desativou sua conta de serviço do App Engine, é possível reativá-la. Consulte como ativar uma conta de serviço. Se você excluiu sua conta de serviço do App Engine nos últimos 30 dias, será possível restaurá-la. Consulte Como cancelar a exclusão de uma conta de serviço.
Testar o job do Cloud Scheduler e a função do Cloud
É possível testar o job do Cloud Scheduler na página Cloud Scheduler do console do Google Cloud.
Acesse a página so Cloud Scheduler no console do Google Cloud.
Acessar Cloud SchedulerNa linha do novo job do Cloud Scheduler, clique em Executar agora.
Após alguns segundos, o job do Cloud Scheduler deve atualizar a coluna de resultados para Sucesso e Última execução para o horário atual. Pode ser necessário clicar em Atualizar.
A página do Cloud Scheduler confirma apenas que o job chamou sua função do Cloud. Abra a página da função do Cloud para ver os registros da função.
Exibir os registros da função do Cloud
Para verificar se a função do Cloud iniciou com êxito uma operação de exportação, abra os registros da função:
Console do Firebase
Acesse a página do Cloud Functions no console do Firebase.
Console do GCP
Acesse a página do Cloud Functions no console do Google Cloud.
Ver progresso da exportação
É possível usar o comando gcloud firestore operations list
para visualizar o
progresso das operações de exportação. Veja
como gerenciar operações de exportação e importação.
Depois que uma operação de exportação for concluída, será possível visualizar os arquivos de saída no bucket do Cloud Storage:
Abra o navegador do Cloud Storage