בדף הזה מוסבר איך לתזמן את הייצוא של נתוני Cloud Firestore. כדי להריץ פעולות ייצוא לפי לוח זמנים, מומלץ להשתמש ב-Cloud Functions וב-Cloud Scheduler.
לפני שמתחילים
לפני שמתזמנים ייצוא של נתונים מנוהלים, צריך לבצע את המשימות הבאות:
- מפעילים את החיוב בפרויקט Google Cloud. אפשר להשתמש בתכונות הייצוא והייבוא רק בפרויקטים של Google Cloud שהחיוב בהם מופעל.
- כדי לבצע פעולות ייצוא, נדרש קטגוריה Cloud Storage של יעד. יוצרים קטגוריה Cloud Storage במיקום ליד המיקום של מסד הנתונים Cloud Firestore. אי אפשר להשתמש בקטגוריה של 'מגיש הבקשה משלם' לצורך פעולות ייצוא.
יצירת פונקציה של Cloud Functions ומשימות Cloud Scheduler
כדי ליצור פונקציית Cloud Functions ב-Node.js שמפעילה ייצוא נתונים של Cloud Firestore ומשימות Cloud Scheduler כדי לקרוא לפונקציה הזו:
Firebase CLI
-
מתקינים את ה-CLI של Firebase. בספרייה חדשה, מאתחלים את ה-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.
- נותנים שם Name למשימה, למשל
scheduledFirestoreExport
. - מזינים תדירות, למשל
every 24 hours
. - בוחרים אזור זמן.
- בקטע Target בוחרים באפשרות Pub/Sub. בשדה Topic, מזינים את שם נושא ה-pub/sub שהגדרתם לצד Cloud Function,
initiateFirestoreExport
בדוגמה שלמעלה. - בשדה Payload, מזינים
start export
. המשימה מחייבת הגדרה של מטען ייעודי, אבל בפועל הפונקציה של Cloud Functions שלמעלה לא משתמשת בערך הזה. - לוחצים על יצירה.
הגדרת הרשאות גישה
בשלב הבא, נותנים ל-Cloud Function הרשאה להתחיל פעולות ייצוא ולכתוב בקטגוריה של 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, לוחצים על הפעלה מיידית.
אחרי כמה שניות, המשימה 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: