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 Functions 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. Die Export- und Importfunktion kann nur in Google Cloud-Projekten mit aktivierter Abrechnung verwendet werden.
  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.23.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 die Google Cloud CLI verwenden, um diese Rollen zuzuweisen. 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