Export planen

Auf dieser Seite wird beschrieben, wie Sie Exporte Ihrer Firestore-Daten im Datastore-Modus planen. Um Exporte nach einem Zeitplan auszuführen, empfehlen wir die Verwendung von Cloud Run-Funktionen und Cloud Scheduler. Erstellen Sie eine Cloud Functions-Funktion, die Exporte initiiert, und führen Sie Ihre Funktion mit Cloud Scheduler aus.

Vorbereitung

Bevor Sie Datenexporte planen:

  1. Aktivieren Sie die Abrechnung für Ihr Google Cloud-Projekt. Nur Google Cloud-Projekte mit aktivierter Abrechnung können die Export- und Importfunktion verwenden.
  2. Erstellen Sie einen Cloud Storage-Bucket an einem Ort in der Nähe des Standorts Ihrer Datenbank im Datastore-Modus. Für Exportvorgänge ist ein Cloud Storage-Ziel-Bucket erforderlich. Einen Bucket mit der Funktion "Anfragesteller bezahlt" können Sie nicht für Exportvorgänge verwenden.

Cloud Functions-Funktion und Cloud Scheduler-Job erstellen

Erstellen Sie nach der folgenden Anleitung eine Cloud Functions-Funktion, die Datenexporte initiiert, und einen Cloud Scheduler-Job, um diese Funktion aufzurufen:

Cloud Functions-Funktion datastore_export erstellen

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Functions auf:

    Zu Cloud Functions

  2. Klicken Sie auf Funktion erstellen.
  3. Geben Sie einen Funktionsnamen wie datastoreExport ein.
  4. Wählen Sie unter Trigger die Option Cloud Pub/Sub aus. Cloud Scheduler ruft Ihre Funktion über Ihr Pub/Sub-Thema auf.
  5. Wählen Sie im Feld Thema die Option Thema erstellen aus. Geben Sie für das Pub/Sub-Thema einen Namen ein, z. B. startDatastoreExport. Notieren Sie den Namen des Themas, da Sie ihn zum Erstellen Ihres Cloud Scheduler-Jobs benötigen.
  6. Wählen Sie unter Quellcode Inline-Editor aus.
  7. Wählen Sie im Drop-down-Menü Laufzeit die Option Python 3.7 aus.
  8. Geben Sie für main.py den folgenden Code ein:
    # 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. Fügen Sie in requirements.txt die folgende Abhängigkeit hinzu:
    google-cloud-datastore==2.20.0
    
  10. Geben Sie unter Einstiegspunkt datastore_export ein, den Namen der Funktion in main.py.
  11. Klicken Sie auf Bereitstellen, um die Cloud Functions-Funktion bereitzustellen.

Zugriffsberechtigungen konfigurieren

Weisen Sie der Cloud Functions-Funktion die Berechtigung zu, Exportvorgänge zu starten und in Ihren GCS-Bucket zu schreiben.

Diese Cloud Functions-Funktion verwendet das Standarddienstkonto Ihres Projekts, um sich zu authentifizieren und Exportvorgänge zu autorisieren. Wenn Sie ein Projekt erstellen, wird ein Standarddienstkonto mit folgendem Namen erstellt:

project_id@appspot.gserviceaccount.com

Dieses Dienstkonto benötigt die Berechtigung, Exportvorgänge zu starten und in Ihren Cloud Storage-Bucket zu schreiben. Weisen Sie dem Standarddienstkonto die folgenden IAM-Rollen für diese Berechtigungen zu:

  • Cloud Datastore Import Export Admin
  • Rolle Storage Object User für den Bucket

Sie können diese Rollen mit der Google Cloud CLI zuweisen. Auf dieses Tool können Sie in der Google Cloud Console über Cloud Shell zugreifen:
Cloud Shell starten

  1. Weisen Sie die Rolle Cloud Datastore Import Export Admin zu. Ersetzen Sie project_id und führen Sie folgenden Befehl aus:

    gcloud projects add-iam-policy-binding project_id \
        --member serviceAccount:project_id@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
  2. Weisen Sie Ihrem Bucket die Rolle Storage-Objekt-Nutzer zu. Ersetzen Sie bucket_name sowie project_id und führen Sie folgenden Befehl aus:

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

Cloud Scheduler-Job erstellen

Erstellen Sie als Nächstes einen Cloud Scheduler-Job, der die Cloud Functions-Funktion datastore_export aufruft:

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf:

    Zu Cloud Scheduler

  2. Klicken Sie auf Job erstellen.

  3. Geben Sie einen Namen für den Job ein, z. B. scheduledDatastoreExport.

  4. Geben Sie eine Häufigkeit im unix-cron-Format ein.

  5. Wählen Sie eine Zeitzone aus.

  6. Wählen Sie unter Ziel Pub/Sub aus. Geben Sie im Feld Thema den Namen des Pub/Sub-Themas ein, das Sie zusammen mit Ihrer Cloud Functions-Funktion definiert haben (startDatastoreExport im obigen Beispiel).

  7. Geben Sie im Feld Nutzlast ein JSON-Objekt ein, um den Exportvorgang zu konfigurieren. Die Cloud Functions-Funktion datastore_export erfordert einen bucket-Wert. Sie können optional Werte für kinds oder namespaceIDs angeben, um einen Entitätsfilter festzulegen. Beispiel:

    Alle Entitäten exportieren

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

    Mit Entitätsfilter exportieren

    • Entitäten der Art User oder Task aus allen Namespaces exportieren:

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

    • Entitäten der Art User oder Task aus dem Standard- und dem Testers-Namespace exportieren; der Standard-Namespace wird mit einem leeren String ("") angegeben:

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

    • Entitäten aller Arten aus dem Standard- und dem Testers-Namespace exportieren; der Standard-Namespace wird mit einem leeren String ("") angegeben:

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

    Dabei steht bucket_name für den Namen Ihres Cloud Storage-Buckets.

  8. Klicken Sie auf Erstellen.

Geplante Exporte testen

Testen Sie Ihre Cloud Functions-Funktion und den Cloud Scheduler-Job. Dazu führen Sie den Cloud Scheduler-Job in der Google Cloud Console auf der Seite Cloud Scheduler aus. Bei Erfolg wird ein echter Exportvorgang initiiert.

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.
    Zu Cloud Scheduler

  2. Klicken Sie in der Zeile für Ihren neuen Cloud Scheduler-Job auf Jetzt ausführen.

    Klicken Sie nach einigen Sekunden auf Aktualisieren. Der Cloud Scheduler-Job sollte nun den Wert in der Ergebnisspalte auf Erfolgreich setzen und Zuletzt ausgeführt auf die aktuelle Zeit aktualisieren.

Die Seite "Cloud Scheduler" bestätigt nur, dass der Job eine Nachricht an das Pub/Sub-Thema gesendet hat. Ob Ihre Exportanfrage erfolgreich war, können Sie in den Logs Ihrer Cloud Functions-Funktion.

Cloud Functions-Logs aufrufen

Auf der Seite Log-Explorer in der Google Cloud Console können Sie prüfen, ob Cloud Function einen Exportvorgang erfolgreich gestartet hat.

Zum Log-Explorer

Das Log für die Cloud Functions-Funktion meldet Fehler und erfolgreich initiierte Exporte.

Exportfortschritt anzeigen

Mit dem Befehl gcloud datastore operations list können Sie den Fortschritt Ihrer Exportvorgänge anzeigen lassen. Weitere Informationen finden Sie unter Vorgänge mit langer Ausführungszeit auflisten.

Nach Abschluss eines Exportvorgangs können Sie die Ausgabedateien in Ihrem Cloud Storage-Bucket ansehen. Der verwaltete Exportdienst organisiert die Exportvorgänge anhand eines Zeitstempels.

Cloud Storage aufrufen