במסמך הזה מפורטת סקירה כללית של מערכת התיקיות והמאגרים. הוא גם מסכם את השדות והשיטות של 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 הבאים בפרויקט:
- אדמין ב-Dataform
(
roles/dataform.admin) - Dataform Editor
(
roles/dataform.editor) - צפייה ב-Dataform
(
roles/dataform.viewer)
ירושה של מדיניות 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 |
|
משאבים במאגר
אתם יכולים לארגן משאבים קיימים במאגר בתיקייה ובמשאבים של תיקייה צוותית באמצעות השדה 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: המזהה של המאגר שרוצים להעביר לרמת הבסיס.
משאבים עמוסים
תיקייה, תיקייה של צוות או מאגר נחשבים ל'עסוקים' אם הם מעורבים באופן פעיל בפעולת העברה, בין אם הם האובייקט שמועבר או היעד של ההעברה. המערכת מגבילה את הפעולות הבאות במשאבים עסוקים כדי להבטיח את תקינות הנתונים במהלך ההעברה:
- האובייקט הוא היעד של פעולת העברה אחרת.
- התיקייה היא היעד של פעולת העברה אחרת.
- היותו אובייקט אב של אובייקט להעברה.
- האובייקט הוא מושא של פעולת מחיקה.
המאמרים הבאים
- כדי ללמוד איך לארגן נכסי קוד ב-BigQuery, אפשר לקרוא את המאמרים בנושא ארגון נכסי קוד באמצעות תיקיות ויצירה וניהול של תיקיות.
- מידע נוסף על ניהול הרשאות למשאבי Dataform זמין במאמר בקרת גישה באמצעות IAM.
- לפרטים מלאים על רכיבי ה-method של Dataform API, אפשר לעיין במאמר בנושא Dataform API.