בדף הזה מוסבר איך להשתמש בתכונות הייבוא והייצוא המנוהלות כדי להעביר נתוני Cloud Firestore מפרויקט אחד לפרויקט אחר. האפשרות הזו יכולה להיות שימושית להגדרת סביבת פיתוח, או כחלק מהעברה קבועה של אפליקציה לפרויקט אחר. בדוגמה שבדף הזה מוסבר איך לייצא נתונים מפרויקט מקור ואז לייבא אותם לפרויקט יעד. כדי להעביר נתונים בין פרויקטים, צריך לבצע את השלבים הבאים:
- יוצרים קטגוריה ב-Cloud Storage כדי לשמור את הנתונים מפרויקט המקור.
- מייצאים את הנתונים מפרויקט המקור לקטגוריה.
- נותנים לפרויקט היעד הרשאה לקרוא מהקטגוריה.
- מייבאים את הנתונים מהקטגוריה לפרויקט היעד.
לפני שמתחילים
כדי להשתמש בשירות המנוהל לייצוא ולייבוא, צריך לבצע את הפעולות הבאות:
- מפעילים את החיוב גם בפרויקט המקור וגם בפרויקט היעד. רק בפרויקטים ב-Google Cloud שמופעל בהם חיוב אפשר להשתמש בפונקציונליות של ייצוא וייבוא.
-
מוודאים שבחשבון יש את ההרשאות הנדרשות ב-Cloud IAM בפרויקט המקור ובפרויקט היעד. אם אתם הבעלים של שני הפרויקטים, לחשבון שלכם יש את ההרשאות הנדרשות. אחרת, תפקידי Cloud IAM הבאים נותנים את ההרשאות הנדרשות לפעולות הייצוא והייבוא של Cloud Firestore:
Owner,Cloud Datastore OwnerאוCloud Datastore Import Export AdminProject Owner יכול להקצות את אחד מהתפקידים האלה לפי השלבים שמפורטים במאמר מתן גישה.
-
מגדירים את כלי שורת הפקודה
gcloudומתחברים לפרויקט באחת מהדרכים הבאות:-
נכנסים אל
gcloudממסוף Google Cloud באמצעות Cloud Shell.מוודאים ש-
gcloudמוגדר לפרויקט הנכון:gcloud config set project [SOURCE_PROJECT_ID]
-
-
מגדירים אינדקסים בפרויקט החדש. האינדקסים המורכבים צריכים להיות זהים בפרויקט המקור ובפרויקט היעד. כדאי להגדיר את האינדקסים קודם, כדי שלא תצטרכו לעבד כל מסמך כמה פעמים.
ייצוא נתונים מפרויקט המקור
כדי לייצא את הנתונים, יוצרים קטגוריה ב-Cloud Storage לקובצי הייצוא של Cloud Firestore ומתחילים פעולת ייצוא.
יצירת קטגוריה ב-Cloud Storage
יוצרים קטגוריה ב-Cloud Storage באותו מיקום שבו נמצא מסד הנתונים ב-Cloud Firestore. כדי לראות את מיקום מסד הנתונים, עיינו בהגדרת מיקום הפרויקט. אי אפשר להשתמש בקטגוריה שבה מופעלת התכונה "מגיש הבקשה משלם" או בקטגוריית Rapid לפעולות ייצוא וייבוא.
אם הקטגוריה של Cloud Storage לא נמצאת בפרויקט המקור, צריך לתת לחשבון השירות שמוגדר כברירת מחדל בפרויקט המקור גישה לקטגוריה. לכל פרויקט ב-Google Cloud יש חשבון שירות שמוגדר כברירת מחדל ונוצר באופן אוטומטי, בשם PROJECT_ID@appspot.gserviceaccount.com. פעולות הייצוא של Cloud 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 } }עצירת פעולות כתיבה מערכות 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 של פעולת הייצוא, כי תצטרכו להשתמש בו בהמשך. כברירת מחדל, Cloud Firestore מוסיף קידומת לקובצי הייצוא על סמך חותמת זמן:
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
בזמן שפעולת הייצוא פועלת, אפשר להשתמש בפקודה firestore operations list כדי לראות את התקדמות הפעולה:
gcloud firestore operations list
ייבוא נתונים לפרויקט היעד
אחר כך נותנים לפרויקט היעד גישה לקובצי הנתונים של Cloud Firestore ומתחילים פעולת ייבוא.
מתן גישה לקובצי הנתונים לפרויקט היעד
לפני שמתחילים פעולת ייבוא, צריך לוודא שלפרויקט היעד יש גישה לקובצי הנתונים של Cloud Firestore.
העברת קובצי נתונים לקטגוריה מקומית
אם המיקום של קטגוריית המקור שונה מהמיקום של Cloud 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