Na tej stronie dowiesz się, jak zaplanować eksportowanie danych Cloud Firestore. Aby uruchamiać eksporty zgodnie z harmonogramem, zalecamy korzystanie z 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. Tylko projekty Google Cloud z włączonymi płatnościami mogą korzystać z funkcji eksportowania i importowania.
- Operacje eksportowania wymagają zasobnika docelowego Cloud Storage. Utwórz Cloud Storagezasobnik w lokalizacji w pobliżu lokalizacji Cloud Firestorebazy danych. Nie możesz używać zasobnika Żądający płaci do operacji eksportu.
Utwórz funkcję w Cloud Functions i zadanieCloud Scheduler
Aby utworzyć funkcję Cloud Functions w Node.js, która inicjuje eksport danych Cloud Firestore i zadanie Cloud Scheduler wywołujące tę funkcję, wykonaj te czynności:
wiersz poleceń Firebase
-
Zainstaluj wiersz poleceń Firebase. W nowym katalogu zainicjuj interfejs CLI dla Cloud Functions:
firebase init functions --project PROJECT_ID
- Wybierz język 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ą zasobnika. - Zastąp
YOUR_PROJECT_IDidentyfikatorem projektu. - Zmodyfikuj
every 24 hours, aby ustawić harmonogram eksportu. Użyj składni pliku cron.yaml App Engine lub formatu unix-cron (* * * * *). -
Zmodyfikuj
collectionIds: [], aby wyeksportować tylko określone grupy kolekcji. Pozostaw to pole bez zmian, aby wyeksportować wszystkie grupy kolekcji.
- Zastąp
-
Wdróż zaplanowaną funkcję:
firebase deploy --only functions
Konsola Google Cloud
Utwórz funkcję w Cloud Functions
-
Otwórz stronę Cloud Functions w konsoli Google Cloud:
- 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 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ą zasobnika. -
Zmodyfikuj
collectionIds: [], aby wyeksportować tylko określone grupy kolekcji. Pozostaw to pole bez zmian, aby wyeksportować wszystkie grupy kolekcji. -
(Opcjonalnie) Jeśli używasz niestandardowej bazy danych, podczas tworzenia funkcji Cloud ustaw zmienną środowiskową
DATABASE_ID. Jeśli używasz środowiska wykonawczego, w którym zmiennaGOOGLE_CLOUD_PROJECTnie jest ustawiana automatycznie, możesz też ustawić ją ręcznie lub zastąpić ją w kodzie identyfikatorem projektu.
- Zastąp
- W sekcji
package.jsondodaj tę zależność:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - W polu Funkcja do wykonania wpisz
scheduledFirestoreExport, czyli nazwę funkcji windex.js. - 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:
-
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 zdefiniowanego razem z funkcją w Cloud Functions, czyli
initiateFirestoreExportw poprzednim przykładzie. - W polu Payload (Ładunek) wpisz
start export. Zadanie wymaga zdefiniowania ładunku, ale poprzedzająca je 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 eksportowania i zapisywania w zasobniku GCS.
Ta funkcja Cloud Run używa konta usługi do uwierzytelniania i autoryzowania operacji eksportowania. Używane konto usługi zależy od Cloud Functionskonfiguracji:
- Cloud Functions (1 generacji): używa App Enginedomyślnego konta usługi:
PROJECT_ID@appspot.gserviceaccount.com - Cloud Functions (2 generacji): używa domyślnego Compute Enginekonta usługi:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
To konto usługi musi mieć uprawnienia do rozpoczęcia operacji eksportowania i do zapisywania danych w zasobniku Cloud Storage. Aby przyznać te uprawnienia, przypisz do konta usługi te role uprawnień:
Cloud Datastore Import Export AdminStorage Adminrola w zasobniku.Cloud Run Invoker(Wymagany w przypadku funkcji Cloud Functions 2 generacji, aby usługa wywołująca mogła wywołać funkcję)
Do przypisywania tych ról możesz używać narzędzi wiersza poleceń gcloud i gsutil.
Jeśli nie są jeszcze zainstalowane, 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 pamięci masowej 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ącego. 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 App Enginedomyślne konto usługiApp Engine, Twoja aplikacja utraci dostęp do bazy danych Cloud Firestore. Jeśli konto usługi App Engine zostało wyłączone, możesz je ponownie włączyć. 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ć. Więcej informacji znajdziesz w artykule przywracanie usuniętego konta usługi.
Testowanie zadania Cloud Scheduler i funkcji Cloud
Możesz przetestować Cloud Scheduler zadanie 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ów do wartości Sukces, a kolumnę Ostatnie uruchomienie do bieżącego czasu. Może być konieczne kliknięcie Odśwież.
Strona Cloud Scheduler potwierdza tylko, że zadanie wywołało funkcję w Cloud Functions. Otwórz stronę funkcji w Cloud Functions, aby wyświetlić logi funkcji.
Wyświetlanie logów funkcji w Cloud Functions
Aby sprawdzić, czy funkcja Cloud Function rozpoczęła operację eksportu, otwórz logi funkcji:
Konsola Firebase
W konsoli Firebase kliknij Hosting i usługi bezserwerowe > Funkcje.
konsola GCP
W konsoli Google Cloud otwórz stronę Cloud Functions.
Wyświetlanie postępu eksportowania
Aby wyświetlić postęp operacji eksportowania, możesz użyć polecenia gcloud firestore operations list. Więcej informacji znajdziesz w artykule Zarządzanie operacjami eksportowania i importowania.
Po zakończeniu eksportowania możesz wyświetlić pliki wyjściowe w zasobniku Cloud Storage:
Otwórz Cloud Storage przeglądarkę