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

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

לפני שאתה מתחיל

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

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

צור פונקציית ענן ועבודת מתזמן ענן

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

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

    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 בשם הדלי שלך.
    • שנה every 24 hours כדי להגדיר את לוח הזמנים של הייצוא שלך. השתמש בתחביר AppEngine cron.yaml או בפורמט unix-cron ( * * * * * ).
    • שנה collectionIds: [] כדי לייצא רק את קבוצות האוסף שצוינו. השאר כפי שהוא כדי לייצא את כל האוספים.

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

    firebase deploy --only functions
מסוף GCP
צור פונקציית ענן
  1. עבור לדף פונקציות ענן במסוף GCP:

    עבור אל פונקציות ענן

  2. לחץ על צור פונקציה
  3. הזן שם פונקציה כגון firestoreExport
  4. תחת טריגר , בחר Cloud Pub/Sub
  5. תחת נושא , בחר צור נושא חדש . הזן שם לנושא הפאב/משנה, כגון 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(
        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: [] כדי לייצא רק את קבוצות האוסף שצוינו. השאר כפי שהוא כדי לייצא את כל האוספים.

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

לאחר מכן, צור משימת Cloud Scheduler שקוראת לפונקציית הענן שלך:

  1. עבור לדף מתזמן הענן במסוף GCP:

    עבור אל Cloud Scheduler

  2. לחץ על צור עבודה .
  3. הזן שם עבור העבודה כגון scheduledFirestoreExport .
  4. הזן תדירות , לדוגמה, every 24 hours .
  5. בחר אזור זמן .
  6. תחת יעד , בחר Pub/Sub . בשדה נושא , הזן את שם הפאב/נושא המשנה שהגדרת לצד פונקציית הענן שלך, initiateFirestoreExport בדוגמה למעלה.
  7. בשדה מטען , הזן start export . העבודה דורשת מטען שהוגדר, אך פונקציית הענן שלמעלה אינה משתמשת בעצם בערך זה.
  8. לחץ על צור .
בשלב זה, פרסתם את עבודת הענן פונקציית ו-Cloud Scheduler, אך פונקציית הענן שלכם עדיין זקוקה להרשאות גישה כדי לבצע פעולות ייצוא.

הגדר הרשאות גישה

לאחר מכן, תן ל-Cloud Function הרשאה להתחיל פעולות ייצוא ולכתוב לדלי GCS שלך.

פונקציית ענן זו משתמשת בחשבון שירות ברירת המחדל של הפרויקט שלך כדי לאמת ולאשר את פעולות הייצוא שלו. כאשר אתה יוצר פרויקט, נוצר עבורך חשבון שירות ברירת מחדל בשם הבא:

PROJECT_ID@appspot.gserviceaccount.com

חשבון שירות זה דורש הרשאה כדי להתחיל פעולת ייצוא ולכתוב ל-Cloud Storage bucket שלך. כדי להעניק הרשאות אלה, הקצה את תפקידי IAM הבאים לחשבון השירות המוגדר כברירת מחדל:

  • Cloud Datastore Import Export Admin
  • תפקיד Owner או Storage Admin בדלי

אתה יכול להשתמש בכלי שורת הפקודה gcloud ו- gsutil כדי להקצות תפקידים אלה.

אם עדיין לא מותקן, אתה יכול לגשת לכלים האלה מ- Cloud Shell ב-Google Cloud Platform Console:
הפעל את Cloud Shell

  1. הקצה את תפקיד ה- Cloud Datastore Import Export Export . החלף PROJECT_ID והפעל את הפקודה הבאה:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. הקצה את תפקיד מנהל האחסון בדלי שלך. החלף 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 Scheduler שלך בדף Cloud Scheduler של Google Cloud Platform Console.

  1. עבור לדף מתזמן הענן במסוף GCP.
    עבור אל Cloud Scheduler

  2. בשורה של העבודה החדשה שלך ב-Cloud Scheduler, לחץ על הפעל עכשיו .

    לאחר מספר שניות, משימת Cloud Scheduler אמורה לעדכן את עמודת התוצאה להצלחה ולריצה אחרונה לשעה הנוכחית. ייתכן שתצטרך ללחוץ על רענן .

דף מתזמן הענן מאשר רק שהמשימה נקראת פונקציית הענן שלך. פתח את דף פונקציית הענן כדי לראות את יומני הפונקציה שלך.

הצג את יומני ה-Cloud Function

כדי לראות אם פונקציית הענן החלה בהצלחה פעולת ייצוא, פתח את יומני הפונקציה:

מסוף Firebase

עבור לדף פונקציות ענן במסוף Firebase.

עבור אל יומני פונקציות

מסוף GCP

עבור לדף פונקציות ענן ב-GCP Console.

עבור אל מציג היומנים

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

אתה יכול להשתמש בפקודה gcloud firestore operations list כדי להציג את התקדמות פעולות הייצוא שלך, ראה ניהול פעולות ייצוא וייבוא ​​.

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

פתח את דפדפן Cloud Storage