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 przypadku projektów 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ć zasobnika Żądający płaci na potrzeby 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 interfejs wiersza 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 zmień:
    • Zastąp BUCKET_NAME nazwą swojego zasobnika.
    • Zmodyfikuj collectionIds: [], aby eksportować 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ła Twoją funkcję w Cloud Functions:

  1. Otwórz stronę Cloud Scheduler w konsoli Google Cloud:

    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.
Na tym etapie masz już wdrożoną funkcję w Cloud Functions i zadanie Cloud Scheduler, ale funkcja w Cloud Functions nadal potrzebuje uprawnień dostępu, aby wykonywać operacje 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 w Twoim projekcie do uwierzytelniania i autoryzowania operacji 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 rozpoczęcia operacji eksportu i zapisu 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 sekcji Cloud Shell w konsoli Google Cloud:
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 rolę Administrator miejsca na dane do zasobnika. Zastąp PROJECT_ID i BUCKET_NAME, a następnie 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 konto usługi App Engine zostało wyłączone, możesz je włączyć ponownie. Zobacz informacje o włączaniu 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ć, postępując zgodnie z instrukcjami dotyczącymi przywracania 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ć w kolumnie wyników wartości Sukces i Ostatnie uruchomienie na bieżący czas. 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 w Cloud Functions rozpoczęła operację eksportu, otwórz jej logi:

Konsola Firebase

W konsoli Firebase otwórz stronę Cloud Functions.

Otwórz logi funkcji

konsola GCP

Otwórz stronę Cloud Functions w konsoli Google Cloud.

Otwórz przeglądarkę logów

Wyświetl postęp 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