בדף הזה מוסבר איך להשתמש בתכונות המנוהלות של ייבוא וייצוא כדי להעביר נתוני Cloud Firestore מפרויקט אחד לפרויקט אחר. האפשרות הזו יכולה להיות שימושית להגדרת סביבת פיתוח או כחלק מהעברה קבועה של אפליקציה לפרויקט אחר. בדוגמה שבדף הזה מוסבר איך לייצא נתונים מפרויקט מקור ואז לייבא את הנתונים האלה לפרויקט יעד. העברת נתונים בין פרויקטים כוללת את השלבים הבאים:
- יוצרים קטגוריית Cloud Storage לאחסון הנתונים מפרויקט המקור.
- מייצאים את הנתונים מפרויקט המקור לקטגוריה.
- נותנים לפרויקט היעד הרשאה לקרוא מהקטגוריה.
- מייבאים את הנתונים מקטגוריית האחסון לפרויקט היעד.
לפני שמתחילים
כדי להשתמש בשירות המנוהל לייצוא ולייבוא, צריך לבצע את המשימות הבאות:
- מפעילים את החיוב בפרויקט המקור ובפרויקט היעד. רק בפרויקטים שמופעל בהם חיוב אפשר להשתמש בפונקציונליות של ייצוא וייבוא.Google Cloud
-
מוודאים שיש לחשבון שלכם את ההרשאות הנדרשות ב-Cloud IAM בפרויקט המקור ובפרויקט היעד. אם אתם הבעלים של שני הפרויקטים, יש לחשבון שלכם את ההרשאות הנדרשות. אחרת, תפקידי Cloud IAM הבאים מעניקים את ההרשאות הנדרשות לCloud 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 עבור קובצי הייצוא של Cloud Firestore ולהתחיל פעולת ייצוא.
יצירת קטגוריה Cloud Storage
יוצרים קטגוריית Cloud Storage באותו מיקום שבו נמצא מסד הנתונים Cloud Firestore. כדי לראות את המיקום של מסד הנתונים, אפשר לעיין בהגדרת המיקום של הפרויקט. אי אפשר להשתמש בקטגוריה שבה מופעלת התכונה 'מגיש הבקשה משלם' לצורך פעולות ייצוא וייבוא.
אם מאגר Cloud Storage לא נמצא בפרויקט המקור, צריך לתת לחשבון השירות שמוגדר כברירת מחדל בפרויקט המקור גישה למאגר. לכל פרויקט Google Cloud יש חשבון שירות שמוגדר כברירת מחדל שנוצר באופן אוטומטי עם השם PROJECT_ID@appspot.gserviceaccount.com
. Cloud Firestore
פעולות ייצוא משתמשות בחשבון השירות שמוגדר כברירת מחדל כדי לאשר פעולות ב-Cloud Storagebucket. כדי לתת לחשבון השירות שמוגדר כברירת מחדל גישה לקטגוריית המקור, מקצים לו את התפקיד 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.
השבתת פעולות כתיבה (אופציונלי)
אם האפליקציה ממשיכה לכתוב לתוך מסד הנתונים בזמן שאתם מבצעים פעולת ייצוא, יכול להיות שלא תתעדו את כל הכתיבות האלה בקובצי הייצוא. כדי לייצא נתונים ממצב עקבי, צריך להשבית את פעולות הכתיבה למסד הנתונים על ידי עדכון כללי האבטחה והפסקת כל הפעולות של Admin SDK.
עדכון כללי האבטחה
בכרטיסייה Cloud 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_ID_1],[COLLECTION_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