תזמון של ייצוא נתונים
בדף הזה מוסבר איך לתזמן ייצוא של נתוני Firestore. כדי להפעיל ייצוא לפי לוח זמנים, מומלץ להשתמש בפונקציות Cloud Run וב-Cloud Scheduler.
לפני שמתחילים
לפני שמתזמנים ייצוא מנוהל של נתונים, צריך לבצע את המשימות הבאות:
- מפעילים את החיוב בפרויקט Google Cloud . אפשר להשתמש בתכונת הייצוא והייבוא רק בפרויקטים שמופעל בהם חיוב. Google Cloud
- פעולות ייצוא דורשות קטגוריה של Cloud Storage כיעד. יוצרים קטגוריה של Cloud Storage במיקום שקרוב למיקום של מסד הנתונים של Firestore. אי אפשר להשתמש בקטגוריה שבה מופעלת התכונה 'מגיש הבקשה משלם' לצורך פעולות ייצוא.
יצירת פונקציה של Cloud Functions ומשימה של Cloud Scheduler
כדי ליצור פונקציית Node.js Cloud שתתחיל ייצוא נתונים מ-Firestore ומשימת Cloud Scheduler שתקרא לפונקציה הזו:
Firebase CLI
-
מתקינים את Firebase CLI. בספרייה חדשה, מפעילים את ה-CLI עבור פונקציות Cloud Run:
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בשם הקטגוריה. - מחליפים את
YOUR_PROJECT_IDבמזהה הפרויקט. - משנים את
every 24 hoursכדי להגדיר את לוח הזמנים של הייצוא. אפשר להשתמש ב תחביר AppEngine cron.yaml או ב פורמט unix-cron (* * * * *). -
משנים את
collectionIds: []כדי לייצא רק את הקבוצות של הקולקציות שצוינו. משאירים את ההגדרה כמו שהיא כדי לייצא את כל קבוצות האוספים.
- מחליפים את
-
פורסים את הפונקציה המתוזמנת:
firebase deploy --only functions
מסוףGoogle Cloud
יצירת פונקציה של Cloud Functions
-
נכנסים לדף Cloud Functions במסוף Google Cloud :
- לוחצים על כתיבת פונקציה.
- מזינים שם לפונקציה, למשל
firestore-export. - בקטע 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( YOUR_PROJECT_ID, '(default)' ); 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); }); };
- מחליפים את
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. בשדה Topic, מזינים את השם של נושא ה-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, לאפליקציית App Engine לא תהיה יותר גישה למסד הנתונים של 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 אמורה לעדכן את העמודה תוצאה לערך הצלחה ואת העמודה הפעלה אחרונה לערך של השעה הנוכחית. יכול להיות שתצטרכו ללחוץ על רענון.
בדף Cloud Scheduler מוצג רק אישור לכך שהמשימה קראה לפונקציה של Cloud Functions. פותחים את הדף Cloud Function כדי לראות את היומנים של הפונקציה.
צפייה ביומנים של Cloud Functions
כדי לבדוק אם הפונקציה של Cloud Functions התחילה בהצלחה פעולת ייצוא, פותחים את היומנים של הפונקציה:
מסוף Firebase
במסוף Firebase, עוברים אל Hosting & Serverless (אירוח ושרתים וירטואליים) > Functions (פונקציות).
קונסולת GCP
נכנסים לדף Cloud Run functions במסוף Google Cloud .
צפייה בהתקדמות הייצוא
אפשר להשתמש בפקודה gcloud firestore operations list כדי לראות את ההתקדמות של פעולות הייצוא. מידע נוסף זמין במאמר בנושא ניהול פעולות ייצוא וייבוא.
אחרי שפעולת הייצוא מסתיימת, אפשר לראות את קובצי הפלט בקטגוריה של Cloud Storage: