Na tej stronie dowiesz się, jak zaplanować eksporty Dane Cloud Firestore. Aby eksportować dane zgodnie z harmonogramem, zalecamy za pomocą Cloud Functions i Cloud Scheduler.
Zanim zaczniesz
Zanim zaplanujesz eksport zarządzanych danych, musisz wykonać te czynności:
- Włącz płatności za projekt Google Cloud. Tylko Google Cloud w projektach z włączonymi płatnościami można korzystać z funkcji eksportowania i importowania.
- Operacje eksportu wymagają docelowego zasobnika Cloud Storage. Utwórz zasobnik Cloud Storage w pobliżu Cloud Firestore lokalizacji bazy danych. Nie możesz eksportować danych z zasobnika Żądający płaci operacji.
Tworzenie funkcji w Cloud Functions i zadania Cloud Scheduler
Wykonaj te czynności, aby utworzyć funkcję w Cloud Functions w Node.js, która inicjuje eksport danych Cloud Firestore oraz zadanie Cloud Scheduler aby wywołać tę funkcję:
wiersz poleceń Firebase
-
Zainstaluj interfejs wiersza poleceń Firebase. W nowym katalogu zainicjuj interfejs wiersza poleceń dla Funkcje w Cloud Functions:
firebase init functions --project PROJECT_ID
- Wybierz JavaScript jako język.
- Opcjonalnie włącz ESLint.
- Wpisz
y
, aby zainstalować zależności.
-
Zastąp kod w pliku
functions/index.js
: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 zmodyfikuj te elementy:
- Zastąp
BUCKET_NAME
nazwą swojego zasobnika. - Aby ustawić harmonogram eksportowania, zmień
every 24 hours
. Użyj jednej składni cron.yaml AppEngine lub format unix-cron (* * * * *
). -
Zmodyfikuj
collectionIds: []
, aby eksportować tylko określone grup kolekcji. Pozostaw bez zmian, aby wyeksportować wszystkie kolekcje.
- Zastąp
-
Wdróż zaplanowaną funkcję:
firebase deploy --only functions
konsola GCP
Utwórz funkcję w Cloud Functions
-
Otwórz stronę Cloud Functions w konsoli GCP:
- Kliknij Utwórz funkcję.
- Wpisz nazwę funkcji, np.
firestoreExport
- W sekcji Aktywator wybierz Cloud Pub/Sub
- W sekcji Temat wybierz Utwórz nowy temat. Wpisz nazwę dla
temat Pub/Sub, na przykład
initiateFirestoreExport
. Zanotuj nazwę tematu jako potrzebujesz go do utworzenia zadania Cloud Scheduler. - W sekcji Source code (Kod źródłowy) wybierz Wbudowany edytor. Wpisz wartość
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 grup 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 sekcji Funkcja do wykonania wpisz
scheduledFirestoreExport
, nazwa funkcji windex.js
. - 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:
-
Otwórz stronę Cloud Scheduler w konsoli GCP:
- 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 zdefiniowanego obok Twojego
Funkcja w Cloud Functions,
initiateFirestoreExport
w przykładzie powyżej. - W polu Ładunek wpisz
start export
. Zadanie wymaga zdefiniowanego ładunku, ale powyższa funkcja w Cloud Functions nie używać tego . - Kliknij Utwórz.
Konfigurowanie uprawnień dostępu
Następnie przyznaj funkcji w Cloud Functions uprawnienia do rozpoczęcia eksportu i zapisywać je w zasobniku GCS.
Ta funkcja w Cloud Functions używa domyślnego konta usługi Twojego projektu do: uwierzytelniać i autoryzować operacje eksportu. Podczas tworzenia projektu zostanie dla Ciebie utworzone domyślne konto usługi o tej nazwie:
PROJECT_ID@appspot.gserviceaccount.com
To konto usługi wymaga uprawnień, aby rozpocząć eksportowanie i zapisu w zasobniku Cloud Storage. Aby przyznać te uprawnienia uprawnienia, przypisz do domyślnego konta usługi te role uprawnień:
Cloud Datastore Import Export Admin
-
Rola
Owner
lubStorage Admin
w zasobniku
Możesz użyć wiersza poleceń gcloud
i gsutil
za pomocą narzędzi do przypisywania tych ról.
Jeśli te aplikacje nie zostały jeszcze zainstalowane,
narzędzia z Cloud Shell w konsoli Google Cloud Platform:
Uruchom Cloud Shell
-
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
-
Przypisz do zasobnika rolę Administrator miejsca na dane. Zastąp PROJECT_ID i BUCKET_NAME, a następnie uruchom następujące polecenia 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 włączyć ponownie, zapoznaj się z sekcją poświęconą 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 przywrócić konto usługi, przywrócenie konta usługi.
Testowanie zadania Cloud Scheduler i funkcji w Cloud Functions
Zadanie Cloud Scheduler możesz przetestować na stronie Cloud Scheduler w w konsoli Google Cloud Platform.
Otwórz stronę Cloud Scheduler w konsoli GCP.
Otwórz Cloud SchedulerW wierszu nowego zadania Cloud Scheduler kliknij Uruchom teraz.
Po kilku sekundach zadanie Cloud Scheduler powinno zaktualizować wynik na Sukces i Ostatnie uruchomienie do aktualnej godziny. Może być konieczne aby kliknąć Odśwież.
Strona Cloud Scheduler potwierdza tylko, że zadanie wywołało 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 logi funkcji:
Konsola Firebase
Otwórz stronę Cloud Functions w konsoli Firebase.
konsola GCP
W konsoli GCP otwórz stronę Cloud Functions.
Wyświetl postęp eksportu
Za pomocą polecenia gcloud firestore operations list
możesz wyświetlić
postępów w operacjach eksportu, patrz
zarządzaniem operacjami eksportu i importu.
Po zakończeniu eksportu pliki wyjściowe można wyświetlić w Zasobnik Cloud Storage:
Otwórz przeglądarkę Cloud Storage