Planen Sie Datenexporte

Auf dieser Seite wird beschrieben, wie Sie Exporte Ihrer Cloud Firestore-Daten planen. Um Exporte nach einem Zeitplan auszuführen, empfehlen wir die Verwendung von Cloud Functions und Cloud Scheduler.

Bevor Sie beginnen

Bevor Sie verwaltete Datenexporte planen, müssen Sie die folgenden Aufgaben ausführen:

  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. Für Exportvorgänge ist ein Ziel-Cloud Storage-Bucket erforderlich. Erstellen Sie einen Cloud Storage-Bucket an einem Standort in der Nähe Ihres Cloud Firestore-Datenbankstandorts . Sie können für Exportvorgänge keinen Bucket „Anforderer zahlt“ verwenden.

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

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

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 , 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.
    • Ändern Sie every 24 hours , um Ihren Exportzeitplan festzulegen. Verwenden Sie entweder die AppEngine cron.yaml-Syntax oder das Unix-Cron-Format ( * * * * * ).
    • Ändern Sie collectionIds: [] , um nur die angegebenen Sammlungsgruppen zu exportieren. Lassen Sie es unverändert, um alle Sammlungen zu exportieren.

  4. Stellen Sie die geplante Funktion bereit:

    firebase deploy --only functions
GCP-Konsole
Erstellen Sie eine Cloud-Funktion
  1. Gehen Sie in der GCP Console zur Seite „Cloud Functions“ :

    Gehen Sie zu Cloud Functions

  2. Klicken Sie auf Funktion erstellen
  3. Geben Sie einen Funktionsnamen ein, z. B. firestoreExport .
  4. Wählen Sie unter Trigger die Option Cloud Pub/Sub aus
  5. Wählen Sie unter Thema die Option 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 die Option Inline-Editor aus. Geben Sie unter index.js den folgenden Code 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(
        process.env.GCP_PROJECT,
        '(default)'
      );
    
      return client
        .exportDocuments({
          name: databaseName,
          outputUriPrefix: bucket,
          // Leave collectionIds empty to export all collections
          // or define a list of collection 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. Lassen Sie es unverändert, um alle Sammlungen 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-Funktion bereitzustellen.
Erstellen Sie einen Cloud Scheduler-Job

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

  1. Gehen Sie zur Cloud Scheduler- Seite in der GCP Console:

    Gehen Sie zum Cloud Scheduler

  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, zum Beispiel every 24 hours .
  5. Wählen Sie eine Zeitzone aus.
  6. Wählen Sie unter Ziel die Option Pub/Sub aus. Geben Sie im Feld „Thema“ den Namen des Pub/Sub-Themas ein, das Sie zusammen mit Ihrer Cloud-Funktion definiert haben, im Beispiel oben „ initiateFirestoreExport .
  7. Geben Sie im Feld Payload start export . Für den Job ist eine definierte Nutzlast erforderlich, die obige Cloud-Funktion verwendet diesen Wert jedoch nicht.
  8. Klicken Sie auf Erstellen .
Zu diesem Zeitpunkt haben Sie Ihre Cloud-Funktion und Ihren Cloud-Scheduler-Job bereitgestellt, Ihre Cloud-Funktion benötigt jedoch weiterhin Zugriffsberechtigungen, um Exportvorgänge auszuführen.

Konfigurieren Sie Zugriffsberechtigungen

Erteilen Sie als Nächstes der Cloud-Funktion die Berechtigung, Exportvorgänge zu starten und in Ihren GCS-Bucket zu schreiben.

Diese Cloud-Funktion verwendet das Standarddienstkonto Ihres Projekts, um seine Exportvorgänge zu authentifizieren und zu autorisieren. Wenn Sie ein Projekt erstellen, wird für Sie ein Standarddienstkonto mit dem folgenden Namen erstellt:

PROJECT_ID@appspot.gserviceaccount.com

Dieses Dienstkonto benötigt die Berechtigung, einen Exportvorgang zu starten und in Ihren Cloud Storage-Bucket zu schreiben. Um diese Berechtigungen zu erteilen, weisen Sie dem Standarddienstkonto die folgenden IAM-Rollen zu:

  • Cloud Datastore Import Export Admin
  • Rolle Owner oder Storage Admin für den Bucket

Sie können die Befehlszeilentools gcloud und gsutil verwenden, um diese Rollen zuzuweisen.

Sofern sie noch nicht installiert sind, können Sie über Cloud Shell in der Google Cloud Platform Console auf diese Tools zugreifen:
Starten Sie Cloud Shell

  1. Weisen Sie die Rolle „Cloud Datastore Import Export Admin“ zu. Ersetzen Sie PROJECT_ID und führen Sie den 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 „Speicheradministrator“ zu. Ersetzen Sie PROJECT_ID und BUCKET_NAME und führen Sie den 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-App den Zugriff auf Ihre Cloud Firestore-Datenbank. Wenn Sie Ihr App Engine-Dienstkonto deaktiviert haben, können Sie es erneut aktivieren (siehe Aktivieren eines Dienstkontos) . Wenn Sie Ihr App Engine-Dienstkonto innerhalb der letzten 30 Tage gelöscht haben, können Sie Ihr Dienstkonto wiederherstellen, siehe Wiederherstellen eines Dienstkontos .

Testen Sie Ihren Cloud Scheduler-Job und Ihre Cloud Function

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

  1. Gehen Sie zur Cloud Scheduler- Seite in der GCP Console.
    Gehen Sie zum 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 auf „Erfolgreich“ und „Letzte Ausführung“ auf die aktuelle Zeit aktualisieren. Möglicherweise müssen Sie auf „Aktualisieren“ klicken.

Die Seite „Cloud Scheduler“ bestätigt lediglich, dass der Job Ihre Cloud-Funktion aufgerufen hat. Öffnen Sie die Cloud-Funktionsseite, um die Protokolle Ihrer Funktion anzuzeigen.

Sehen Sie sich die Cloud Function-Protokolle an

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

Firebase-Konsole

Gehen Sie zur Seite „Cloud Functions“ in der Firebase-Konsole.

Gehen Sie zu Funktionsprotokolle

GCP-Konsole

Gehen Sie in der GCP Console zur Seite „Cloud Functions“ .

Gehen Sie zum Protokoll-Viewer

Exportfortschritt anzeigen

Sie können den Befehl gcloud firestore operations list verwenden, um den Fortschritt Ihrer Exportvorgänge anzuzeigen, siehe Export- und Importvorgänge verwalten .

Nachdem ein Exportvorgang abgeschlossen ist, können Sie die Ausgabedateien in Ihrem Cloud Storage-Bucket anzeigen:

Öffnen Sie den Cloud Storage-Browser