Planowanie eksportu danych

Na tej stronie dowiesz się, jak zaplanować eksporty danych Cloud Firestore. Jeśli chcesz wykonywać eksporty zgodnie z harmonogramem, zalecamy użycie Cloud Functions i Cloud Scheduler.

Zanim zaczniesz

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

  1. Włącz płatności za projekt Google Cloud. Funkcji eksportowania i importowania można używać tylko w projektach Google Cloud, w których włączono płatności.
  2. Operacje eksportu wymagają docelowego zasobnika Cloud Storage. Utwórz zasobnik Cloud Storage w lokalizacji 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

Wykonaj te czynności, aby utworzyć funkcję w Node.js w Cloud Functions, która inicjuje eksport danych z Cloud Firestore, oraz zadanie Cloud Scheduler w celu wywołania tej funkcji:

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

    firebase init functions --project PROJECT_ID
    1. Wybierz JavaScript jako język.
    2. Opcjonalnie włącz ESLint.
    3. Wpisz y, aby zainstalować zależności.
  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 zmodyfikuj te elementy:
    • Zastąp BUCKET_NAME nazwą swojego zasobnika.
    • Aby ustawić harmonogram eksportowania, zmień every 24 hours. Użyj składni cron.yaml usługi AppEngine lub formatu unix-cron (* * * * *).
    • Zmodyfikuj collectionIds: [], aby eksportować tylko określone grupy kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.

  4. Wdróż zaplanowaną funkcję:

    firebase deploy --only functions
konsola GCP
Utwórz funkcję w Cloud Functions
  1. Otwórz stronę Cloud Functions w konsoli GCP:

    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 wybierz Utwórz nowy temat. Wpisz nazwę tematu Pub/Sub, np. initiateFirestoreExport. Zanotuj nazwę tematu, ponieważ będzie Ci ona potrzebna do utworzenia zadania Cloud Scheduler.
  6. W sekcji Source code (Kod źródłowy) wybierz Wbudowany edytor. Wpisz ten kod na koncie 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ą swojego zasobnika.
    • Zmodyfikuj collectionIds: [], aby eksportować tylko określone grupy kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.

  7. W sekcji package.json dodaj tę zależność:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. W polu Funkcja do wykonania wpisz scheduledFirestoreExport – nazwę funkcji w index.js.
  9. Kliknij Utwórz, aby wdrożyć funkcję w Cloud Functions.
Utwórz zadanie usługi 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 GCP:

    Otwórz 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 (Temat) wpisz nazwę tematu Pub/Sub zdefiniowanego obok funkcji w Cloud Functions (initiateFirestoreExport w przykładzie powyżej).
  7. W polu Ładunek wpisz start export. Zadanie wymaga zdefiniowanego ładunku, ale powyższa funkcja w Cloud Functions nie korzysta z tej wartości.
  8. Kliknij Utwórz.

Konfigurowanie uprawnień dostępu

Następnie przyznaj funkcji w Cloud Functions uprawnienia do rozpoczynania operacji eksportu i zapisu w zasobniku GCS.

Ta funkcja w Cloud Functions wykorzystuje domyślne konto usługi projektu do uwierzytelniania i autoryzowania operacji eksportu. Podczas tworzenia projektu tworzone jest 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 do domyślnego konta usługi te role uprawnień:

  • Cloud Datastore Import Export Admin
  • Rola Owner lub Storage Admin w zasobniku

Aby przypisać te role, możesz użyć narzędzi wiersza poleceń gcloud i gsutil.

Jeśli te narzędzia nie są jeszcze zainstalowane, możesz skorzystać z Cloud Shell w konsoli Google Cloud Platform:
Uruchom Cloud Shell

  1. Przypisz rolę Administrator i administrator eksportu 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 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, Twoja 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. Instrukcje znajdziesz w sekcji o włączaniu konta usługi. Jeśli Twoje konto usługi App Engine zostało usunięte w ciągu ostatnich 30 dni, możesz je przywrócić, zapoznaj się z instrukcjami 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 Platform.

  1. Otwórz stronę Cloud Scheduler w konsoli GCP.
    Otwórz Cloud Scheduler

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

    Po kilku sekundach zadanie Cloud Scheduler powinno zaktualizować kolumnę wyników jako Sukces i Ostatnie uruchomienie na aktualny czas. Być może trzeba będzie kliknąć Odśwież.

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

Wyświetlanie logów funkcji w Cloud Functions

Aby sprawdzić, czy funkcja w Cloud Functions rozpoczęła operację eksportu, otwórz jej logi:

Konsola Firebase

Otwórz stronę Cloud Functions w konsoli Firebase.

Otwórz logi funkcji

konsola GCP

W konsoli GCP otwórz stronę Cloud Functions.

Otwórz przeglądarkę logów

Wyświetl postęp eksportu

Za pomocą polecenia gcloud firestore operations list możesz wyświetlać postęp eksportu. Zapoznaj się z artykułem o zarządzaniu operacjami eksportowania i importowania.

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

Otwórz przeglądarkę Cloud Storage