Planowanie eksportu danych

Na tej stronie dowiesz się, jak zaplanować eksportowanie danych Cloud Firestore. Aby uruchamiać eksporty zgodnie z harmonogramem, zalecamy korzystanie z Cloud FunctionsCloud Scheduler.

Zanim zaczniesz

Przed zaplanowaniem eksportu zarządzanych danych należy wykonać następujące zadania:

  1. Włącz rozliczanie dla swojego projektu Google Cloud. Tylko Google Cloud projektów z włączonym rozliczaniem może korzystać z funkcji eksportu i importu.
  2. Operacje eksportowania wymagają zasobnika docelowego Cloud Storage. Utwórz Cloud Storagezasobnik w lokalizacji w pobliżu Cloud Firestorelokalizacji bazy danych. Nie można używać kontenera Requester Pays w przypadku operacji eksportowych.

Tworzenie funkcji w Cloud Functions i zadania Cloud Scheduler

Wykonaj poniższe kroki, aby utworzyć funkcję Node.js Cloud Function, która inicjuje eksport danych Cloud Firestore, oraz zadanie Cloud Scheduler wywołujące tę funkcję:

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

    firebase init functions --project PROJECT_ID
    1. Wybierz język JavaScript.
    2. Opcjonalnie możesz włączyć ESLint.
    3. Wpisz y, aby zainstalować zależności.
  2. Zastąp kod w pliku functions/index.js tym kodem:

    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ń te elementy:
    • Zastąp BUCKET_NAME nazwą zasobnika.
    • Zastąp YOUR_PROJECT_ID identyfikatorem projektu.
    • Kliknij every 24 hours, aby ustawić harmonogram eksportu. Użyj składni pliku cron.yaml App Engine lub formatu unix-cron (* * * * *).
    • Zmodyfikuj wartość collectionIds: [], aby wyeksportować tylko określone grupy kolekcji. Pozostaw to pole bez zmian, aby wyeksportować wszystkie grupy kolekcji.

  4. Wdróż zaplanowaną funkcję:

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

    Otwórz Cloud Functions

  2. Kliknij Napisz funkcję
  3. Wpisz nazwę funkcji, np. firestore-export.
  4. W obszarze Wyzwalacz wybierz opcję Cloud Pub/Sub
  5. W sekcji Temat wybierz Utwórz nowy temat. Wprowadź nazwę tematu pub/sub, np. initiateFirestoreExport. Zanotuj nazwę tematu, ponieważ będzie Ci 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(
        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);
        });
    };
    W powyższym kodzie zmień te elementy:
    • Zastąp BUCKET_NAME nazwą zasobnika.
    • Zmodyfikuj wartość collectionIds: [], aby wyeksportować tylko określone grupy kolekcji. Pozostaw to pole bez zmian, aby wyeksportować wszystkie grupy kolekcji.

  7. W sekcji 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 index.js.
  9. Aby wdrożyć funkcję Cloud, kliknij Utwórz.
Tworzenie zadania Cloud Scheduler

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

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

    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 Temat wpisz nazwę tematu Pub/Sub zdefiniowanego razem z funkcją w Cloud Functions, initiateFirestoreExport jak w przykładzie powyżej.
  7. W polu Payload (Ładunek) wpisz start export. Zadanie wymaga zdefiniowania ładunku, ale funkcja Cloud Functions powyżej w rzeczywistości nie wykorzystuje tej wartości.
  8. Kliknij Utwórz.
Na tym etapie wdrożyłeś funkcję Cloud Functions i zadanie Cloud Scheduler, ale funkcja Cloud Functions nadal potrzebuje uprawnień dostępu, aby wykonywać operacje eksportu.

Konfigurowanie uprawnień dostępu

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

Ta funkcja Cloud Functions używa domyślnego konta usługi projektu do uwierzytelniania i autoryzowania operacji eksportowania. Gdy utworzysz projekt, zostanie dla Ciebie utworzone domyślne konto usługi o tej nazwie:

PROJECT_ID@appspot.gserviceaccount.com

To konto usługi wymaga uprawnień do rozpoczęcia operacji eksportowania i do zapisu w zasobniku Cloud Storage. Aby przyznać te uprawnienia, przypisz do domyślnego konta usługi te role uprawnień:

  • Cloud Datastore Import Export Admin
  • rolę Owner lub Storage Admin w zasobniku.

Aby przypisać te role, 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, klikając Cloud Shell:
Uruchom Cloud Shell

  1. Przypisz rolę Administrator importu i eksportu usługi 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 magazynu do swojego kontenera. Zastąp PROJECT_IDBUCKET_NAME i uruchom to polecenie:

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

Jeśli wyłączysz lub usuniesz App Enginedomyślne konto usługi, TwojaApp Engine aplikacja utraci dostęp do bazy danych Cloud Firestore. Jeśli wyłączysz konto usługi App Engine, możesz je ponownie włączyć. Zobacz włączanie konta usługi. Jeśli usunąłeś konto usługi App Engine w ciągu ostatnich 30 dni, możesz je przywrócić. Więcej informacji znajdziesz w artykule Przywracanie konta usługi.

Przetestuj swoje zadanie Cloud Scheduler i funkcję w chmurze

Możesz przetestować zadanie Cloud Scheduler na stronie Cloud Scheduler 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 do wartości Sukces, a kolumnę Ostatnie uruchomienie do bieżącego czasu. Może być konieczne kliknięcie przycisku 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 wyświetlić logi funkcji.

Wyświetl dzienniki funkcji w chmurze

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

Konsola Firebase

Przejdź do strony Cloud Functions w konsoli Firebase.

Otwórz logi funkcji

konsola GCP

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

Przejdź do przeglądarki logów

Wyświetlanie postępu eksportu

Aby wyświetlić postęp operacji eksportowania, użyj polecenia gcloud firestore operations list. Więcej informacji znajdziesz w artykule zarządzanie operacjami eksportowania i importowania.

Po zakończeniu operacji eksportowania możesz wyświetlić pliki wyjściowe w swoim Cloud Storagezasobniku:

Otwórz Cloud Storage przeglądarkę