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

ב-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

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