Datenexporte planen

Diese Seite beschreibt, wie Sie den Export Ihrer Cloud Firestore-Daten planen können. Um Exporte zeitgesteuert auszuführen, empfehlen wir die Verwendung von Cloud Functions und Cloud Scheduler.

Hinweis

Bevor Sie Datenexporte mit verwalteten Daten planen, müssen Sie die folgenden Aufgaben ausführen:

  1. Aktivieren Sie die Abrechnung für Ihr Google Cloud Projekt. Nur Google Cloud Projekte, bei denen die Abrechnung aktiviert ist, können die Export- und Importfunktion nutzen.
  2. Für Exportvorgänge wird ein Ziel-Bucket Cloud Storage benötigt. Erstellen Sie einen Cloud Storage Bucket an einem Ort in der Nähe Ihres Cloud Firestore Datenbankstandorts. Für Exportvorgänge kann kein Bucket mit der Funktion "Anfragesteller bezahlt" verwendet werden.

Erstellen Sie eine Cloud-Funktion und einen Cloud Scheduler-Job

Führen Sie die folgenden Schritte aus, um eine Node.js Cloud Function zu erstellen, die einen Cloud Firestore Datenexport und einen Cloud Scheduler Job zum Aufruf dieser Funktion initiiert:

Firebase CLI
  1. Installieren Sie die Firebase CLI. Initialisieren Sie in einem neuen Verzeichnis die CLI für Cloud Functions:

    firebase init functions --project PROJECT_ID
    1. Wählen Sie JavaScript als Sprache aus.
    2. Aktivieren Sie optional ESLint.
    3. Geben Sie y ein, um Abhängigkeiten zu installieren.
  2. Ersetzen Sie den Code in der Datei functions/index.js durch Folgendes:

    const functions = require('firebase-functions');
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    
    // Replace BUCKET_NAME
    const bucket = 'gs://BUCKET_NAME';
    
    exports.scheduledFirestoreExport = functions.pubsub
                                                .schedule('every 24 hours')
                                                .onRun((context) => {
    
      const projectId = process.env.GCP_PROJECT;
      const databaseName = 
        client.databasePath(projectId, '(default)');
    
      return client.exportDocuments({
        name: databaseName,
        outputUriPrefix: bucket,
        // Leave collectionIds empty to export all collections
        // or set to a list of collection IDs to export,
        // collectionIds: ['users', 'posts']
        collectionIds: []
        })
      .then(responses => {
        const response = responses[0];
        console.log(`Operation Name: ${response['name']}`);
      })
      .catch(err => {
        console.error(err);
        throw new Error('Export operation failed');
      });
    });
  3. Ändern Sie im obigen Code Folgendes:
    • Ersetzen Sie BUCKET_NAME durch den Namen Ihres Buckets:
    • Ersetzen Sie YOUR_PROJECT_ID durch Ihre Projekt-ID.
    • Ändern Sie every 24 hours, um Ihren Exportplan festzulegen. Verwenden Sie entweder AppEngine cron.yaml-Syntax oder das Unix-Cron-Format (* * * * *).
    • Ändern Sie collectionIds: [], um nur die angegebenen Sammlungsgruppen zu exportieren. Die aktuelle Einstellung beibehalten, um alle Sammlungsgruppen zu exportieren.

  4. Stellen Sie die geplante Funktion bereit:

    firebase deploy --only functions
Google Cloud Console
Cloud Functions-Funktion erstellen
  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Functions:

    Zu Cloud Functions

  2. Klicken Sie Schreiben Sie eine Funktion
  3. Geben Sie einen Funktionsnamen wie firestore-export ein.
  4. Wählen Sie unter Trigger die Option Cloud Pub/Sub aus.
  5. Wählen Sie unter Thema Neues Thema erstellen aus. Geben Sie einen Namen für das Pub/Sub-Thema ein, z. B. initiateFirestoreExport. Notieren Sie sich den Themennamen, da Sie ihn zum Erstellen Ihres Cloud Scheduler-Jobs benötigen.
  6. Wählen Sie unter Quellcode Inline-Editor aus. Geben Sie den folgenden Code unter index.js ein:
    const firestore = require('@google-cloud/firestore');
    const client = new firestore.v1.FirestoreAdminClient();
    // Replace BUCKET_NAME
    const bucket = 'gs://BUCKET_NAME'
    
    exports.scheduledFirestoreExport = (event, context) => {
      const databaseName = client.databasePath(
        YOUR_PROJECT_ID,
        '(default)'
      );
    
      return client
        .exportDocuments({
          name: databaseName,
          outputUriPrefix: bucket,
          // Leave collectionIds empty to export all collection groups
          // or define a list of collection group IDs:
          // collectionIds: ['users', 'posts']
          collectionIds: [],
        })
        .then(responses => {
          const response = responses[0];
          console.log(`Operation Name: ${response['name']}`);
          return response;
        })
        .catch(err => {
          console.error(err);
        });
    };
    Ändern Sie im obigen Code Folgendes:
    • Ersetzen Sie BUCKET_NAME durch den Namen Ihres Buckets:
    • Ändern Sie collectionIds: [], um nur die angegebenen Sammlungsgruppen zu exportieren. Die aktuelle Einstellung beibehalten, um alle Sammlungsgruppen zu exportieren.

  7. Fügen Sie unter package.json die folgende Abhängigkeit hinzu:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Geben Sie unter Auszuführende Funktion scheduledFirestoreExport ein, den Namen der Funktion in index.js.
  9. Klicken Sie auf Erstellen, um die Cloud Functions-Funktion bereitzustellen.
Cloud Scheduler-Job erstellen

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

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Scheduler:

    Zu Cloud Scheduler wechseln

  2. Klicken Sie auf Job erstellen.
  3. Geben Sie einen Namen für den Job ein, z. B. scheduledFirestoreExport.
  4. Geben Sie eine Häufigkeit ein, z. B. every 24 hours.
  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 (initiateFirestoreExport im obigen Beispiel).
  7. Geben Sie im Feld Nutzlast start export ein. Für den Job muss eine Nutzlast definiert sein, aber die Cloud Functions-Funktion oben verwendet diesen Wert nicht.
  8. Klicken Sie auf Erstellen.
Nun haben Sie Ihre Cloud Functions-Funktion und Ihren Cloud Scheduler-Job bereitgestellt, aber Ihre Cloud Functions-Funktion benötigt weiterhin Zugriffsberechtigungen, um Exportvorgänge auszuführen.

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 Exportvorgänge zu authentifizieren und zu autorisieren. Wenn Sie ein Projekt erstellen, wird ein Standarddienstkonto mit folgendem Namen für Sie erstellt:

PROJECT_ID@appspot.gserviceaccount.com

Dieses Dienstkonto benötigt die Berechtigung zum Starten eines Exportvorgangs und zum Schreiben in Ihren Cloud Storage-Bucket. Weisen Sie dem Standarddienstkonto die folgenden IAM-Rollen für diese Berechtigungen zu:

  • Cloud Datastore Import Export Admin
  • Rolle Owner oder Storage Admin im Bucket

Sie können diese Rollen mit den Befehlszeilentools gcloud und gsutil zuweisen.

Wenn nicht bereits installiert, können Sie auf diese Tools über Cloud Shell in der Google Cloud Console 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-Administrator zu. Ersetzen Sie PROJECT_ID sowie BUCKET_NAME und führen Sie folgenden Befehl aus:

    gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \
        gs://BUCKET_NAME

Wenn Sie Ihr App Engine-Standarddienstkonto deaktivieren oder löschen, verliert Ihre App Engine-Anwendung den Zugriff auf Ihre Cloud Firestore-Datenbank. Wenn Sie Ihr App Engine-Dienstkonto deaktiviert haben, können Sie es wieder aktivieren. Weitere Informationen finden Sie unter Dienstkonto aktivieren. Wenn Sie Ihr App Engine-Dienstkonto innerhalb der letzten 30 Tage gelöscht haben, können Sie es wiederherstellen. Weitere Informationen finden Sie unter Dienstkonto wiederherstellen.

Cloud Scheduler-Job und Cloud Functions-Funktion testen

Sie können Ihren Cloud Scheduler-Job in der Google Cloud Console auf der Seite Cloud Scheduler testen.

  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.

    Nach einigen Sekunden sollte der Cloud Scheduler-Job die Ergebnisspalte Erfolgreich und Zuletzt ausgeführt auf die aktuelle Zeit aktualisieren. Möglicherweise müssen Sie auf Aktualisieren klicken.

Auf der Seite Cloud Scheduler wird nur bestätigt, dass der Job Ihre Cloud Functions-Funktion aufgerufen hat. Öffnen Sie die Cloud Functions-Seite, um die Logs Ihrer Funktion anzuzeigen.

Cloud Functions-Logs aufrufen

Um zu sehen, ob Cloud Functions einen Exportvorgang erfolgreich gestartet hat, öffnen Sie die Logs der Funktion:

Firebase Console

Rufen Sie in der Firebase Console die Seite Cloud Functions auf.

Zu den Funktionslogs

GCP Console

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

Loganzeige aufrufen

Exportfortschritt anzeigen

Sie können den Befehl gcloud firestore operations listverwenden, um den Fortschritt Ihrer Exportvorgänge einzusehen (siehe dazu Export- und Importvorgänge verwalten).

Nach Abschluss eines Exportvorgangs können Sie die Ausgabedateien in Ihrem Cloud Storage-Bucket ansehen:

Cloud Storage-Browser öffnen