בדף הזה מוסבר איך לתזמן ייצוא של נתוני Cloud Firestore. כדי להריץ ייצוא לפי לוח זמנים, מומלץ להשתמש ב-Cloud Functions וב-Cloud Scheduler.
לפני שמתחילים
לפני שתתזמנו ייצוא מנוהל של נתונים, תצטרכו לבצע את המשימות הבאות:
- מפעילים את החיוב בפרויקט Google Cloud. Google Cloud אפשר להשתמש בתכונת הייצוא והייבוא רק בפרויקטים שמופעל בהם חיוב.
- פעולות ייצוא דורשות מאגר Cloud Storage. יוצרים Cloud Storage bucket במיקום שקרוב למיקום מסד הנתונים שלכם.Cloud Firestore אי אפשר להשתמש בקטגוריה שבה מופעלת התכונה 'מגיש הבקשה משלם' לצורך פעולות ייצוא.
יצירת פונקציה של Cloud Functions ומשימת Cloud Scheduler
כדי ליצור פונקציית Cloud Functions ב-Node.js שמפעילה ייצוא נתונים של Cloud Firestore ועבודת Cloud Scheduler לקריאה לפונקציה הזו:
Firebase CLI
-
מתקינים את Firebase CLI. בספרייה חדשה, מאתחלים את ה-CLI עבור Cloud Functions:
firebase init functions --project PROJECT_ID
- בוחרים באפשרות JavaScript כשפה.
- אפשר גם להפעיל את ESLint.
- מזינים
y
כדי להתקין יחסי תלות.
-
מחליפים את הקוד בקובץ
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'); }); });
-
בקוד שלמעלה, משנים את הערכים הבאים:
- מחליפים את
BUCKET_NAME
בשם הקטגוריה. - משנים את
every 24 hours
כדי להגדיר את לוח הזמנים של הייצוא. אפשר להשתמש ב תחביר AppEngine cron.yaml או ב פורמט unix-cron (* * * * *
). -
משנים את
collectionIds: []
כדי לייצא רק את הקבוצות של הקולקציות שצוינו. כדי לייצא את כל האוספים, משאירים את השדה כמו שהוא.
- מחליפים את
-
פורסים את הפונקציה המתוזמנת:
firebase deploy --only functions
מסוף Google Cloud
יצירת פונקציה של Cloud Functions
-
נכנסים לדף Cloud Functions במסוף Google Cloud:
- לוחצים על יצירת פונקציה.
- מזינים שם לפונקציה, כמו
firestoreExport
- בקטע Trigger בוחרים באפשרות Cloud Pub/Sub.
- בקטע נושא, בוחרים באפשרות יצירת נושא חדש. מזינים שם לנושא ב-Pub/Sub, למשל
initiateFirestoreExport
. חשוב לשים לב לשם הנושא, כי תצטרכו אותו כדי ליצור את משימת Cloud Scheduler. - בקטע קוד מקור, בוחרים באפשרות עורך מוטבע. מזינים את הקוד הבא בקטע
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); }); };
- מחליפים את
BUCKET_NAME
בשם הקטגוריה. -
משנים את
collectionIds: []
כדי לייצא רק את הקבוצות של הקולקציות שצוינו. כדי לייצא את כל האוספים, משאירים את השדה כמו שהוא.
- מחליפים את
- בקטע
package.json
, מוסיפים את יחסי התלות הבאים:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- בקטע Function to execute, מזינים
scheduledFirestoreExport
, השם של הפונקציה ב-index.js
. - לוחצים על יצירה כדי לפרוס את הפונקציה של Cloud Functions.
יצירת משרה Cloud Scheduler
בשלב הבא, יוצרים משימת Cloud Scheduler שקוראת לפונקציה של Cloud Functions:
-
נכנסים לדף Cloud Scheduler במסוף Google Cloud:
- לוחצים על יצירת משימה.
- מזינים שם לעבודה, למשל
scheduledFirestoreExport
. - מזינים תדירות, לדוגמה,
every 24 hours
. - בוחרים אזור זמן.
- בקטע Target בוחרים באפשרות Pub/Sub. בשדה נושא, מזינים את השם של נושא pub/sub שהגדרתם לצד פונקציית Cloud,
initiateFirestoreExport
בדוגמה שלמעלה. - בשדה Payload, מזינים
start export
. העבודה דורשת מטען ייעודי (payload) מוגדר, אבל הפונקציה של Cloud Functions שלמעלה לא משתמשת בפועל בערך הזה. - לוחצים על יצירה.
הגדרת הרשאות גישה
בשלב הבא, נותנים לפונקציית Cloud הרשאה להתחיל פעולות ייצוא ולכתוב לקטגוריה ב-GCS.
הפונקציה הזו של Cloud Functions משתמשת בחשבון השירות שמוגדר כברירת מחדל בפרויקט כדי לבצע אימות והרשאה של פעולות הייצוא. כשיוצרים פרויקט, נוצר בשבילכם חשבון שירות שמוגדר כברירת מחדל עם השם הבא:
PROJECT_ID@appspot.gserviceaccount.com
חשבון השירות הזה דורש הרשאה כדי להתחיל פעולת ייצוא וכדי לכתוב לקטגוריית Cloud Storage שלכם. כדי לתת את ההרשאות האלה, צריך להקצות לחשבון השירות שמוגדר כברירת מחדל את תפקידי ה-IAM הבאים:
Cloud Datastore Import Export Admin
-
תפקיד
Owner
אוStorage Admin
בקטגוריה
אפשר להשתמש בכלי שורת הפקודה gcloud
ו-gsutil
כדי להקצות את התפקידים האלה.
אם עדיין לא התקנתם את הכלים האלה, אתם יכולים לגשת אליהם מCloud Shell במסוף Google Cloud:
התחלה Cloud Shell
-
מקצים את התפקיד Cloud Datastore Import Export Admin. מחליפים את PROJECT_ID ומריצים את הפקודה הבאה:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
-
מקצים את התפקיד Storage Admin בקטגוריה. מחליפים את PROJECT_ID ואת BUCKET_NAME, ומריצים את הפקודה הבאה:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
אם משביתים או מוחקים את חשבון השירות שמוגדר כברירת מחדל ב-App Engine, האפליקציה מאבדת את הגישה למסד הנתונים של Cloud Firestore.App Engine אם השבתתם את חשבון השירות App Engine, אתם יכולים להפעיל אותו מחדש. כך מפעילים חשבון שירות. אם מחקתם את חשבון השירות App Engine ב-30 הימים האחרונים, תוכלו לשחזר אותו. למידע נוסף, ראו שחזור חשבון שירות.
בדיקת המשימה Cloud Scheduler והפונקציה של Cloud Functions
אפשר לבדוק את עבודת ה-Cloud Scheduler בדף Cloud Scheduler במסוף Google Cloud.
נכנסים לדף Cloud Scheduler במסוף Google Cloud.
עוברים אל Cloud Schedulerבשורה של משימת Cloud Scheduler החדשה, לוחצים על הפעלה מיידית.
אחרי כמה שניות, העבודה Cloud Scheduler אמורה לעדכן את התוצאה בעמודה Success ואת Last run לשעה הנוכחית. יכול להיות שתצטרכו ללחוץ על רענון.
בדף Cloud Scheduler מוצג רק אישור לכך שהעבודה קראה לפונקציית Cloud. פותחים את הדף Cloud Function כדי לראות את היומנים של הפונקציה.
צפייה ביומני הרישום של Cloud Functions
כדי לבדוק אם הפונקציה של Cloud Functions התחילה בהצלחה פעולת ייצוא, פותחים את היומנים של הפונקציה:
מסוף Firebase
עוברים לדף Cloud Functions במסוף Firebase.
קונסולת GCP
נכנסים לדף Cloud Functions במסוף Google Cloud.
צפייה בהתקדמות הייצוא
אפשר להשתמש בפקודה gcloud firestore operations list
כדי לראות את ההתקדמות של פעולות הייצוא. מידע נוסף זמין במאמר בנושא ניהול פעולות ייצוא וייבוא.
אחרי שפעולת הייצוא מסתיימת, אפשר לראות את קובצי הפלט בדלי Cloud Storage:
פותחים את הדפדפן Cloud Storage.