Na tej stronie opisujemy, jak zaplanować eksportowanie danych z Cloud Firestore. Aby uruchamiać eksporty zgodnie z harmonogramem, zalecamy używanie Cloud Functions i Cloud Scheduler.
Zanim zaczniesz
Zanim zaplanujesz zarządzane eksporty danych, musisz wykonać te czynności:
- Włącz płatności w projekcie Google Cloud projektu. Tylko Google Cloud projekty z włączonymi płatnościami mogą korzystać z funkcji eksportu i importu.
- Operacje eksportu wymagają docelowego zasobnika Cloud Storage. Utwórz zasobnik w lokalizacji zbliżonej do lokalizacji bazy danych.Cloud StorageCloud Firestore W przypadku operacji eksportu nie można używać zasobnika, w którym płaci zamawiający.
Tworzenie funkcji w Cloud Functions i zadania w Cloud Scheduler
Aby utworzyć funkcję w Cloud Functions w Node.js, która inicjuje eksport danych z Cloud Firestore oraz zadanie w Cloud Scheduler, które wywołuje tę funkcję, wykonaj te czynności:
wiersz poleceń Firebase
-
Zainstaluj wiersz poleceń Firebase. W nowym katalogu zainicjuj interfejs wiersza poleceń dla Cloud Functions:
firebase init functions --project PROJECT_ID
- Jako język wybierz JavaScript.
- Opcjonalnie włącz ESLint.
- Wpisz
y, aby zainstalować zależności.
-
Zastąp kod w pliku
functions/index.jstym 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'); }); });
-
W powyższym kodzie zmień te elementy:
- Zastąp
BUCKET_NAMEnazwą swojego zasobnika. - Zastąp
YOUR_PROJECT_IDidentyfikatorem projektu . - Zmień
every 24 hours, aby ustawić harmonogram eksportu. Użyj składni App Engine cron.yaml lub formatu unix-cron (* * * * *). -
Zmień
collectionIds: [], aby eksportować tylko określone grupy kolekcji. Aby wyeksportować wszystkie grupy kolekcji, pozostaw tę wartość bez zmian.
- Zastąp
-
Wdróż zaplanowaną funkcję:
firebase deploy --only functions
Konsola Google Cloud
Tworzenie funkcji w Cloud Functions
-
W konsoli Google Cloud otwórz stronę Cloud Functions:
- Kliknij Napisz funkcję.
- Wpisz nazwę funkcji, np.
firestore-export. - W sekcji Aktywator wybierz Cloud Pub/Sub.
- 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. - W sekcji Kod źródłowy wybierz Edytor wbudowany. Wpisz ten
kod w sekcji
index.js: W powyższym kodzie zmień te elementy:const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { // Access the GCLOUD_PROJECT environment variable set by the runtime. const projectId = process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT; // Use the DATABASE_ID environment variable if set, // otherwise default to '(default)' const databaseId = process.env.DATABASE_ID || '(default)'; const databaseName = client.databasePath( projectId, databaseId ); 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); }); };
- Zastąp
BUCKET_NAMEnazwą swojego zasobnika. -
Zmień
collectionIds: [], aby eksportować tylko określone grupy kolekcji. Aby wyeksportować wszystkie grupy kolekcji, pozostaw tę wartość bez zmian. -
(Opcjonalnie) Jeśli używasz bazy danych innej niż domyślna, podczas tworzenia funkcji w Cloud Functions ustaw zmienną środowiskową
DATABASE_ID. Jeśli używasz środowiska wykonawczego, w którymGOOGLE_CLOUD_PROJECTnie jest ustawiana automatycznie, może być konieczne ręczne ustawienie tej zmiennej lub zastąpienie jej identyfikatorem projektu w kodzie.
- Zastąp
- W sekcji
package.jsondodaj tę zależność:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - W sekcji Funkcja do wykonania wpisz
scheduledFirestoreExport– nazwę funkcji windex.js. - 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:
-
W konsoli Google Cloud otwórz stronę Cloud Scheduler:
- Kliknij Utwórz zadanie.
- Wpisz Nazwę zadania, np.
scheduledFirestoreExport. - Wpisz Częstotliwość, np.
every 24 hours. - Wybierz Strefę czasową.
- W sekcji Miejsce docelowe wybierz Pub/Sub. W polu Temat wpisz nazwę tematu Pub/Sub, który został zdefiniowany razem z funkcją w Cloud Functions, czyli w poprzednim przykładzie
initiateFirestoreExport. - W polu Payload wpisz
start export. Zadanie wymaga zdefiniowania payloadu, ale poprzednia funkcja w Cloud Functions nie używa tej wartości. - Kliknij Utwórz.
Konfigurowanie uprawnień dostępu
Następnie przyznaj funkcji w Cloud Functions uprawnienia do rozpoczynania operacji eksportu i zapisywania w zasobniku GCS.
Ta funkcja Cloud Run używa konta usługi do uwierzytelniania i autoryzowania operacji eksportu. Używane konto usługi zależy od Twojej Cloud Functions konfiguracji:
- Cloud Functions (1 generacji): Używa App Engine domyślnego
konta usługi:
PROJECT_ID@appspot.gserviceaccount.com - Cloud Functions (2 generacji): Używa domyślnego Compute Engine
konta usługi:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
To konto usługi wymaga uprawnień do rozpoczęcia operacji eksportu i zapisywania w zasobniku Cloud Storage. Aby przyznać te uprawnienia, przypisz do konta usługi te role uprawnień:
Cloud Datastore Import Export Admin- rola
Storage Adminw zasobniku Cloud Run Invoker(wymagana w przypadku Cloud Functions (2 generacji), aby usługa wywołująca mogła wywoływać funkcję)
Do przypisywania tych ról możesz używać narzędzi wiersza poleceń gcloud i gsutil.
Jeśli nie masz jeszcze zainstalowanych tych
narzędzi, możesz uzyskać do nich dostęp w Cloud Shell w konsoli Google Cloud:
Uruchom Cloud Shell
-
Przypisz rolę Administrator eksportu i importu w Cloud Datastore. Zastąp PROJECT_ID i SERVICE_ACCOUNT (np.
PROJECT_ID@appspot.gserviceaccount.comlubPROJECT_NUMBER-compute@developer.gserviceaccount.com) i uruchom to polecenie:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/datastore.importExportAdmin -
Przypisz rolę Administrator Storage w zasobniku. Zastąp SERVICE_ACCOUNT i BUCKET_NAME, i uruchom to polecenie:
gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \ gs://BUCKET_NAME -
(W przypadku Cloud Functions (2 generacji)) Przypisz do konta usługi rolę Cloud Run Wywołujący. Zastąp PROJECT_ID i SERVICE_ACCOUNT, i uruchom to polecenie:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/run.invoker
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 wyłączysz konto usługi App Engine, możesz je ponownie włączyć. Więcej informacji znajdziesz w artykule 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ć. Więcej informacji znajdziesz w artykule Przywracanie usuniętego konta usługi.
Testowanie zadania w Cloud Scheduler i funkcji w Cloud
Zadanie Cloud Scheduler możesz przetestować na stronie Cloud Scheduler w konsoli Google Cloud.
W konsoli Google Cloud otwórz stronę Cloud Scheduler.
Otwórz Cloud SchedulerW wierszu nowego zadania Cloud Scheduler kliknij Uruchom teraz.
Po kilku sekundach zadanie Cloud Scheduler powinno zaktualizować kolumnę Wynik do wartości Sukces, a kolumnę Ostatnie uruchomienie do bieżącej godziny. Może być konieczne kliknięcie Odśwież.
Strona Cloud Scheduler potwierdza tylko, że zadanie wywołało Twoją funkcję w Cloud Functions. Aby wyświetlić logi funkcji, otwórz stronę Cloud Functions.
Wyświetlanie logów funkcji w Cloud Functions
Aby sprawdzić, czy funkcja w Cloud Functions pomyślnie rozpoczęła operację eksportu, otwórz logi funkcji:
Konsola Firebase
W konsoli Firebase otwórz Hosting i usługi bezserwerowe > Funkcje.
Konsola GCP
W konsoli Google Cloud otwórz stronę Cloud Functions.
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 swoim Cloud Storage zasobniku:
Otwórz przeglądarkę Cloud Storage