תזמון של ייצוא נתונים

בדף הזה מוסבר איך לתזמן ייצוא של נתוני Firestore. כדי להפעיל ייצוא לפי לוח זמנים, מומלץ להשתמש בפונקציות Cloud Run וב-Cloud Scheduler.

לפני שמתחילים

לפני שמתזמנים ייצוא מנוהל של נתונים, צריך לבצע את המשימות הבאות:

  1. מפעילים את החיוב בפרויקט Google Cloud . אפשר להשתמש בתכונת הייצוא והייבוא רק בפרויקטים שמופעל בהם חיוב. Google Cloud
  2. פעולות ייצוא דורשות קטגוריה של Cloud Storage כיעד. יוצרים קטגוריה של Cloud Storage במיקום שקרוב למיקום של מסד הנתונים של Firestore. אי אפשר להשתמש בקטגוריה שבה מופעלת התכונה 'מגיש הבקשה משלם' לצורך פעולות ייצוא.

יצירת פונקציה של Cloud Functions ומשימה של Cloud Scheduler

כדי ליצור פונקציית Node.js Cloud שתתחיל ייצוא נתונים מ-Firestore ומשימת Cloud Scheduler שתקרא לפונקציה הזו:

Firebase CLI
  1. מתקינים את Firebase CLI. בספרייה חדשה, מפעילים את ה-CLI עבור פונקציות Cloud Run:

    firebase init functions --project PROJECT_ID
    1. בוחרים באפשרות JavaScript כשפה.
    2. אפשר גם להפעיל את ESLint.
    3. מזינים y כדי להתקין יחסי תלות.
  2. מחליפים את הקוד בקובץ 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');
      });
    });
  3. בקוד שלמעלה, משנים את הערכים הבאים:
    • מחליפים את BUCKET_NAME בשם הקטגוריה.
    • מחליפים את YOUR_PROJECT_ID במזהה הפרויקט.
    • משנים את every 24 hours כדי להגדיר את לוח הזמנים של הייצוא. אפשר להשתמש ב תחביר AppEngine cron.yaml או ב פורמט unix-cron ‏ (* * * * *).
    • משנים את collectionIds: [] כדי לייצא רק את הקבוצות של הקולקציות שצוינו. משאירים את ההגדרה כמו שהיא כדי לייצא את כל קבוצות האוספים.

  4. פורסים את הפונקציה המתוזמנת:

    firebase deploy --only functions
מסוףGoogle Cloud
יצירת פונקציה של Cloud Functions
  1. נכנסים לדף Cloud Functions במסוף Google Cloud :

    כניסה לדף Cloud Functions

  2. לוחצים על כתיבת פונקציה.
  3. מזינים שם לפונקציה, למשל firestore-export.
  4. בקטע Trigger בוחרים באפשרות Cloud Pub/Sub.
  5. בקטע נושא, בוחרים באפשרות יצירת נושא חדש. מזינים שם לנושא ב-Pub/Sub, למשל initiateFirestoreExport. חשוב לשים לב לשם הנושא, כי תצטרכו אותו כדי ליצור את העבודה ב-Cloud Scheduler.
  6. בקטע קוד מקור, בוחרים באפשרות עורך מוטבע. מזינים את הקוד הבא מתחת ל-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: [] כדי לייצא רק את הקבוצות של הקולקציות שצוינו. משאירים את ההגדרה כמו שהיא כדי לייצא את כל קבוצות האוספים.

  7. בקטע package.json, מוסיפים את יחסי התלות הבאים:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. בקטע Function to execute, מזינים את scheduledFirestoreExport, שם הפונקציה ב-index.js.
  9. לוחצים על יצירה כדי לפרוס את הפונקציה של Cloud Functions.
יצירת משימה ב-Cloud Scheduler

בשלב הבא, יוצרים משימה ב-Cloud Scheduler שמפעילה את הפונקציה של Cloud Functions:

  1. נכנסים לדף Cloud Scheduler במסוף Google Cloud :

    כניסה ל-Cloud Scheduler

  2. לוחצים על יצירת משימה.
  3. מזינים שם למשימה, למשל scheduledFirestoreExport.
  4. מזינים תדירות, לדוגמה, every 24 hours.
  5. בוחרים אזור זמן.
  6. בקטע Target בוחרים באפשרות Pub/Sub. בשדה Topic, מזינים את השם של נושא ה-pub/sub שהגדרתם לצד פונקציית Cloud, ‏initiateFirestoreExport בדוגמה שלמעלה.
  7. בשדה Payload, מזינים start export. העבודה דורשת מטען ייעודי (payload) מוגדר, אבל הפונקציה של Cloud Functions שלמעלה לא משתמשת בפועל בערך הזה.
  8. לוחצים על יצירה.
בשלב הזה, פרסתם את הפונקציה של Cloud Functions ואת המשימה של Cloud Scheduler, אבל עדיין צריך להגדיר לפונקציה של 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

  1. מקצים את התפקיד 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
  2. מקצים את התפקיד 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 .

  1. נכנסים לדף Cloud Scheduler ב Google Cloud מסוף
    .מעבר אל Cloud Scheduler

  2. בשורה של משימת 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 .

כניסה לדף Logs Viewer

צפייה בהתקדמות הייצוא

אפשר להשתמש בפקודה gcloud firestore operations list כדי לראות את ההתקדמות של פעולות הייצוא. מידע נוסף זמין במאמר בנושא ניהול פעולות ייצוא וייבוא.

אחרי שפעולת הייצוא מסתיימת, אפשר לראות את קובצי הפלט בקטגוריה של Cloud Storage:

פתיחת Cloud Storage browser