Planowanie eksportu danych

Na tej stronie dowiesz się, jak zaplanować eksport danych Cloud Firestore. Aby wykonywać eksporty zgodnie z harmonogramem, zalecamy używanie funkcji Cloud Functions i Cloud Scheduler.

Zanim zaczniesz

Zanim zaplanowasz eksport danych zarządzanych, musisz wykonać te czynności:

  1. Włącz płatności w projekcie Google Cloud. Funkcja eksportowania i importowania jest dostępna tylko w projektach Google Cloudz włączonymi płatnościami.
  2. Operacje eksportu wymagają zasobnika docelowego Cloud Storage. Utwórz zasobnik Cloud Storage w pobliżu lokalizacji bazy danych Cloud Firestore. Nie możesz używać puli taryfy żądającego do operacji eksportu.

Tworzenie funkcji w Cloud Functions i zadania Cloud Scheduler

Aby utworzyć funkcję Node.js Cloud Functions, która inicjuje eksport danych Cloud Firestore i zadanie Cloud Scheduler do wywołania tej funkcji:

wiersz poleceń Firebase
  1. Zainstaluj wiersz poleceń Firebase. W nowym katalogu zainicjuj interfejs wiersza poleceń Cloud Functions:

    firebase init functions --project PROJECT_ID
    1. Jako język wybierz JavaScript.
    2. Opcjonalnie włącz ESLint.
    3. Aby zainstalować zależności, wpisz y.
  2. Zastąp kod w pliku functions/index.js tym:

    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. W powyższym kodzie zmień:
    • Zastąp BUCKET_NAME nazwą zasobnika.
    • Aby ustawić harmonogram eksportu, zmień every 24 hours. Użyj składni App Engine cron.yaml lub formatu cron w systemie Unix (* * * * *).
    • Zmień collectionIds: [], aby wyeksportować tylko określone grupy kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.

  4. Wdróż zaplanowaną funkcję:

    firebase deploy --only functions
Google Cloud Console
Utwórz funkcję w Cloud Functions
  1. W konsoli Google Cloud otwórz stronę Cloud Functions:

    Otwórz Cloud Functions

  2. Kliknij Utwórz funkcję.
  3. Wpisz nazwę funkcji, np. firestoreExport
  4. W sekcji Aktywator wybierz Cloud Pub/Sub.
  5. W sekcji Temat kliknij Utwórz nowy temat. Wpisz nazwę tematu Pub/Sub, na przykład initiateFirestoreExport. Zanotuj nazwę tematu, ponieważ będzie Ci ona potrzebna do utworzenia zadania Cloud Scheduler.
  6. W sekcji Kod źródłowy wybierz Edytor wbudowany. Wpisz ten kod w pliku index.js:
    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);
        });
    };
    W powyższym kodzie zmodyfikuj te elementy:
    • Zastąp BUCKET_NAME nazwą zasobnika.
    • Zmień collectionIds: [], aby wyeksportować tylko określone grupy kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.

  7. W package.json dodaj tę zależność:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. W polu Funkcja do wykonania wpisz scheduledFirestoreExport, czyli nazwę funkcji w pliku index.js.
  9. Aby wdrożyć funkcję w Cloud Functions, kliknij Utwórz.
Tworzenie zadania Cloud Scheduler

Następnie utwórz zadanie Cloud Scheduler, które wywołuje Twoją funkcję w Cloud Functions:

  1. W konsoli Google Cloud otwórz stronę Cloud Scheduler:

    Otwórz stronę Cloud Scheduler

  2. Kliknij Utwórz zadanie.
  3. Wpisz nazwę zadania, np. scheduledFirestoreExport.
  4. Wpisz częstotliwość, np. every 24 hours.
  5. Wybierz Strefę czasową.
  6. W sekcji Miejsce docelowe wybierz Pub/Sub. W polu Topic wpisz nazwę tematu Pub/Sub zdefiniowanego wraz z funkcją Cloud Functions (initiateFirestoreExport w przykładzie powyżej).
  7. W polu Payload (Ładunek) wpisz start export. Zadaniem jest zdefiniowanie ładunku, ale funkcja w Cloud Functions nie używa tej wartości.
  8. Kliknij Utwórz.
W tym momencie wdrożono funkcję w Cloud Functions i zadanie Cloud Scheduler, ale funkcja w Cloud Functions nadal potrzebuje uprawnień dostępu do wykonywania operacji eksportu.

Konfigurowanie uprawnień dostępu

Następnie przyznaj funkcji w Cloud Functions uprawnienia do rozpoczęcia operacji eksportu i zapisywania danych w zasobniku GCS.

Ta funkcja w Cloud Functions korzysta z domyślnego konta usługi projektu, aby uwierzytelniać i autoryzować operacje eksportowania. Gdy tworzysz projekt, tworzymy dla Ciebie domyślne konto usługi o tej nazwie:

PROJECT_ID@appspot.gserviceaccount.com

To konto usługi wymaga uprawnień do uruchamiania operacji eksportu i zapisywania danych w zasobniku Cloud Storage. Aby przyznać te uprawnienia, przypisz domyślnemu kontu usługi te role uprawnień:

  • Cloud Datastore Import Export Admin
  • rola Owner lub Storage Admin w puli

Do przypisywania tych ról możesz użyć narzędzi wiersza poleceń gcloud i gsutil.

Jeśli nie są jeszcze zainstalowane, możesz uzyskać do nich dostęp w konsoli Google Cloud (Cloud Shell):
Start Cloud Shell

  1. Przypisz rolę Administrator eksportu i importu w Cloud Datastore. Zastąp PROJECT_ID i uruchom to polecenie:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
  2. Przypisz do zasobnika rolę Administrator miejsca na dane. Zastąp wartości PROJECT_ID i BUCKET_NAME i uruchom to polecenie:

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

Jeśli wyłączysz lub usuniesz domyślne konto usługi App Engine, aplikacja App Engine utraci dostęp do bazy danych Cloud Firestore. Jeśli wyłączysz konto usługi App Engine, możesz je ponownie włączyć. W tym celu zobacz włączanie konta usługi. Jeśli konto usługi App Engine zostało usunięte w ciągu ostatnich 30 dni, możesz je przywrócić. W tym celu zapoznaj się z artykułem przywracanie usuniętego konta usługi.

Testowanie zadania Cloud Scheduler i funkcji w Cloud Functions

Możesz przetestować zadanie Cloud Scheduler na stronie Cloud Scheduler w konsoli Google Cloud.

  1. W konsoli Google Cloud otwórz stronę Cloud Scheduler.
    Otwórz stronę Cloud Scheduler

  2. W wierszu nowego zadania Cloud Scheduler kliknij Uruchom teraz.

    Po kilku sekundach zadanie Cloud Scheduler powinno zaktualizować kolumnę wyników, aby w kolumnie „Wynik” pojawiła się wartość Sukces, a w kolumnie „Ostatnie uruchomienie” – bieżąca godzina. Może być konieczne kliknięcie Odśwież.

Strona Cloud Scheduler potwierdza tylko, że zadanie wywołało Twoją funkcję w Cloud Functions. Otwórz stronę Cloud Functions, aby wyświetlić logi funkcji.

Wyświetlanie logów Cloud Functions

Aby sprawdzić, czy funkcja Cloud Function rozpoczęła operację eksportu, otwórz logi funkcji:

Konsola Firebase

W konsoli Firebase otwórz stronę Cloud Functions.

Otwórz logi funkcji

konsola GCP

W konsoli Google Cloud otwórz stronę Cloud Functions.

Otwórz przeglądarkę logów

Wyświetlanie postępu eksportu

Aby wyświetlić postęp operacji eksportu, możesz użyć polecenia gcloud firestore operations list. Więcej informacji znajdziesz w artykule Zarządzanie operacjami eksportu i importu.

Po zakończeniu operacji eksportu możesz wyświetlić pliki wyjściowe w zasobniku Cloud Storage:

Otwórz przeglądarkę Cloud Storage