Agendar uma exportação

Esta página descreve como agendar exportações dos seus dados do Firestore no modo Datastore. Para executar exportações de acordo com uma programação, recomendamos que use funções do Cloud Run e o Cloud Scheduler. Crie uma função do Google Cloud que inicie as exportações e use o Cloud Scheduler para executar a sua função.

Antes de começar

Antes de agendar exportações de dados, tem de concluir as seguintes tarefas:

  1. Ative a faturação para o seu Google Cloud projeto. Apenas os Google Cloud projetos com a faturação ativada podem usar a funcionalidade de exportação e importação.
  2. Crie um contentor do Cloud Storage numa localização perto da localização da base de dados do modo Datastore. As operações de exportação requerem um contentor do Cloud Storage de destino. Não pode usar um contentor de pagamentos do requerente para operações de exportação.

Crie uma função do Google Cloud e uma tarefa do Cloud Scheduler

Siga os passos abaixo para criar uma função do Google Cloud que inicie exportações de dados e uma tarefa do Cloud Scheduler para chamar essa função:

Crie uma datastore_export função do Google Cloud

  1. Aceda à página Cloud Functions na Google Cloud consola:

    Aceder ao Cloud Functions

  2. Clique em Criar função
  3. Introduza um nome de função, como datastoreExport
  4. Em Acionador, selecione Cloud Pub/Sub. O Cloud Scheduler usa o seu tópico do pub/sub para chamar a sua função.
  5. No campo Tópico, selecione Criar um tópico. Introduza um nome para o tópico do Pub/Sub, como startDatastoreExport. Tome nota do nome do tópico, uma vez que precisa dele para criar a tarefa do Cloud Scheduler.
  6. Em Código fonte, selecione Editor inline.
  7. No menu pendente Tempo de execução, selecione Python 3.7.
  8. Introduza o seguinte código para main.py:
    # Copyright 2021 Google LLC All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import base64
    import json
    import os
    
    from google.cloud import datastore_admin_v1
    
    project_id = os.environ.get("GCP_PROJECT")
    client = datastore_admin_v1.DatastoreAdminClient()
    
    
    def datastore_export(event, context):
        """Triggers a Datastore export from a Cloud Scheduler job.
    
        Args:
            event (dict): event[data] must contain a json object encoded in
                base-64. Cloud Scheduler encodes payloads in base-64 by default.
                Object must include a 'bucket' value and can include 'kinds'
                and 'namespaceIds' values.
            context (google.cloud.functions.Context): The Cloud Functions event
                metadata.
        """
        if "data" in event:
            # Triggered via Cloud Scheduler, decode the inner data field of the json payload.
            json_data = json.loads(base64.b64decode(event["data"]).decode("utf-8"))
        else:
            # Otherwise, for instance if triggered via the Cloud Console on a Cloud Function, the event is the data.
            json_data = event
    
        bucket = json_data["bucket"]
        entity_filter = datastore_admin_v1.EntityFilter()
    
        if "kinds" in json_data:
            entity_filter.kinds = json_data["kinds"]
    
        if "namespaceIds" in json_data:
            entity_filter.namespace_ids = json_data["namespaceIds"]
    
        export_request = datastore_admin_v1.ExportEntitiesRequest(
            project_id=project_id, output_url_prefix=bucket, entity_filter=entity_filter
        )
        operation = client.export_entities(request=export_request)
        response = operation.result()
        print(response)
    
  9. Em requirements.txt, adicione a seguinte dependência:
    google-cloud-datastore==2.20.0
    
  10. Em Ponto de entrada, introduza datastore_export, o nome da função em main.py.
  11. Clique em Implementar para implementar a função do Cloud.

Configure as autorizações de acesso

Em seguida, conceda à função do Cloud autorização para iniciar operações de exportação e escrever no seu contentor do Cloud Storage.

Esta Cloud Function usa a conta de serviço predefinida do seu projeto para autenticar e autorizar as respetivas operações de exportação. Quando cria um projeto, é criada uma conta de serviço predefinida com o seguinte nome:

project_id@appspot.gserviceaccount.com

Esta conta de serviço precisa de autorização para iniciar operações de exportação e escrever no seu contentor do Cloud Storage. Para conceder estas autorizações, atribua as seguintes funções do IAM à conta de serviço predefinida:

  • Cloud Datastore Import Export Admin
  • Função Storage Object User no contentor

Pode usar a Google Cloud CLI para atribuir estas funções. Pode aceder a esta ferramenta a partir do Cloud Shell na Google Cloud consola:
inicie o Cloud Shell

  1. Atribua a função Administrador de importação/exportaçã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
  2. Atribua a função Storage Object User no seu contentor. Substitua bucket_name e project_id e execute o seguinte comando:

    gcloud storage buckets add-iam-policy-binding gs://bucket_name \
        --member=serviceAccount:project_id@appspot.gserviceaccount.com \
        --role=roles/storage.objectUser

Crie uma tarefa do Cloud Scheduler

Em seguida, crie uma tarefa do Cloud Scheduler que chame a datastore_exportfunção da nuvem:

  1. Aceda à página Cloud Scheduler na Google Cloud consola:

    Aceda ao Cloud Scheduler

  2. Clique em Criar tarefa.

  3. Introduza um nome para a tarefa, como scheduledDatastoreExport.

  4. Introduza uma frequência no formato unix-cron.

  5. Selecione um fuso horário.

  6. Em Destino, selecione Pub/Sub. No campo Tópico, introduza o nome do tópico de publicação/subscrição que definiu juntamente com a sua função do Google Cloud, startDatastoreExport no exemplo acima.

  7. No campo Payload, introduza um objeto JSON para configurar a operação de exportação. A função do Cloud datastore_export requer um valor bucket. Opcionalmente, pode incluir valores kinds ou namespaceIDs para definir um filtro de entidades, por exemplo:

    Exporte todas as entidades

    {
    "bucket": "gs://bucket_name"
    }
    

    Exporte com filtro de entidades

    • Exporte entidades do tipo User ou Task de todos os espaços de nomes:

      {
      "bucket": "gs://bucket_name",
      "kinds": ["User", "Task"]
      }
      

    • Exporte entidades do tipo User ou Task dos espaços de nomes predefinidos e Testers. Use uma string vazia ("") para especificar o espaço de nomes predefinido:

      {
      "bucket": "gs://bucket_name",
      "kinds": ["User", "Task"],
      "namespaceIds": ["", "Testers"]
      }
      

    • Exporte entidades de qualquer tipo dos espaços de nomes predefinidos e Testers. Use uma string vazia ("") para especificar o espaço de nomes predefinido:

      {
      "bucket": "gs://bucket_name",
      "namespaceIds": ["", "Testers"]
      }
      

    Em que bucket_name é o nome do seu contentor do Cloud Storage.

  8. Clique em Criar.

Teste as suas exportações agendadas

Para testar a função do Cloud e a tarefa do Cloud Scheduler, execute a tarefa do Cloud Scheduler na página Cloud Scheduler da consola do Google Cloud . Se for bem-sucedido, inicia uma operação de exportação real.

  1. Aceda à página Cloud Scheduler na Google Cloud consola.
    Aceda ao Cloud Scheduler

  2. Na linha da nova tarefa do Cloud Scheduler, clique em Executar agora.

    Após alguns segundos, clique em Atualizar. A tarefa do Cloud Scheduler deve atualizar a coluna de resultados para Sucesso e a Última execução para a hora atual.

A página do Cloud Scheduler confirma apenas que a tarefa enviou uma mensagem para o tópico do Pub/Sub. Para ver se o pedido de exportação foi bem-sucedido, consulte os registos da sua função do Google Cloud.

Veja os registos da função do Cloud

Para ver se a função do Google Cloud iniciou com êxito uma operação de exportação, consulte a página Explorador de registos na Google Cloud consola.

Aceda ao Explorador de registos

O registo da função do Cloud comunica erros e iniciações de exportação bem-sucedidas.

Veja o progresso da exportação

Pode usar o comando gcloud datastore operations list para ver o progresso das suas operações de exportação. Consulte o artigo Apresentar uma lista de todas as operações de longa duração.

Após a conclusão de uma operação de exportação, pode ver os ficheiros de saída no seu contentor do Cloud Storage. O serviço de exportação gerido usa uma data/hora para organizar as suas operações de exportação:

Aceda ao Cloud Storage