העברת נתונים בין פרויקטים
בדף הזה מוסבר איך להשתמש בתכונות המנוהלות של ייבוא וייצוא כדי להעביר נתונים של Firestore מפרויקט אחד לפרויקט אחר. האפשרות הזו יכולה להיות שימושית להגדרת סביבת פיתוח או כחלק מהעברה קבועה של אפליקציה לפרויקט אחר. בדוגמה שבדף הזה מוסבר איך לייצא נתונים מפרויקט מקור ואז לייבא את הנתונים האלה לפרויקט יעד. העברת נתונים בין פרויקטים כוללת את השלבים הבאים:
- יוצרים קטגוריה של Cloud Storage כדי לאחסן את הנתונים מפרויקט המקור.
- מייצאים את הנתונים מפרויקט המקור אל הדלי.
- נותנים לפרויקט היעד הרשאה לקרוא מהמאגר.
- מייבאים את הנתונים מקטגוריית האחסון לפרויקט היעד.
לפני שמתחילים
כדי להשתמש בשירות המנוהל לייצוא ולייבוא, צריך לבצע את המשימות הבאות:
- מפעילים את החיוב בפרויקט המקור ובפרויקט היעד. אפשר להשתמש בפונקציות הייצוא והייבוא רק בפרויקטים שמופעל בהם חיוב. Google Cloud
-
מוודאים שיש לחשבון שלכם את הרשאות ה-IAM הנדרשות בפרויקט המקור ובפרויקט היעד. אם אתם בעלי הפרויקט בשני הפרויקטים, יש לחשבון שלכם את ההרשאות הנדרשות. אחרת, תפקידי ה-IAM הבאים מעניקים את ההרשאות הנדרשות לפעולות ייצוא וייבוא של Firestore:
Owner,Cloud Datastore OwnerאוCloud Datastore Import Export Adminבעלי הפרויקט יכולים להקצות אחד מהתפקידים האלה לפי השלבים שמפורטים במאמר בנושא הענקת גישה.
-
מגדירים את כלי שורת הפקודה
gcloudומתחברים לפרויקט באחת מהדרכים הבאות:-
אפשר לגשת אל
gcloudמהמסוף Google Cloud באמצעות Cloud Shell.מוודאים שהמכשיר
gcloudמוגדר לפרויקט הנכון:gcloud config set project [SOURCE_PROJECT_ID]
-
-
מגדירים אינדקסים בפרויקט החדש. האינדקסים המורכבים צריכים להיות זהים בפרויקטים של המקור והיעד. מומלץ להגדיר את האינדקסים קודם כדי להימנע מעיבוד של כל מסמך כמה פעמים.
ייצוא נתונים מפרויקט המקור
כדי לייצא את הנתונים, צריך ליצור קטגוריה של Cloud Storage לקובצי הייצוא של Firestore ולהתחיל פעולת ייצוא.
יצירת קטגוריה של Cloud Storage
יוצרים קטגוריה של Cloud Storage באותו מיקום של מסד הנתונים של Firestore. כדי לראות את המיקום של מסד הנתונים, אפשר לעיין בהגדרת המיקום של הפרויקט. אי אפשר להשתמש בקטגוריה שבה מופעלת התכונה 'מגיש הבקשה משלם' או בקטגוריה מהירה לצורך פעולות ייצוא וייבוא.
אם קטגוריית Cloud Storage לא נמצאת בפרויקט המקור, צריך לתת לחשבון השירות שמוגדר כברירת המחדל בפרויקט המקור גישה לקטגוריה. לכל Google Cloud פרויקט
יש חשבון שירות שמוגדר כברירת מחדל שנוצר באופן אוטומטי עם השם PROJECT_ID@appspot.gserviceaccount.com. פעולות ייצוא של Firestore משתמשות בחשבון השירות הזה כברירת מחדל כדי לאשר פעולות בקטגוריות של Cloud Storage. כדי לתת לחשבון השירות שמוגדר כברירת מחדל גישה לקטגוריית המקור, מקצים לו את התפקיד Storage Admin.
אפשר להקצות את התפקיד הזה באמצעות הכלי gsutil שזמין ב-Cloud Shell:
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
אפשר גם להקצות את התפקיד הזה במסוף Google Cloud .
השבתת פעולות כתיבה (אופציונלי)
אם האפליקציה ממשיכה לכתוב לתוך מסד הנתונים בזמן שאתם מבצעים פעולת ייצוא, יכול להיות שלא תתעדו את כל הפעולות האלה בקובצי הייצוא. כדי לייצא נתונים ממצב עקבי, צריך להשבית את הכתיבה למסד הנתונים על ידי עדכון כללי האבטחה והפסקת כל הפעולות של SDK לאדמינים.
עדכון כללי האבטחה
במסוף Firebase, עוברים אל Databases & Storage (מסדי נתונים ואחסון) > Firestore > הכרטיסייה Rules (כללים).
מעדכנים את כללי האבטחה של פרויקט המקור כדי לדחות את כל פעולות הכתיבה. לדוגמה:
// Deny write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow write: if false; } // Reads do not affect export operations // Add your read rules here } }הפסקת פעולות כתיבה מ-Admin SDK
כללי האבטחה לא מונעים פעולות כתיבה שמגיעות מסביבות שרת עם הרשאות שנוצרו באמצעות Firebase Admin SDK או ספריית לקוח של שרת Google Cloud. כדי להפסיק את פעולות הכתיבה משרתי האדמין, צריך להשבית או לעדכן את השרתים.
התחלת פעולת ייצוא
משתמשים בפקודה gcloud firestore export כדי לייצא נתונים מפרויקט המקור. אתם יכולים לייצא את כל הנתונים או רק קבוצות מסוימות של נתונים. מחליפים את [SOURCE_BUCKET] בשם הקטגוריה שלכם ב-Cloud Storage:
- ייצוא כל הנתונים
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- ייצוא של קבוצות אוספים ספציפיות
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async
חשוב לשים לב ל-outputURIPrefix של פעולת הייצוא, כי תצטרכו להשתמש בו בהמשך. כברירת מחדל, Firestore מוסיף קידומת לקובצי הייצוא על סמך חותמת זמן:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
במהלך פעולת הייצוא, אפשר להשתמש בפקודה firestore operations list כדי לראות את התקדמות הפעולה:
gcloud firestore operations list
ייבוא נתונים לפרויקט היעד
לאחר מכן, נותנים לפרויקט היעד גישה לקבצי הנתונים של Firestore ומתחילים פעולת ייבוא.
נותנים לפרויקט היעד גישה לקבצי הנתונים
לפני שמתחילים פעולת ייבוא, צריך לוודא שלפרויקט היעד יש גישה לקובצי הנתונים של Firestore.
העברת קובצי נתונים לקטגוריה מקומית
אם המיקום של קטגוריית המקור שונה מהמיקום של Firestore בפרויקט היעד, צריך להעביר את קובצי הנתונים לקטגוריה של Cloud Storage באותו מיקום כמו פרויקט היעד.
מעבירים את קובצי הנתונים לקטגוריה אחרת של Cloud Storage לפי השלבים שמפורטים במאמר העברה ושינוי שם של קטגוריות. בכל השלבים הבאים, משתמשים בקטגוריה החדשה בתור [SOURCE_BUCKET].
מעניקים לחשבון השירות של הפרויקט גישה לקטגוריית המקור
אם קטגוריית המקור לא נמצאת בפרויקט היעד, צריך לתת לחשבון השירות שמוגדר כברירת מחדל בפרויקט היעד גישה לקטגוריית המקור. שם חשבון השירות שמוגדר כברירת מחדל הוא [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com. כדי לתת לחשבון השירות שמוגדר כברירת מחדל גישה לקטגוריית המקור, צריך להעניק לו את ההרשאות המתאימות לגישה לקטגוריה.
אפשר להקצות את התפקידים הנדרשים באמצעות הכלי gsutil שזמין ב-Cloud Shell:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
אפשר גם להקצות את התפקיד הזה במסוף Google Cloud .
התחלת פעולת ייבוא
לפני שמתחילים בפעולת הייבוא, מוודאים ש-gcloud מוגדר לפרויקט הנכון:
gcloud config set project [DESTINATION_PROJECT_ID]
כדי לייבא את הנתונים מקטגוריית המקור לפרויקט היעד, משתמשים בפקודה gcloud firestore import:
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
כאשר [EXPORT_PREFIX] תואם לקידומת ב-outputUriPrefix של פעולת הייצוא. לדוגמה:
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
במהלך פעולת הייצוא, אפשר להשתמש בפקודה firestore operations list כדי לראות את התקדמות הפעולה:
gcloud firestore operations list