יצירת טריגרים באמצעות Eventarc

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

Eventarc הוא שירות שמאפשר לכם ליצור ארכיטקטורות מבוססות-אירועים בלי שתצטרכו להטמיע, להתאים אישית או לתחזק את התשתית הבסיסית. Google Cloud

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

סוגי האירועים הבאים יכולים להפעיל בקשות לשירות שלכם:

מיקום הטריגר

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

זהות הטריגר

כשיוצרים טריגר Eventarc, מציינים עבורו חשבון שירות של ניהול זהויות והרשאות גישה (IAM). הטריגר משתמש בחשבון השירות הזה כזהות ברירת המחדל שלו. אנו ממליצים לציין חשבון שירות המנוהל על ידי המשתמש ולהעניק לו את ההרשאות המינימליות הנדרשות.

לפני שמתחילים

  1. הגדר את סביבת Cloud Run שלך.

  2. מפעילים את Artifact Registry,‏ Cloud Build,‏ Cloud Run Admin API ו-Eventarc APIs:‏

    הפעלת ממשקי ה-API

  3. הענקת תפקידי IAM והרשאות הנדרשות.

יצירת טריגר לשירותים

לאחר פריסת שירות, ניתן להגדיר טריגר באמצעות ה- Google Cloud קונסולה, ממשק שורת פקודה (CLI) של גוגל קלאוד או Terraform.

המסוף

  1. פורסים את שירות Cloud Run באמצעות קונטיינרים או ממקור.

  2. במסוף Google Cloud , עוברים אל Cloud Run:

    כניסה ל-Cloud Run

  3. ברשימת השירותים, לוחצים על שירות קיים.

  4. בדף פרטי השירות, עוברים לכרטיסייה Triggers (טריגרים).

  5. לוחצים על הוספת טריגר ובוחרים אפשרות.

  6. בחלונית טריגר Eventarc, שנה את פרטי הטריגר באופן הבא:

    1. בשדה Trigger name, מזינים שם לטריגר או משתמשים בשם ברירת המחדל.

    2. בחר סוג טריגר מהרשימה כדי לציין אחד מסוגי הטריגרים הבאים:

      • מקורות Google כדי לציין טריגרים ל-Pub/Sub, ל-Cloud Storage, ל-Firestore ולספקי אירועים אחרים של Google.

      • צד שלישי לשילוב עם ספקים שאינם של Google שמציעים מקור Eventarc. מידע נוסף זמין במאמר בנושא אירועים של צד שלישי ב-Eventarc.

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

    4. בחר סוג אירוע מהרשימה סוג אירוע. הגדרת הטריגר משתנה בהתאם לסוג האירוע הנתמך. מידע נוסף זמין במאמר בנושא סוגי אירועים.

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

    6. בשדה Service account, בוחרים חשבון שירות. טריגרים של Eventarc מקושרים לחשבונות שירות כדי לשמש כזהות כשמפעילים את השירות. לחשבון השירות של טריגר Eventarc צריכה להיות הרשאה להפעלת השירות. כברירת מחדל, Cloud Run משתמש בחשבון השירות של Compute Engine שמוגדר כברירת מחדל.

    7. אפשר לציין את נתיב כתובת ה-URL של השירות כדי לשלוח את הבקשה הנכנסת. זהו הנתיב היחסי בשירות היעד שאליו יישלחו האירועים של הטריגר. לדוגמה: /,‏ /route,‏ route ו-route/subroute.

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

    9. לאחר שתמלאו את השדות הנדרשים, לחצו על שמור טריגר.

  7. אחרי שיוצרים את הטריגר, מוודאים שהוא תקין. הסימן לכך הוא סימן וי בכרטיסייה Triggers.

gcloud

  1. פורסים את שירות Cloud Run באמצעות קונטיינרים או ממקור.

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

    gcloud eventarc triggers create TRIGGER_NAME  \
        --location=LOCATION \
        --destination-run-service=DESTINATION_RUN_SERVICE  \
        --destination-run-region=DESTINATION_RUN_REGION \
        --event-filters="type=EVENT_FILTER_TYPE" \
        --max-retry-attempts=1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

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

    • TRIGGER_NAME: המזהה של הטריגר או מזהה מוגדר במלואו.
    • LOCATION: המיקום של טריגר Eventarc. לחלופין, ניתן להגדיר את המאפיין eventarc/location; לדוגמה, gcloud config set eventarc/location us-central1.

      כדי להימנע מבעיות בביצועים ובמיקום אחסון הנתונים, המיקום צריך להיות זהה למיקום של Google Cloud השירות שמייצר אירועים. מידע נוסף זמין במאמר בנושא מיקומי Eventarc.

    • DESTINATION_RUN_SERVICE: השם של שירות Cloud Run שמקבל את האירועים של הטריגר. השירות יכול להיות בכל אחד מהמיקומים הנתמכים של Cloud Run, והוא לא צריך להיות באותו מיקום כמו הטריגר. עם זאת, השירות צריך להיות באותו פרויקט כמו הטריגר והוא יקבל אירועים כבקשות HTTP POST שנשלחות לנתיב של כתובת ה-URL הבסיסית שלו (/), בכל פעם שהאירוע נוצר.
    • DESTINATION_RUN_REGION: (אופציונלי) המיקום של Cloud Run שבו נמצא שירות היעד של Cloud Run. אם לא מציינים זאת, המערכת מניחה שהשירות נמצא באותו אזור כמו הטריגר.
    • EVENT_FILTER_TYPE: המזהה של האירוע. אירוע נוצר כשקריאה ל-API של השיטה מצליחה. בפעולות ארוכות טווח, האירוע נוצר רק בסוף הפעולה, ורק אם הפעולה בוצעה בהצלחה. רשימה של סוגי האירועים הנתמכים מופיעה במאמר בנושא סוגי אירועים של Google שנתמכים על ידי Eventarc.
    • SERVICE_ACCOUNT_NAME: שם חשבון השירות המנוהל על ידי המשתמש שלך.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

    הערות:

    • חובה להשתמש בדגל --event-filters="type=EVENT_FILTER_TYPE". אם לא מוגדר מסנן אירועים אחר, המערכת מתאימה אירועים לכל המשאבים.
    • לא ניתן לשנות את EVENT_FILTER_TYPE לאחר היצירה. כדי לשנות את EVENT_FILTER_TYPE, צריך ליצור טריגר חדש ולמחוק את הטריגר הישן.
    • לכל טריגר יכולים להיות כמה מסנני אירועים, מופרדים בפסיקים בדגל אחד --event-filters=[ATTRIBUTE=VALUE,...] או שאפשר לחזור על הדגל כדי להוסיף עוד מסננים. רק אירועים שתואמים לכל המסננים נשלחים ליעד. אין תמיכה בתווים כלליים לחיפוש ובביטויים רגולריים. עם זאת, כשמשתמשים בדגל --event-filters-path-pattern, אפשר להגדיר דפוס נתיב של משאב.
    • אפשר גם לציין ניסיון אחד למסירת אירוע ללא ניסיונות חוזרים באמצעות הדגל --max-retry-attempts. הערך החוקי היחיד הוא 1. אם תשמיטו את הדגל, תחול אופן הפעולה הסטנדרטי של ניסיון חוזר. מידע נוסף זמין במאמר בנושא ניסיון חוזר לשליחת אירועים.
    • יש דגלים אחרים. מידע נוסף זמין במאמר gcloud eventarc triggers create.

Terraform

כדי ליצור טריגר Eventarc לשירות Cloud Run, ראו יצירת טריגר באמצעות Terraform.

יצירת טריגר לפונקציות

לאחר פריסת פונקציה, ניתן להגדיר טריגר באמצעות ה- Google Cloud קונסולה, ממשק שורת פקודה (CLI) של גוגל קלאוד או Terraform.

המסוף

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

  1. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. לוחצים על Write a function (כתיבת פונקציה) ומזינים את פרטי הפונקציה. מידע נוסף על הגדרת פונקציות במהלך הפריסה זמין במאמר פריסת פונקציות.

  3. במקטע טריגר, לחץ על הוסף טריגר.

  4. אפשר לבחור באחת מהאפשרויות.

  5. בחלונית טריגר Eventarc, שנה את פרטי הטריגר באופן הבא:

    1. מזינים שם לטריגר בשדה Trigger name או משתמשים בשם ברירת המחדל.

    2. בחר סוג טריגר מהרשימה:

      • מקורות Google כדי לציין טריגרים ל-Pub/Sub, ל-Cloud Storage, ל-Firestore ולספקי אירועים אחרים של Google.

      • צד שלישי לשילוב עם ספקים שאינם של גוגל המציעים מקור Eventarc. מידע נוסף זמין במאמר בנושא אירועים של צד שלישי ב-Eventarc.

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

    4. בחר סוג אירוע מהרשימה סוג אירוע. הגדרת הטריגר משתנה בהתאם לסוג האירוע הנתמך. מידע נוסף זמין במאמר בנושא סוגי אירועים.

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

    6. בשדה Service account, בוחרים חשבון שירות. טריגרים של Eventarc מקושרים לחשבונות שירות כדי לשמש כזהות כשמפעילים את הפונקציה. לחשבון השירות של טריגר Eventarc צריך להיות הרשאה להפעיל את הפונקציה. כברירת מחדל, Cloud Run משתמש בחשבון השירות של Compute Engine שמוגדר כברירת מחדל.

    7. אפשר לציין את נתיב כתובת ה-URL של השירות כדי לשלוח את הבקשה הנכנסת. זהו הנתיב היחסי בשירות היעד שאליו יישלחו האירועים של הטריגר. לדוגמה: /,‏ /route,‏ route ו-route/subroute.

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

  6. אחרי שממלאים את שדות החובה, לוחצים על שמירת הטריגר.

  7. לוחצים על יצירה.

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

gcloud

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

  1. מריצים את הפקודה הבאה בספרייה שמכילה את הקוד לדוגמה כדי לפרוס את הפונקציה:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image BASE_IMAGE_ID \
        --region REGION
    

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

    • FUNCTION: שם הפונקציה שאתה פורס. ניתן להשמיט פרמטר זה לחלוטין, אך תתבקש להזין את השם אם תשמיט אותו.

    • FUNCTION_ENTRYPOINT: נקודת הכניסה לפונקציה בקוד המקור. זה הקוד ש-Cloud Run מריץ כשהפונקציה פועלת. הערך של הדגל הזה צריך להיות שם של פונקציה או שם מלא של מחלקה שקיימים בקוד המקור.

    • BASE_IMAGE_ID: סביבת תמונת הבסיס של הפונקציה. מידע נוסף על תמונות בסיס ועל החבילות שכלולות בכל תמונה זמין במאמר בנושא תמונות בסיס של סביבות זמן ריצה.

    • REGION: Google Cloud האזור שבו רוצים לפרוס את הפונקציה. לדוגמה, europe-west1.

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

    gcloud eventarc triggers create TRIGGER_NAME \
        --location=LOCATION \
        --destination-run-service=FUNCTION \
        --destination-run-region=DESTINATION_RUN_REGION \
        --event-filters="type=EVENT_FILTER_TYPE" \
        --max-retry-attempts=1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

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

    • TRIGGER_NAME: המזהה של הטריגר או מזהה מוגדר במלואו.
    • LOCATION: המיקום של טריגר Eventarc. לחלופין, ניתן להגדיר את המאפיין eventarc/location; לדוגמה, gcloud config set eventarc/location us-central1.

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

    • FUNCTION: השם של פונקציית Cloud Run שנפרסה ומקבלת את האירועים של הטריגר.
    • DESTINATION_RUN_REGION: (אופציונלי) המיקום של Cloud Run שבו אפשר למצוא את פונקציית היעד של Cloud Run. אם לא מציינים זאת, ההנחה היא שהפונקציה נמצאת באותו אזור כמו הטריגר.
    • EVENT_FILTER_TYPE: המזהה של האירוע. אירוע נוצר כשקריאה ל-API של השיטה מצליחה. בפעולות ארוכות טווח, האירוע נוצר רק בסוף הפעולה, ורק אם הפעולה בוצעה בהצלחה. רשימה של סוגי האירועים הנתמכים מופיעה במאמר בנושא סוגי אירועים של Google שנתמכים על ידי Eventarc.
    • SERVICE_ACCOUNT_NAME: שם חשבון השירות המנוהל על ידי המשתמש שלך.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

    הערות:

    • חובה להשתמש בדגל --event-filters="type=EVENT_FILTER_TYPE". אם לא מוגדר מסנן אירועים אחר, המערכת מתאימה אירועים לכל המשאבים.
    • לא ניתן לשנות את EVENT_FILTER_TYPE לאחר היצירה. כדי לשנות את EVENT_FILTER_TYPE, צריך ליצור טריגר חדש ולמחוק את הטריגר הישן.
    • לכל טריגר יכולים להיות כמה מסנני אירועים, מופרדים בפסיקים בדגל אחד --event-filters=[ATTRIBUTE=VALUE,...] או שאפשר לחזור על הדגל כדי להוסיף עוד מסננים. רק אירועים שתואמים לכל המסננים נשלחים ליעד. אין תמיכה בתווים כלליים לחיפוש ובביטויים רגולריים. עם זאת, כשמשתמשים בדגל --event-filters-path-pattern, אפשר להגדיר דפוס נתיב של משאב.
    • אפשר גם לציין ניסיון אחד למסירת אירוע ללא ניסיונות חוזרים באמצעות הדגל --max-retry-attempts. הערך החוקי היחיד הוא 1. אם תשמיטו את הדגל, תחול אופן הפעולה הסטנדרטי של ניסיון חוזר. מידע נוסף זמין במאמר בנושא ניסיון חוזר לשליחת אירועים.
    • יש דגלים אחרים. מידע נוסף זמין במאמר gcloud eventarc triggers create.

Terraform

כדי ליצור טריגר Eventarc לפונקציית Cloud Run, אפשר לעיין במאמר יצירת טריגר באמצעות Terraform.

הגדרת הדדליין לאישור ב-Pub/Sub

פונקציות Cloud Run מבוססות-אירועים מיושמות באמצעות Eventarc בשילוב עם מינוי Pub/Sub. כברירת מחדל, המועד האחרון לאישור (ack) של המינוי הזה ל-Pub/Sub הוא 10 שניות. ההגדרה הזו לא מספיקה להרבה פונקציות, והיא עלולה לגרום להפעלות כפולות לא רצויות.

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

המסוף

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

  1. במסוף Google Cloud , עוברים אל Cloud Run:

    כניסה ל-Cloud Run

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

  3. פותחים את הכרטיסייה טריגרים.

  4. לחץ על שם הטריגר כדי לפתוח את פרטי הטריגר.

  5. לחץ על הקישור נושא כדי לפתוח את חלונית עריכת הנושא.

  6. לוחצים על השם מזהה המינוי כדי לעבור לחלונית המינוי, ואז לוחצים על עריכה בחלק העליון של הדף.

  7. מגדירים את הערך של מועד האישור ל-600 ולוחצים על עדכון כדי לשמור את השינוי.

gcloud

מעדכנים את ערך התפוגה של ack לכל טריגר לערך המקסימלי של 600 שניות. שימו לב שהפקודות הבאות מתייחסות למשתנים (TRIGGER_NAME ו-LOCATION) שהערכים שלהם הוגדרו בשלבים הקודמים.

## Per Cloud Run function:

# Update Ack Deadline to max (600s)
SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$TRIGGER_NAME" --location $LOCATION --format json | jq -r '.transport.pubsub.subscription')
gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600

מבצעים עדכון מספר פריטים בו-זמנית בכל הטריגרים של השירותים והפונקציות כדי להגדיר את ack המועדים האחרונים שלהם ל-600 שניות:

### Match all Cloud Run service triggers and update all deadlines to 600s (max timeout)
### This will change ALL Cloud Run services and Cloud Run functions
TRIGGER_NAMES=($(gcloud eventarc triggers list | awk '/Cloud Run service/ {print $1}'))

if [ ${#TRIGGER_NAMES[@]} -eq 0 ]; then
  echo "No matching triggers found"
fi

for trigger in "${TRIGGER_NAMES[@]}"; do
echo "Updating ack deadline for trigger: $trigger"
SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$trigger" --location $LOCATION --format json | jq -r '.transport.pubsub.subscription')

if [ -z "$SUBSCRIPTION_ID" ]; then
    echo "Error: Could not retrieve subscription ID for trigger: $trigger"
    continue # Skip to the next trigger
fi
gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600
echo "Ack deadline updated for subscription: $SUBSCRIPTION_ID"
done

הצגת המזהה והמקור של CloudEvent

כדי לראות את המזהה והמקור של CloudEvent שהפעילו את השירות, תוכלו לעיין במשאבים הבאים ביומני השירות של Cloud Run:

  • LogEntry.labels.run.googleapis.com/cloud_event_id
  • LogEntry.labels.run.googleapis.com/cloud_event_source

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