Como programar uma exportação

Nesta página, descrevemos como programar as exportações dos dados do Firestore no modo Datastore. Para executar exportações em uma programação, recomendamos o uso de funções do Cloud Run e do Cloud Scheduler. Crie uma Função do Cloud que inicie exportações e use o Cloud Scheduler para executar a função.

Antes de começar

Antes de programar exportações de dados, é preciso concluir as seguintes tarefas:

  1. Ative o faturamento para o projeto do Google Cloud . Somente os projetos do Google Cloudcom faturamento ativado podem usar o recurso de exportação e importação.
  2. Crie um bucket do Cloud Storage em um local próximo ao local do banco de dados do modo Datastore. As operações de exportação exigem um bucket de destino do Cloud Storage. Não é possível usar um bucket de pagamentos do solicitante para operações de exportação.

Criar um job do Cloud Function e Cloud Scheduler

Siga as etapas abaixo para criar uma Função do Cloud que inicie exportações de dados e um job do Cloud Scheduler para chamar essa função:

Criar uma Função do Cloud datastore_export

  1. Acesse a página Cloud Functions no console do Google Cloud :

    Acesse o Cloud Functions

  2. Clique em Criar função.
  3. Insira um nome de função como datastoreExport
  4. Em Gatilho, selecione Cloud Pub/Sub O Cloud Scheduler usa o tópico do Pub/Sub para chamar a função.
  5. No campo Tópico, selecione Criar um tópico. Digite um nome para o tópico Pub/Sub, por exemplo, startDatastoreExport. Anote o nome do tópico, conforme necessário para criar o job no Cloud Scheduler.
  6. Em Código-fonte, selecione Editor integrado.
  7. Na lista suspensa Ambiente de execução, selecione Python 3.7.
  8. Digite 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.23.0
    
  10. Em Ponto de entrada, insira datastore_export, o nome da função em main.py.
  11. Clique em Implantar para implantar a função do Cloud.

Configurar as permissões de acesso

Em seguida, conceda permissão ao Cloud Function para iniciar operações de exportação e gravar no bucket do Cloud Storage.

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 operações 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: