הסבר על דפוסי נתיבים

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

החלת דפוס נתיב

אפשר להחיל תבנית נתיב כדי לסנן אירועים כשיוצרים טריגר באמצעות דף המסוף של Eventarc Google Cloud או על ידי הפעלת פקודה של gcloud.

לדוגמה, אפשר להחיל תבנית נתיב כשמסננים לפי שמות משאבים או מופעים של מסדי נתונים (מופע יחיד או נתיב).

  • הגדרת דפוס של נתיב שם משאב רלוונטית כשיוצרים טריגר לאירועים ביומני הביקורת של Cloud ולערכים של resourceName. שם המשאב מציין את המשאב שנבדק באמצעות יומן ביקורת. שמות המשאבים מאורגנים בהיררכיה באמצעות מזהים שמורכבים מהמזהה של המשאב עצמו ומהמזהים של משאבי האב, כולם מופרדים באמצעות לוכסנים, כך: /projects/project-1/datasets/dataset-id. הסינון שמתבצע על ידי Eventarc מתאים לדפוסים על סמך הערכים של המזהים האלה. אתם יכולים להיעזר במידע שבחלק פורמט השמות של המשאבים.

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

  • הגדרה של תבנית של נתיב למזהה משאב רלוונטית כשיוצרים טריגר לאירועי Cloud IoT ולערכים registry ו-device. אתם יכולים להחיל תבנית נתיב כדי לסנן שינויים במאגרי מידע ובמכשירים במאגר מידע, באמצעות התאמה לתווים כלליים.

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

איך יודעים אם אפשר להחיל דפוס נתיב

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

gcloud eventarc providers describe cloudaudit.googleapis.com --location=us-central1

הפלט אמור להיראות כך, והערך pathPatternSupported של true מציין שאפשר להחיל תבנית נתיב:

displayName: Cloud Audit Logs
eventTypes:
- description: An audit log is created that matches the trigger's filter criteria.
  filteringAttributes:
  - attribute: methodName
    description: The identifier of the service's operation.
    required: true
  - attribute: resourceName
    description: The complete path to a resource. Used to filter events for a specific
      resource.
    pathPatternSupported: true
  - attribute: serviceName
    description: The identifier of the Google Cloud service.
    required: true
  - attribute: type
    required: true
  type: google.cloud.audit.log.v1.written
name: projects/project-name/locations/us-central1/providers/cloudaudit.googleapis.com

או למשל:

gcloud eventarc providers describe firebasedatabase.googleapis.com --location=us-central1

הפלט אמור להיראות כך:

displayName: Firebase Realtime Database
eventTypes:
- description: New data has been created in the database.
  filteringAttributes:
  - attribute: instance
    description: A single database instance.
    pathPatternSupported: true
    required: true
  - attribute: ref
    description: Pattern to match for the database instance.
    pathPatternSupported: true
    required: true
  - attribute: type
    required: true
  type: google.firebase.database.ref.v1.created
[...]

מידע נוסף זמין במאמר gcloud eventarc providers describe.

התחביר של תבנית הנתיב

התחביר של תבנית הנתיב מוגדר כך:

התחביר של תבנית הנתיב

דוגמת עיצוב /? Segment (/Segment)*
פלח CaptureGroup | Expression
CaptureGroup { ID (= Expression)? }
Expression Wildcard | MultiSegmentWildcard | NameSegment
NameSegment (Character* Wildcard? Character*)
מזהה [a-zA-Z0-9_]+
תו כללי *
MultiSegmentWildcard **
תו1 [\\w\\s\\t~@#$%&.,?:;+='[]()-]

מקרא:

? אפס או אחד
* אפס או יותר
+ אחד או יותר
| או
‫1 רק תווי ASCII שמופיעים ברשימה נתמכים. אין תמיכה בהתאמה לביטוי רגולרי. התווים המטא הנתמכים:
  • ‫\w מתייחס למילה; מיוצג גם כ-[a-zA-Z0-9_]
  • \t מתייחס לכרטיסייה
  • ‫\s מתייחס לתו רווח

ביטויים

ביטוי יכול להיות אחד מסוגי הפלחים הבאים, והוא לא יכול להיות ריק:

  • פלח יחיד Wildcard שמוגדר כ-* תואם לאפס תווים או יותר בתבנית.
  • המחרוזת MultiSegmentWildcard שמוגדרת כ-** תואמת לאפס פלחים או יותר בתבנית.
  • ‫NameSegment מורכב מאפס או מאחד * ומתווים אחרים. השילוב הזה מאפשר לכם לסנן לפי תחילית, סיומת או סיומת קובץ. לדוגמה, file-*.txt.

שימו לב: נתיב יכול להכיל הרבה תווים כלליים של פלח יחיד, אבל רק תו כללי אחד של כמה פלחים. לדוגמה, הנתיב הבא לא תקין: /projects/**/buckets/**.

אזוריות של משאבים

השמות של המשאבים יכולים להכיל מזהי מיקום. לדוגמה:

/projects/$PROJECT_ID/locations/$REGION/triggers/my-trigger

עם זאת, ההתאמה של תבניות נתיבים מוגבלת על ידי האזוריות של המשאב. לדוגמה, בטריגרים של יומני הביקורת של Cloud, תווים כלליים של מיקום תואמים רק לטריגרים מהאזור של יומני הביקורת של Cloud או לטריגרים גלובליים.

קבוצות לחילוץ

CaptureGroup מאפשר לכם לצלם את התוכן של ביטוי. כדי לעשות את זה, מקצים את הערך לשם משתנה בסוגריים מסולסלים. לדוגמה: buckets/{path=**}/files/{filename=file-*.txt}. תו כללי של מקטע יחיד יכול להשמיט את =* בקבוצה לחילוץ. לדוגמה, /projects/_/buckets/{bucket}/objects/file.*

הפורמט של שם המשאב

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

סוג המשאב פורמט השם המלא של המשאב
מערכי נתונים של BigQuery //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
חשבונות לחיוב ב-Cloud //cloudbilling.googleapis.com/billingAccounts/BILLING_ACCOUNT_ID
מסמכים ב-Cloud Firestore‏1 //firestore.googleapis.com/projects/PROJECT_ID/databases/DATABASE_ID/documents/DOCUMENT
שירותים להרצה ב-Cloud //run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID
מכונות ב-Cloud SQL //sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID
קטגוריות של Cloud Storage‏2 //storage.googleapis.com/projects/_/buckets/BUCKET_ID
אובייקטים ב-Cloud Storage‏ 2, 3 //storage.googleapis.com/projects/_/buckets/BUCKET_ID/objects/OBJECT_ID
מכונות ב-Compute Engine //compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID
רשתות של Compute Engine //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK
רשתות משנה של Compute Engine //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK
אשכולות של Google Kubernetes Engine //container.googleapis.com/projects/PROJECT_ID/clusters/CLUSTER_ID
שירות לאפליקציות בפלטפורמת App Engine על שרת proxy לאימות זהויות (IAP) //iap.googleapis.com/projects/PROJECT_NUMBER/iap_web/appengine-PROJECT_ID/services/APP_SERVICE_ID
שירות לקצה העורפי של Compute Engine על שרת proxy לאימות זהויות (IAP) //iap.googleapis.com/projects/PROJECT_NUMBER/iap_web/compute/services/BACKEND_SERVICE_ID_OR_NAME
נושאים של Pub/Sub //pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
ארגונים במנהל המשאבים //cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_NUMBER
תיקיות במנהל המשאבים //cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER
פרויקטים במנהל המשאבים //cloudresourcemanager.googleapis.com/projects/PROJECT_ID

‫1 ב-Cloud Firestore, כשיוצרים טריגר לא מציינים לוכסן מוביל (ראו דוגמאות). מידע נוסף זמין במאמר מודל הנתונים של Cloud Firestore.

‫2 ב-Cloud Storage, השם של המשאב כולל קו תחתון (_) ולא את מזהה הפרויקט. אי אפשר להחליף את הקו התחתון במזהה פרויקט, בשם פרויקט או במספר פרויקט.

‫3 ב-Cloud Storage, צריך להשתמש בשם האובייקט במלואו, כולל לוכסנים. התווים האלה הם חלק משם האובייקט ולא תווי הפרדה לנתיב.

דוגמאות

בדוגמאות הבאות אפשר לראות איך אפשר להשתמש בתחביר ואיך אי אפשר להשתמש בו.

דפוסים תקינים

דוגמת קוד תיאור
/projects/project-1/datasets/dataset-1 שם משאב ספציפי.
/projects/project-1/regions/region-1/subnetworks/* התאמה לכל רשת משנה ב-project-1 וב-region-1.
/projects/_/buckets/bucket-1/objects/*.txt תואם לכל קובצי ה-TXT בדלי.
/projects/_/buckets/bucket-1/objects/file-*.txt תואם לכל קובצי ה-TXT עם הקידומת file- בדלי.
/projects/project-1/serviceAccounts/service-account-email-1/keys/** תואם לכל מפתח של כתובת האימייל בחשבון שירות ספציפי.
/projects/_/**/file-*.txt תואם לכל קובץ TXT עם הקידומת file- בכל הדליים.
/projects/_/buckets/bucket-*/objects/file-*.txt תואם לכל קובצי ה-TXT עם הקידומת file- בכל דלי עם הקידומת bucket-.
/projects/_/buckets/{bucket}/objects/file.*
/projects/_/buckets/{bucket=*}/objects/file.*
/projects/_/buckets/*/objects/{filename=file.*}
שלושה ייצוגים שונים של אותו מסנן. תואם לכל קטגוריה עם קובץ בשם file מכל סוג. שתי הדוגמאות הראשונות כוללות גם את הקטגוריה, והדוגמה האחרונה כוללת את שם הקובץ.
/projects/project-1/zones/zone-1/instances/** התאמה לכל דבר ב-project-1 וב-zone-1.
/projects/*/zones/zone-1/instances/** תואם לכל דבר ב-zone-1 בכל פרויקט.

דפוסים לא תקינים

דוגמת קוד תיאור
/projects/_/buckets/bucket-1/objects/ ביטוי ריק.
/projects//buckets/bucket-1/objects/file1.txt ביטוי ריק.
/projects/_/buckets/bucket**/objects/file1.txt הביטוי יכול להכיל רק תג * אחד.
/projects/_/buckets/bucket-1/objects/file-*.* הביטוי יכול להכיל רק תג * אחד.
/projects/**/buckets/** נתיב המשאב יכול להכיל רק ** אחד.
/projects/_/buckets/{=*}/objects/file1.txt מזהה חסר בפלח.
/projects/_/buckets/{bucket=}/objects/file1.txt ביטוי ריק בתוך קבוצה לחילוץ.
/projects/_/buckets/{bucket/objects/file1.txt קבוצה לחילוץ לא נסגרה.

התאמת תבניות

דוגמת קוד משאב התאמות?
/buckets/bucket-1/objects/file1.txt /buckets/bucket-1/objects/file1.txt
/buckets/bucket-1/objects/file2.txt
/buckets/bucket-1/objects/* /buckets/bucket-1/objects/file3.txt
/buckets/bucket-1/objects/file4.jpg
/buckets/bucket-1/objects/files/file4.jpg
/buckets/bucket-1/objects
/buckets/bucket-1/objects/*.txt /buckets/bucket-1/objects/file5.txt
/buckets/bucket-1/objects/file6.jpg
/buckets/bucket-1/objects/file-*.txt /buckets/bucket-1/objects/file-777.txt
/buckets/bucket-1/objects/file-.txt
/buckets/bucket-1/objects/file.txt
/projects/_/**/{filename=file-*.txt} /projects/_/objects/object-1/files/file-9.txt
/projects/_/{ob}jects/**/-+=*/file-9.txt
/projects/_/file-10.txt
/projects/_/files-1/file-1.txt/files-2/file-2.txt
/projects/_//file-1234.txt
/projects/_/files/file-5.txt/file.txt
{collection=[clients,users]}/id users/id
clients/id
[clients,users]/id
{collection=clients,users}/id users/id
clients/id
clients,users/id
all users/{id=.*_ +1@gmail.com} all-users/aa_ +1@gmail.com
all users/bb_+1@gmail.com
all users/cc +1@gmail.com

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