Zaplanuj eksport danych

Na tej stronie opisano, jak zaplanować eksport danych Cloud Firestore. Aby eksportować zgodnie z harmonogramem, zalecamy użycie Cloud Functions i Cloud Scheduler.

Zanim zaczniesz

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

  1. Włącz rozliczenia dla swojego projektu Google Cloud. Z funkcji eksportu i importu mogą korzystać tylko projekty Google Cloud z włączonymi rozliczeniami.
  2. Operacje eksportu wymagają docelowego zasobnika Cloud Storage. Utwórz zasobnik Cloud Storage w lokalizacji znajdującej się w pobliżu lokalizacji bazy danych Cloud Firestore . Nie możesz używać segmentu Requester Pays do operacji eksportu.

Utwórz zadanie Cloud Function i Cloud Scheduler

Wykonaj poniższe kroki, aby utworzyć funkcję chmury Node.js, która inicjuje eksport danych Cloud Firestore i zadanie Cloud Scheduler w celu wywołania tej funkcji:

Interfejs wiersza polecenia Firebase
  1. Zainstaluj interfejs wiersza polecenia Firebase . W nowym katalogu zainicjuj interfejs CLI dla Cloud Functions:

    firebase init functions --project PROJECT_ID
    1. Wybierz JavaScript dla języka.
    2. Opcjonalnie włącz ESLint.
    3. Wpisz y , aby zainstalować zależności.
  2. Zastąp kod w pliku functions/index.js następującym 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 zmodyfikuj następujące elementy:
    • Zamień BUCKET_NAME na nazwę swojego segmentu.
    • Modyfikuj every 24 hours , aby ustawić harmonogram eksportu. Użyj składni cron.yaml aplikacji AppEngine lub formatu unix-cron ( * * * * * ).
    • Zmodyfikuj collectionIds: [] aby wyeksportować 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 chmurze
  1. Przejdź do strony Cloud Functions w konsoli GCP:

    Przejdź do Funkcji w chmurze

  2. Kliknij opcję Utwórz funkcję
  3. Wprowadź nazwę funkcji, np. firestoreExport
  4. W obszarze Wyzwalacz wybierz Cloud Pub/Sub
  5. W obszarze Temat wybierz opcję Utwórz nowy temat . Wprowadź nazwę tematu wydawniczego/podrzędnego, np. initiateFirestoreExport . Zanotuj nazwę tematu, ponieważ jest ona potrzebna do utworzenia zadania Cloud Scheduler.
  6. W obszarze Kod źródłowy wybierz opcję Edytor wbudowany . Wpisz następujący 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 następujące elementy:
    • Zamień BUCKET_NAME na nazwę swojego segmentu.
    • Zmodyfikuj collectionIds: [] aby wyeksportować tylko określone grupy kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.

  7. W obszarze package.json dodaj następującą zależność:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. W obszarze Funkcja do wykonania wprowadź scheduledFirestoreExport , czyli nazwę funkcji w index.js .
  9. Kliknij opcję Utwórz , aby wdrożyć funkcję chmury.
Utwórz zadanie Cloud Scheduler

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

  1. Przejdź do strony Cloud Scheduler w konsoli GCP:

    Przejdź do Harmonogramu chmury

  2. Kliknij opcję Utwórz ofertę pracy .
  3. Wprowadź nazwę zadania, np. scheduledFirestoreExport .
  4. Wprowadź Częstotliwość , na przykład every 24 hours .
  5. Wybierz strefę czasową .
  6. W obszarze Cel wybierz Pub/Sub . W polu Temat wprowadź nazwę tematu publikacji/subskrypcji zdefiniowanego wraz z funkcją Cloud, initiateFirestoreExport w powyższym przykładzie.
  7. W polu Ładunek wpisz start export . Zadanie wymaga zdefiniowanego ładunku, ale powyższa funkcja chmury w rzeczywistości nie używa tej wartości.
  8. Kliknij opcję Utwórz .
W tym momencie wdrożyłeś zadanie Cloud Function i Cloud Scheduler, ale Twoja Funkcja Cloud nadal potrzebuje uprawnień dostępu, aby wykonać operacje eksportu.

Skonfiguruj uprawnienia dostępu

Następnie nadaj funkcji Cloud Function uprawnienia do rozpoczęcia operacji eksportu i zapisu do segmentu GCS.

Ta funkcja w chmurze wykorzystuje domyślne konto usługi Twojego projektu do uwierzytelniania i autoryzacji operacji eksportu. Kiedy tworzysz projekt, tworzone jest dla Ciebie domyślne konto usługi o następującej 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 następujące role uprawnień do domyślnego konta usługi:

  • 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 nie zostały jeszcze zainstalowane, możesz uzyskać dostęp do tych narzędzi z Cloud Shell w konsoli Google Cloud Platform:
Uruchom Cloud Shell

  1. Przypisz rolę administratora importu i eksportu Cloud Datastore . Zastąp PROJECT_ID i uruchom następujące polecenie:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. Przypisz rolę administratora magazynu do swojego zasobnika. Zastąp PROJECT_ID i BUCKET_NAME i uruchom następujące 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łączyłeś konto usługi App Engine, możesz je włączyć ponownie, zobacz Włączanie konta usługi . Jeśli w ciągu ostatnich 30 dni usunąłeś swoje konto usługi App Engine, możesz je przywrócić, patrz przywracanie konta usługi .

Przetestuj zadanie Cloud Scheduler i funkcję Cloud

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

  1. Przejdź do strony Cloud Scheduler w konsoli GCP.
    Przejdź do Harmonogramu chmury

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

    Po kilku sekundach zadanie Cloud Scheduler powinno zaktualizować kolumnę wyników do wartości Sukces i Ostatnie uruchomienie do bieżącego czasu. Może być konieczne kliknięcie Odśwież .

Strona Cloud Scheduler potwierdza jedynie, że zadanie nazywa się Twoją funkcją w chmurze. Otwórz stronę Cloud Function, aby zobaczyć logi swojej funkcji.

Wyświetl dzienniki funkcji Cloud

Aby sprawdzić, czy funkcja Cloud pomyślnie rozpoczęła operację eksportu, otwórz dzienniki funkcji:

Konsola Firebase

Przejdź do strony Cloud Functions w konsoli Firebase.

Przejdź do dzienników funkcji

Konsola GCP

Przejdź do strony Cloud Functions w konsoli GCP.

Przejdź do przeglądarki logów

Zobacz postęp eksportu

Możesz użyć polecenia gcloud firestore operations list aby wyświetlić postęp operacji eksportu, zobacz 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