ארגון נכסי קוד באמצעות תיקיות ומאגרים

במסמך הזה מפורטת סקירה כללית של מערכת התיקיות והמאגרים. הוא גם מסכם את השדות והשיטות של Dataform API שמשמשים לעבודה עם תיקיות ומאגרי מידע.

‫Dataform API מספק משאבים שבעזרתם אפשר לארגן נכסי קוד במבנה היררכי שדומה למערכת קבצים של מערכת הפעלה רגילה. המבנה הזה מאפשר גם ירושה של מדיניות ניהול הזהויות והרשאות הגישה (IAM), כך שההרשאות מועברות לאורך הנתיב.

הרשימה הבאה מגדירה מונחים מרכזיים שמשמשים לתיאור המערכת של התיקיות והמאגרים:

תיקייה
תיקייה היא המאגר הבסיסי לארגון משאבים, בדומה לתיקייה במערכת קבצים רגילה. אפשר לארגן תיקיות ומאגרי מידע אחרים, ולהעביר משאבים לתיקיות ומחוצה להן. אפשר להעניק הרשאות בצומת התיקייה, וההרשאות האלה מועברות לכל התוכן.
תיקיית הבסיס של המשתמש
תיקיית הבסיס של המשתמש מייצגת את המרחב האישי שלו. הוא מכיל את כל התיקיות והמאגרים שמשתמש יוצר או ניגש אליהם. תיקיית הבסיס של המשתמש לא נכללת בעץ המשנה של תיקיית הצוות. תיקיית הבסיס של המשתמש היא מושג וירטואלי שאין לו משאב API משויך.
תיקיית צוות
תיקייה צוותית דומה לתיקייה, אבל היא מיועדת לשיתוף פעולה בצוות, בדומה לאחסון שיתופי ב-Google Drive. הוא מספק מרחב ייעודי לנכסי קוד ליבה ותומך בהרשאות שיתוף וגישה מחמירות יותר לנכסי הליבה של הצוות.
קובץ
בהקשר של מבנה התיקיות הזה, קובץ מיוצג על ידי משאב במאגר Dataform. כל מאגר מכיל נכס קובץ יחיד, כמו מחברת, שאילתה שמורה, קנבס נתונים או הכנת נתונים.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לביצוע המשימות שמתוארות במסמך הזה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM המתאימים בפרויקט, בתיקייה או במשאב.

ההרשאות שניתנות לתיקייה מועברות לכל התיקיות והקבצים שנמצאים בתוכה.

התפקידים הבאים חלים על תיקיות וקבצים:

תפקיד ניתנה בתאריך הרשאות ותרחישי שימוש
בעלים של קוד (roles/dataform.codeOwner) תיקייה או קובץ התפקיד הזה נותן שליטה מלאה במשאב לניהול נכסי קוד. משתמש עם התפקיד הזה יכול לבצע את כל הפעולות, כולל מחיקת המשאב, מחיקת עץ התיקיות, הגדרת מדיניות IAM של המשאב והעברת המשאב.
עורך קוד (roles/dataform.codeEditor) תיקייה או קובץ מאפשר עריכה וניהול של תוכן. משתמש עם התפקיד הזה יכול להוסיף תוכן לתיקיות, לערוך קבצים ולקבל את מדיניות ה-IAM של תיקייה או קובץ. התפקיד הזה נדרש גם בתיקיית היעד כשמעבירים משאב.
Code Commenter (roles/dataform.codeCommenter) תיקייה או קובץ מאפשר להוסיף תגובות לנכסי קוד או לתיקיות.
צפייה בקוד (roles/dataform.codeViewer) תיקייה או קובץ ההרשאה מאפשרת גישה לקריאה בלבד. משתמש עם התפקיד הזה יכול לשלוח שאילתות לגבי התוכן של תיקיות וקבצים.
Code Creator (roles/dataform.codeCreator) פרויקט ההרשאה מאפשרת ליצור תיקיות וקבצים חדשים בפרויקט.

התפקידים הבאים ספציפיים לניהול תיקיות צוות:

תפקיד ניתנה בתאריך הרשאות ותרחישי שימוש
בעלים של תיקייה צוותית (roles/dataform.teamFolderOwner) תיקיית צוות התפקיד הזה נותן שליטה מלאה בתיקיית צוות לניהול נכסי קוד. משתמש עם התפקיד הזה יכול למחוק את התיקייה השיתופית, למחוק את העץ של התיקייה השיתופית ולהגדיר את מדיניות ה-IAM של התיקייה השיתופית.
Team Folder Contributor (roles/dataform.teamFolderContributor) תיקיית צוות מאפשר ניהול תוכן בתיקיית צוות. משתמש עם התפקיד הזה יכול לעדכן תיקייה של צוות.
בעל הרשאת תגובה בתיקייה של הצוות (roles/dataform.teamFolderCommenter) תיקיית צוות אפשר להוסיף תגובות לתיקייה של הצוות ולנכסי הקוד שהיא מכילה.
צפייה בתיקייה של הצוות (roles/dataform.teamFolderViewer) תיקיית צוות ההרשאה הזו מאפשרת גישה לקריאה בלבד לתיקייה של הצוות ולתוכן שלה. משתמש עם התפקיד הזה יכול לצפות בתיקייה שיתופית ולקבל את מדיניות ה-IAM שלה.
יצירת תיקיות צוות (roles/dataform.teamFolderCreator) פרויקט ההרשאה מאפשרת ליצור תיקיות צוות חדשות בפרויקט.

כדי לקרוא הסבר על מתן תפקידים, קראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

  • כדי ליצור תיקייה:
    • folders.create בתיקיית המשתמש הראשית, בתיקיית הצוות או בפרויקט
    • folders.addContents בתיקיית האב או בתיקייה של הצוות
  • אחזור המאפיינים של תיקייה: folders.get בתיקייה
  • שאילתה על התוכן של תיקייה או תיקייה שיתופית: folders.queryContents בתיקייה
  • כדי לעדכן תיקייה: folders.update בתיקייה
  • מחיקת תיקייה: folders.delete בתיקייה
  • קבלת מדיניות IAM עבור תיקייה: folders.getIamPolicy בתיקייה
  • הגדרת מדיניות IAM לתיקייה: folders.setIamPolicy בתיקייה
  • העברת תיקייה:
    • folders.move בתיקייה שמועברת
    • folders.addContents בתיקיית היעד או בתיקייה הצוותית (לא נדרש אם מעבירים לתיקיית הבסיס)
  • כדי ליצור תיקייה לצוות: teamFolders.create בפרויקט
  • כדי למחוק תיקייה של צוות: teamFolders.delete בתיקייה של הצוות
  • כדי לקבל את מדיניות IAM של תיקייה צוותית: teamFolders.getIamPolicy בתיקייה הצוותית
  • הגדרת מדיניות IAM לתיקייה לצוות: teamFolders.setIamPolicy בתיקייה לצוות
  • אחזור המאפיינים של תיקייה של צוות: teamFolders.get בתיקייה של הצוות
  • כדי לעדכן תיקייה לצוות: teamFolders.update בתיקייה לצוות
  • יצירת מאגר:
    • repositories.create בתיקיית המשתמש הראשית, בתיקיית הצוות או בפרויקט
    • folders.addContents בתיקיית האב או בתיקייה של הצוות
  • קריאת מאגר: repositories.readFile במאגר
  • כתיבה למאגר: repositories.commit במאגר
  • העברת מאגר:
    • repositories.move במאגר שמועבר
    • folders.addContents בתיקיית ההורה של המשתמש, בתיקיית הצוות או בפרויקט (לא נדרש אם מעבירים לתיקיית שורש)
  • אחזור המאפיינים של מאגר: repositories.get במאגר
  • עדכון מאגר: repositories.update במאגר
  • מחיקת מאגר: repositories.delete במאגר

יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

כדי לקבל גישה מלאה לניהול נכסי הקוד בפרויקט, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

ירושה של מדיניות IAM

גישת IAM למשאבי תיקיות ומאגרים מבוססת על מבנה היררכי. ההיררכיה הזו מבטיחה שמדיניות הגישה תועבר בירושה מתיקיות הורה לתוכן שלהן.

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

  • ההרשאות עוברות בירושה דרך היררכיית התיקיות. כשנותנים למשתמש תפקיד ספציפי בתיקייה ברמה גבוהה, הוא מקבל את ההרשאות שכלולות בתפקיד הזה לכל המשאבים שמוכלים בתיקייה הזו ובתיקיות המשנה שלה.
  • ההרשאות שיש למשתמש במשאב מסוים מורכבות מהמדיניות שהוגדרה ישירות למשאב הזה ומכל המדיניות שעברה בירושה מכל תיקייה בנתיב שלו עד לתיקיית הבסיס.

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

בהמשך מפורטות שיטות מומלצות להחלת מדיניות IAM על תיקיות ומאגרי מידע:

  • החלת מדיניות IAM על התיקייה הכי גבוהה בהיררכיה שבה נדרשות הרשאות באופן אחיד. לדוגמה, אם צוות צריך גישה לכל הנתונים בספרייה של הצוות, כדאי להעניק את התפקידים הנדרשים ברמת תיקיית הצוות ולא ברמת תיקיות המשנה של הפרויקטים.
  • תמיד צריך להעניק את קבוצת ההרשאות המינימלית שנדרשת למשתמשים או לשירותים כדי לבצע את המשימות שלהם. מומלץ להימנע מהקצאת תפקידים רחבים, ולהשתמש בתפקידים ובהרשאות ספציפיים יותר ברמת התיקייה.

תפקידי IAM שניתנים בזמן יצירת המשאב

התפקידים הבאים מוענקים באופן אוטומטי עם יצירת המשאב:

  • משתמשים שיוצרים תיקיות שלא נמצאות בעץ משנה של תיקיית צוות מקבלים באופן אוטומטי את התפקיד 'אדמין ב-Dataform' (roles/dataform.admin) בתיקיות האלה.
  • היוצר של תיקיית צוות ברמת הבסיס מקבל באופן אוטומטי את תפקיד האדמין ב-Dataform (roles/dataform.admin) בתיקיית הצוות הזו.
  • כשמגדירים את setAuthenticatedUserAdmin ל-true במשאב projects.locations.repositories, משתמשים שיוצרים מאגר בצומת הבסיסי של המשתמש מקבלים באופן אוטומטי את תפקיד האדמין ב-Dataform (roles/dataform.admin) במאגר.

אתם יכולים להשתמש ב-Config API כדי להעניק תפקיד ספציפי כשיוצרים משאב.

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

מגבלות

המגבלות הבאות חלות על תיקיות ומאגרי מידע:

  • אפשר להציב תיקיות בתוך תיקיות עד 5 רמות עומק.
  • אי אפשר להעביר או למחוק תיקייה שמכילה יותר מ-100 משאבים בפעולה אחת.
  • מספר גדול מאוד של תיקיות (מאות אלפים) מאט את הביצועים כשעובדים עם תיקיות.

ארגון המשאבים

בקטעים הבאים מוסבר איך אפשר לארגן משאבים של תיקיות, תיקיות צוות ומאגרי מידע באמצעות Dataform API.

משאבי תיקיות

בטבלה הבאה מתוארים שדות ה-API של תיקיות:

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

בטבלה הבאה מפורטות השיטות העיקריות של projects.locations.folders API:

שיטת ה-API תיאור
create יצירת תיקייה חדשה.
get קבלת מאפיינים של תיקייה.
patch עדכון המאפיינים של תיקייה, כמו השם שלה.
queryFolderContents ליצירת רשימה של הפריטים בתיקייה.
move הפעולה מעבירה את התיקייה ואת כל עץ המשנה שלה לתיקייה חדשה שמכילה אותה. פעולת העברה היא אטומית, כלומר היא מצליחה רק אם כל המשאבים בעץ המשנה של התיקייה מועברים בצורה תקינה ואין כשלים חלקיים.
delete התיקייה תימחק. הפעולה מצליחה רק אם התיקייה ריקה.
deleteTree מחיקה אסינכרונית של התיקייה וכל עץ המשנה שלה, כולל תיקיות ומאגרים לא ריקים. מידע נוסף זמין במאמר בנושא פרמטר למחיקת תיקייה.
setIamPolicy הקצאת תפקידים לתיקייה. התפקידים שניתנו מועברים אוטומטית לכל ענף המשנה של התיקייה.

בדוגמה הבאה אפשר לראות איך יוצרים תיקייה ברמת הבסיס:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
      "displayName": "DISPLAY_NAME"
  }' \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/folders"

מחליפים את מה שכתוב בשדות הבאים:

  • DISPLAY_NAME: השם של המשאב שמוצג למשתמש.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום של מאגר Dataform שבו נוצרים המשאבים.

בדוגמה הבאה אפשר לראות איך יוצרים תיקייה בתוך תיקייה אחרת:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
      "displayName": "DISPLAY_NAME",
      "containingFolder": "projects/PROJECT_ID/locations/LOCATION/folders/PARENT_FOLDER_ID"
  }' \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/folders"

מחליפים את מה שכתוב בשדות הבאים:

  • DISPLAY_NAME: השם של המשאב שמוצג למשתמש.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום של מאגר Dataform שבו נוצרים המשאבים.
  • PARENT_FOLDER_ID: המזהה של התיקייה הקיימת שבה רוצים ליצור את התיקייה החדשה.

בדוגמה הבאה אפשר לראות איך מעבירים תיקייה לתיקייה אחרת:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
      "destination_containing_folder": "projects/PROJECT_ID/locations/LOCATION/folders/DESTINATION_PARENT_FOLDER_ID"
  }' \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/folders/FOLDER_ID_TO_MOVE:move"

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום של מאגר Dataform.
  • DESTINATION_PARENT_FOLDER_ID: המזהה של התיקייה שאליה רוצים להעביר את תיקיית היעד.
  • FOLDER_ID_TO_MOVE: המזהה של התיקייה שרוצים להעביר.

משאבים בתיקיית צוות

בטבלה הבאה מפורטות השיטות העיקריות של projects.locations.teamFolders API:

שיטת ה-API תיאור
create יצירת תיקיית צוות חדשה.
get קבלת המאפיינים של תיקייה שיתופית.
patch עדכון המאפיינים של תיקייה משותפת, כמו השם שלה.
queryContents הצגת רשימת הפריטים בתיקייה של הצוות.
delete מחיקת תיקיית הצוות. הפעולה תצליח רק אם תיקיית הצוות ריקה.
deleteTree מחיקה אסינכרונית של תיקיית הצוות וכל עץ המשנה שלה, כולל תיקיות ומאגרים לא ריקים. מידע נוסף זמין במאמר בנושא פרמטר למחיקת תיקייה.
setIamPolicy הקצאת תפקידים לתיקייה הקבוצתית. התפקידים שניתנו מועברים אוטומטית לכל עץ המשנה של תיקיית הצוות.

בדוגמה הבאה אפשר לראות איך שולחים שאילתה לגבי התוכן של תיקיית צוות:

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/teamFolders/TEAM_FOLDER_ID:queryContents"

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום של משאבי Dataform.
  • TEAM_FOLDER_ID: המזהה של תיקיית הצוות הספציפית ב-Dataform שאתם שולחים אליה שאילתה.

פרמטר למחיקת תיקייה

deleteTree השיטות למחיקת תיקיות ותיקיות צוות כוללות פרמטר force לניהול מאגרי מידע עם הגדרות פעילות.

פרמטר התנהגות
force
  • אם הערך הוא true, הפעולה מוחקת בכוח את כל משאבי ה-API שנמצאים בעץ המשנה של התיקייה או של התיקייה הצוותית, יחד עם משאבי ה-API של הצאצאים שלהם.
  • אם הערך הוא false (ברירת מחדל), הפעולה תיכשל אם היא תזהה מאגרי מידע שמשויכות אליהם הגדרות של גרסאות, הגדרות של תהליכי עבודה או סביבות עבודה. במקרה כזה, לא נמחקים משאבים.

משאבים במאגר

אתם יכולים לארגן משאבים קיימים במאגר בתיקייה ובמשאבים של תיקייה צוותית באמצעות השדה containing_folder בצומת folder.

בטבלה הבאה מתוארות שיטות ה-API למאגרי מידע:

בטבלה הבאה מפורטות השיטות העיקריות של projects.locations.repositories API:

שיטת ה-API תיאור
create יצירת מאגר חדש.
get קבלת המאפיינים של מאגר.
patch עדכון המאפיינים של מאגר, כמו השם שלו.
move הפעולה מעבירה את המאגר לתיקייה חדשה שמכילה אותו.
delete מחיקת המאגר.
setIamPolicy הקצאת תפקידים למאגר. התפקידים שניתנו מועברים אוטומטית לכל עץ המשנה של המאגר.

בדוגמה הבאה מוסבר איך ליצור מאגר בצומת הבסיס של המשתמש ולהגדיר את setAuthenticatedUserAdmin לערך true:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
      "displayName": "REPOSITORY_DISPLAY_NAME",
      "setAuthenticatedUserAdmin": true
  }' \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/repositories?repositoryId=REPOSITORY_ID"

מחליפים את מה שכתוב בשדות הבאים:

  • REPOSITORY_DISPLAY_NAME: שם ידידותי למשתמש של המאגר.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום של המאגר.
  • REPOSITORY_ID: המזהה של המאגר החדש.

בדוגמה הבאה מוסבר איך ליצור מאגר בתוך תיקיית צוות:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
      "containingFolder": "projects/PROJECT_ID/locations/LOCATION/teamFolders/CONTAINING_TEAM_FOLDER_ID"
  }' \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/repositories?repositoryId=REPOSITORY_ID"

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום שבו נוצרים המשאבים. המיקום הזה צריך להיות זהה למיקום של CONTAINING_TEAM_FOLDER_ID.
  • CONTAINING_TEAM_FOLDER_ID: המזהה של תיקיית הצוות הספציפית שבה רוצים למקם את המאגר החדש.
  • REPOSITORY_ID: המזהה של המאגר החדש.

בדוגמה הבאה מוסבר איך להעביר מאגר לתיקיית הבסיס:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -X POST \
  -d '{
      "destination_containing_folder": ""
  }' \
  "https://dataform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID:move"

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: המיקום שבו המאגר נמצא.
  • REPOSITORY_ID: המזהה של המאגר שרוצים להעביר לרמת הבסיס.

משאבים עמוסים

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

  • האובייקט הוא היעד של פעולת העברה אחרת.
  • התיקייה היא היעד של פעולת העברה אחרת.
  • היותו אובייקט אב של אובייקט להעברה.
  • האובייקט הוא מושא של פעולת מחיקה.

המאמרים הבאים