בדף הזה מוסבר איך לתזמן את הייצוא של נתוני Cloud Firestore. כדי להריץ פעולות ייצוא לפי לוח זמנים, מומלץ להשתמש ב-Cloud Functions וב-Cloud Scheduler.
לפני שמתחילים
לפני שמתזמנים ייצוא נתונים מנוהלים, צריך להשלים את המשימות הבאות:
- מפעילים את החיוב בפרויקט Google Cloud. אפשר להשתמש בתכונות הייצוא והייבוא רק בפרויקטים של Google Cloud שהחיוב בהם מופעל.
- לפעולות ייצוא נדרשת קטגוריית יעד Cloud Storage. יוצרים קטגוריה Cloud Storage במיקום קרוב למיקום של מסד הנתונים Cloud Firestore. אי אפשר להשתמש בקטגוריה של 'מגיש הבקשה משלם' לצורך פעולות ייצוא.
יצירת פונקציה של Cloud Functions ומשימות Cloud Scheduler
כדי ליצור פונקציית Cloud של 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
כדי להגדיר את לוח הזמנים לייצוא. אפשר להשתמש ב תחביר cron.yaml של AppEngine או ב פורמט unix-cron (* * * * *
). -
משנים את
collectionIds: []
כדי לייצא רק את קבוצות האוספים שצוינו. משאירים את השדה כפי שהוא כדי לייצא את כל האוספים.
- מחליפים את
-
פורסים את הפונקציה המתוזמנת:
firebase deploy --only functions
מסוף Google Cloud
יצירת פונקציה של Cloud Functions
-
נכנסים לדף Cloud Functions במסוף Google Cloud:
- לוחצים על Create Function (יצירת פונקציה).
- צריך להזין שם של פונקציה, כמו
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
. - לוחצים על Create כדי לפרוס את הפונקציה של Cloud Functions.
יצירת משרה מסוג Cloud Scheduler
בשלב הבא יוצרים משימה Cloud Scheduler שמפעילה את הפונקציה של Cloud Functions:
-
נכנסים לדף Cloud Scheduler במסוף Google Cloud:
- לוחצים על Create Job.
- נותנים שם למשימה, למשל
scheduledFirestoreExport
. - מזינים תדירות, למשל
every 24 hours
. - בוחרים אזור זמן.
- בקטע Target (טירגוט), בוחרים באפשרות Pub/Sub. בשדה Topic, מזינים את שם נושא ה-pub/sub שהגדרתם לצד Cloud Function,
initiateFirestoreExport
בדוגמה שלמעלה. - בשדה Payload, מזינים
start export
. המשימה מחייבת הגדרה של מטען ייעודי, אבל בפועל הפונקציה של Cloud Functions שלמעלה לא משתמשת בערך הזה. - לוחצים על יצירה.
הגדרת הרשאות גישה
בשלב הבא, נותנים לפונקציה של Cloud Functions הרשאה להתחיל פעולות ייצוא ולכתוב לקטגוריה שלכם ב-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. מחליפים את 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, לאפליקציה App Engine לא תהיה יותר גישה למסד הנתונים Cloud Firestore. אם השבתתם את חשבון השירות App Engine, תוכלו להפעיל אותו מחדש. תוכלו לקרוא איך עושים את זה במאמר הפעלה של חשבון שירות. אם מחקת את חשבון השירות App Engine ב-30 הימים האחרונים, אפשר לשחזר אותו. אפשר לקרוא איך עושים זאת במאמר ביטול מחיקה של חשבון שירות.
בדיקת המשימה Cloud Scheduler והפונקציה של Cloud Functions
אפשר לבדוק את המשימה Cloud Scheduler בדף Cloud Scheduler במסוף Google Cloud.
נכנסים לדף Cloud Scheduler במסוף Google Cloud.
כניסה לדף Cloud Schedulerבשורה של המשימה החדשה Cloud Scheduler, לוחצים על Run now (הפעלה).
אחרי כמה שניות, המשימה Cloud Scheduler אמורה לעדכן את עמודת התוצאה ל-Success ואת Last run לשעה הנוכחית. יכול להיות שתצטרכו ללחוץ על רענון.
בדף Cloud Scheduler מוצג רק אישור שהמשימה הפעילה את Cloud Function. פותחים את הדף של Cloud Function כדי לראות את היומנים של הפונקציה.
צפייה ביומני Cloud Functions
כדי לבדוק אם הפונקציה של Cloud Functions התחילה בפעולת ייצוא, פותחים את יומני הפונקציה:
מסוף Firebase
עוברים אל הדף Cloud Functions במסוף Firebase.
קונסולת GCP
נכנסים לדף Cloud Functions במסוף Google Cloud.
הצגת התקדמות הייצוא
אפשר להשתמש בפקודה gcloud firestore operations list
כדי לראות את ההתקדמות של פעולות הייצוא. מידע נוסף זמין במאמר ניהול פעולות ייצוא וייבוא.
בסיום פעולת הייצוא, תוכלו לראות את קובצי הפלט בקטגוריה Cloud Storage: