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:
- 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.
- 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ć puli taryfy żądającego do 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
-
Zainstaluj wiersz poleceń Firebase. W nowym katalogu zainicjuj interfejs wiersza poleceń Cloud Functions:
firebase init functions --project PROJECT_ID
- Jako język wybierz JavaScript.
- Opcjonalnie włącz ESLint.
- Aby zainstalować zależności, wpisz
y
.
-
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'); }); });
-
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.
- Zastąp
-
Wdróż zaplanowaną funkcję:
firebase deploy --only functions
Google Cloud Console
Utwórz funkcję w Cloud Functions
-
W konsoli Google Cloud otwórz stronę Cloud Functions:
- Kliknij Utwórz funkcję.
- Wpisz nazwę funkcji, np.
firestoreExport
- W sekcji Aktywator wybierz Cloud Pub/Sub.
- 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. - 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ń te elementy:- Zastąp
BUCKET_NAME
nazwą zasobnika. -
Zmień
collectionIds: []
, aby wyeksportować tylko określone grupy kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.
- Zastąp
- W sekcji
package.json
dodaj tę zależność:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- W polu Funkcja do wykonania wpisz
scheduledFirestoreExport
, czyli nazwę funkcji w plikuindex.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 Topic wpisz nazwę tematu Pub/Sub zdefiniowanego w powiązaniu z funkcją w Cloud Functions (
initiateFirestoreExport
w przykładzie powyżej). - W polu Ładunek wpisz
start export
. Zadaniem jest zdefiniowanie ładunku, ale 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 uruchamiania operacji eksportu i zapisywania danych w zasobniku GCS.
Ta funkcja w Cloud Functions korzysta z domyślnego konta usługi projektu, aby uwierzytelniać i autoryzować operacje 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 uruchamiania operacji eksportu i zapisywania danych w zasobniku Cloud Storage. Aby przyznać te uprawnienia, przypisz domyślnemu kontu usługi te role uprawnień:
Cloud Datastore Import Export Admin
-
rola
Owner
lubStorage 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 konsoli Google Cloud, korzystając z elementu Cloud Shell:
Start Cloud Shell
-
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
-
Przypisz do zasobnika rolę Administrator miejsca na dane. Zastąp wartości PROJECT_ID i BUCKET_NAME i 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 wyłączysz konto usługi App Engine, możesz je ponownie włączyć. W tym celu zobacz 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ć. W tym celu zapoznaj się z artykułem przywracanie usuniętego 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.
W konsoli Google Cloud otwórz stronę Cloud Scheduler.
Otwórz stronę Cloud SchedulerW wierszu nowego zadania Cloud Scheduler kliknij Uruchom teraz.
Po kilku sekundach zadanie Cloud Scheduler powinno zaktualizować kolumnę wyników, aby w kolumnie „Wynik” pojawiła się wartość Sukces, a w kolumnie „Ostatnie uruchomienie” – bieżąca godzina. 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 Cloud Function rozpoczęła operację eksportu, otwórz logi funkcji:
Konsola Firebase
W konsoli Firebase otwórz stronę Cloud Functions.
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 zasobniku Cloud Storage:
Otwórz przeglądarkę Cloud Storage