Pianificazione di un'esportazione

In questa pagina viene descritto come pianificare le esportazioni dei dati di Firestore in modalità Datastore. Per eseguire le esportazioni in base a una pianificazione, consigliamo di usare Cloud Functions e Cloud Scheduler. Crea una Cloud Function che avvii le esportazioni e utilizza Cloud Scheduler per eseguire la funzione.

Prima di iniziare

Prima di pianificare le esportazioni dei dati, devi completare le seguenti attività:

  1. Abilita la fatturazione per il tuo progetto Google Cloud. Solo i progetti Google Cloud con fatturazione abilitata possono utilizzare la funzionalità di esportazione e importazione.
  2. Crea un bucket Cloud Storage in una località vicino alla località del database in modalità Datastore. Le operazioni di esportazione richiedono un bucket Cloud Storage di destinazione. Non puoi utilizzare un bucket Pagamenti a carico del richiedente per le operazioni di esportazione.

Crea un job di funzione Cloud Function e di Cloud Scheduler

Segui i passaggi riportati di seguito per creare una Cloud Function che avvii le esportazioni di dati e un job Cloud Scheduler per chiamare la funzione:

Crea una Cloud Function datastore_export

  1. Vai alla pagina Cloud Functions nella console Google Cloud:

    Vai a Cloud Functions

  2. Fai clic su Crea funzione
  3. Inserisci un nome di funzione, ad esempio datastoreExport
  4. In Trigger, seleziona Cloud Pub/Sub. Cloud Scheduler utilizza l'argomento Pub/Sub per chiamare la funzione.
  5. Nel campo Argomento, seleziona Crea un argomento. Inserisci un nome per l'argomento Pub/Sub, ad esempio startDatastoreExport. Prendi nota del nome dell'argomento in base alle tue esigenze per creare il job Cloud Scheduler.
  6. In Codice sorgente, seleziona Editor incorporato.
  7. Nel menu a discesa Runtime, seleziona Python 3.7.
  8. Inserisci il seguente codice per 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. In requirements.txt, aggiungi la dipendenza seguente:
    google-cloud-datastore==2.19.0
    
  10. In Punto di ingresso, inserisci datastore_export, il nome della funzione in main.py.
  11. Fai clic su Esegui il deployment per eseguire il deployment della Cloud Function.

Configurare le autorizzazioni di accesso

Successivamente, autorizza la Cloud Function ad avviare le operazioni di esportazione e la scrittura nel bucket Cloud Storage.

Questa funzione Cloud Functions utilizza l'account di servizio predefinito del tuo progetto per autenticare e autorizzare le relative operazioni di esportazione. Quando crei un progetto, viene creato per te un account di servizio predefinito con il seguente nome:

project_id@appspot.gserviceaccount.com

Questo account di servizio richiede l'autorizzazione per avviare le operazioni di esportazione e scrivere nel bucket Cloud Storage. Per concedere queste autorizzazioni, assegna i seguenti ruoli IAM all'account di servizio predefinito:

  • Cloud Datastore Import Export Admin
  • Ruolo Owner o Storage Admin nel bucket

Puoi utilizzare gli strumenti a riga di comando gcloud e gsutil per assegnare questi ruoli. Puoi accedere a questi strumenti da Cloud Shell nella console Google Cloud:
Avvia Cloud Shell

  1. Assegna il ruolo Amministratore esportazione importazione Cloud Datastore. Sostituisci project_id ed esegui questo comando:

    gcloud projects add-iam-policy-binding project_id \
        --member serviceAccount:project_id@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. Assegna il ruolo Amministratore Storage al bucket. Sostituisci project_id e bucket_name ed esegui questo comando:

    gsutil iam ch serviceAccount:project_id@appspot.gserviceaccount.com:admin \
        gs://bucket_name
    

Crea un job Cloud Scheduler

A questo punto, crea un job Cloud Scheduler che chiami la Cloud Function datastore_export:

  1. Vai alla pagina Cloud Scheduler nella console Google Cloud:

    Vai a Cloud Scheduler

  2. Fai clic su Crea job.

  3. Inserisci un nome per il job, ad esempio scheduledDatastoreExport.

  4. Inserisci un valore nel campo Frequenza nel formato Unix-cron.

  5. Seleziona un Fuso orario.

  6. In Destinazione, seleziona Pub/Sub. Nel campo Topic (Argomento), inserisci il nome dell'argomento Pub/Sub che hai definito insieme alla Cloud Function, startDatastoreExport nell'esempio precedente.

  7. Nel campo Payload, inserisci un oggetto JSON per configurare l'operazione di esportazione. La funzione Cloud Function datastore_export richiede un valore bucket. Facoltativamente, puoi includere i valori kinds o namespaceIDs per impostare un filtro delle entità, ad esempio:

    Esporta tutte le entità

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

    Esporta con filtro di entità

    • Esporta entità di tipo User o Task da tutti gli spazi dei nomi:

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

    • Esporta le entità di tipo User o Task dagli spazi dei nomi predefiniti e Testers. Utilizza una stringa vuota ("") per specificare lo spazio dei nomi predefinito:

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

    • Esporta entità di qualsiasi tipo dallo spazio dei nomi predefinito e Testers. Utilizza una stringa vuota ("") per specificare lo spazio dei nomi predefinito:

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

    Dove bucket_name è il nome del tuo bucket Cloud Storage.

  8. Fai clic su Crea.

Testare le esportazioni pianificate

Per testare il job Cloud Function e Cloud Scheduler, esegui il job Cloud Scheduler nella pagina Cloud Scheduler della console Google Cloud. Se l'operazione ha esito positivo, viene avviata un'operazione di esportazione reale.

  1. Vai alla pagina Cloud Scheduler nella console Google Cloud.
    Vai a Cloud Scheduler

  2. Nella riga del nuovo job di Cloud Scheduler, fai clic su Esegui ora.

    Dopo alcuni secondi, fai clic su Aggiorna. Il job Cloud Scheduler deve aggiornare la colonna dei risultati in Success e Ultima esecuzione all'ora attuale.

La pagina Cloud Scheduler conferma solo che il job ha inviato un messaggio all'argomento Pub/Sub. Per verificare se la richiesta di esportazione è riuscita, visualizza i log della Cloud Function.

Visualizza i log della funzione Cloud Function

Per verificare se la Cloud Function ha avviato correttamente un'operazione di esportazione, consulta la pagina Esplora log nella console Google Cloud.

Vai a Esplora log

Il log per la Cloud Function riporta errori e avvii di esportazione riusciti.

Visualizza avanzamento dell'esportazione

Puoi utilizzare il comando gcloud datastore operations list per visualizzare l'avanzamento delle operazioni di esportazione. Consulta l'elenco di tutte le operazioni a lunga esecuzione.

Al termine di un'operazione di esportazione, puoi visualizzare i file di output nel bucket Cloud Storage. Il servizio di esportazione gestita utilizza un timestamp per organizzare le operazioni di esportazione:

Vai a Cloud Storage