בדף הזה נסביר איך להשתמש בתכונות המנוהלות של ייבוא וייצוא כדי להעביר נתוני Cloud Firestore מפרויקט אחד לפרויקט אחר. אפשר להשתמש באפשרות הזו כדי להגדיר סביבת פיתוח או כחלק מהעברה קבועה של אפליקציה לפרויקט אחר. הדוגמה בדף הזה ממחישה איך לייצא נתונים מפרויקט מקור ולאחר מכן לייבא את הנתונים האלה לפרויקט יעד. כדי להעביר נתונים בין פרויקטים, מבצעים את השלבים הבאים:
- יוצרים קטגוריה Cloud Storage שתשמש לאחסון הנתונים מהפרויקט המקור.
- מייצאים את הנתונים מהפרויקט המקור לקטגוריה.
- נותנים לפרויקט היעד הרשאת קריאה מהקטגוריה.
- מייבאים את הנתונים מהקטגוריה לפרויקט היעד.
לפני שמתחילים
כדי להשתמש בשירות המנוהל לייצוא ולייבוא, צריך להשלים את המשימות הבאות:
- מפעילים את החיוב גם בפרויקט המקור וגם בפרויקט היעד. רק בפרויקטים של Google Cloud שמופעל בהם חיוב אפשר להשתמש בפונקציות הייצוא והייבוא.
-
מוודאים שלחשבון יש את ההרשאות הנדרשות ב-Cloud IAM בפרויקט המקור ובפרויקט היעד. אם אתם הבעלים של שני הפרויקטים, יש בחשבון שלכם את ההרשאות הנדרשות. אחרת, תפקידי ה-IAM הבאים ב-Cloud מקצים את ההרשאות הנדרשות לפעולות הייצוא והייבוא של 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 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.
השבתת פעולות כתיבה (אופציונלי)
אם האפליקציה ממשיכה לכתוב במסד הנתונים בזמן ביצוע פעולת הייצוא, יכול להיות שלא תתועדו כל פעולות הכתיבה האלה בקובצי הייצוא. כדי לייצא נתונים ממצב עקבי, משביתים את הכתיבה במסד הנתונים על ידי עדכון כללי האבטחה והפסקת כל הפעולות של 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 SDKs
כללי האבטחה לא עוצרים פעולות כתיבה שמגיעות מסביבות שרת עם הרשאות שנוצרו באמצעות 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