יצירת טריגרים מאירועים של Pub/Sub

כדי להפעיל שירותים ופונקציות של Cloud Run, אתם יכולים להגדיר טריגר של Pub/Sub.

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

אפשר להגדיר את הטריגר הזה בשתי דרכים:

  • טריגר ישיר של Pub/Sub (מומלץ): ניתוב הודעות ישירות לשירות או לפונקציה באמצעות Pub/Sub. אתם מנהלים את המינוי ישירות, והשירות או הפונקציה שלכם מקבלים את בקשת ה-push הרגילה של Pub/Sub. האפשרות הזו מתאימה אם אתם צריכים הגדרה פשוטה יותר וזמן אחזור קצר יותר.
  • טריגר מבוסס-Eventarc: ניתוב הודעות Pub/Sub לשירות או לפונקציה באמצעות Eventarc. אתם מנהלים טריגרים של Pub/Sub באותו אופן שבו אתם מנהלים מקורות אחרים של Eventarc, והשירות או הפונקציה שלכם מקבלים אירועים כ-CloudEvents. האפשרות הזו מתאימה אם אתם צריכים את תכונות הסינון או הניתוב המתקדמות של Eventarc.

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

  1. מוודאים שהגדרתם פרויקט חדש ל-Cloud Run, כמו שמתואר בדף ההגדרה.

  2. מפעילים את ממשקי ה-API הבאים: Artifact Registry,‏ Cloud Build,‏ Cloud Run Admin API,‏ Cloud Logging ו-Pub/Sub:

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

    אם אתם מגדירים טריגר שמבוסס על Eventarc, אתם צריכים להפעיל גם את Eventarc API:

    הפעלת Eventarc API

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

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

התפקידים הנדרשים לחשבון הפריסה

כדי לקבל את ההרשאות שדרושות להפעלה מאירועי Pub/Sub, בקשו מהאדמין לתת לכם את התפקידים הבאים ב-IAM ברמת הפרויקט:

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

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

שימו לב שכברירת מחדל, ההרשאות של Cloud Build כוללות הרשאות להעלאה ולהורדה של פריטי מידע שנוצרו ב-Artifact Registry.

יצירת טריגר של Pub/Sub

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על השירות או הפונקציה שרוצים ליצור להם טריגר של Pub/Sub.

  3. לוחצים על הכרטיסייה טריגרים.

    בוחרים את הכרטיסייה של הגדרת הטריגר שבחרתם:

    1. לוחצים על Add trigger ובוחרים באפשרות Pub/Sub trigger > Direct.
    2. בחלונית Direct Pub/Sub subscription:
      • בשדה Cloud Pub/Sub topic, בוחרים את הנושא אם כבר יצרתם אחד, או לוחצים על Create new topic כדי ליצור נושא חדש.
      • בשדה Service account, בוחרים את חשבון השירות שבו המינוי משתמש כדי להפעיל את השירות. אם במסוף מופיעים תפקידים חסרים, לוחצים על Grant all.
      • בשדה Service URL path, מזינים את נתיב כתובת ה-URL בשירות שאמור לקבל הודעות, למשל / (ברירת המחדל) או /pubsub. המסוף מוסיף את הנתיב הזה לכתובת ה-URL של השירות.
    3. לוחצים על Save.

    Eventarc

    בחלונית Eventarc trigger, משנים את פרטי הטריגר באופן הבא:

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

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

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

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

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

    4. בוחרים באפשרות google.cloud.pubsub.topic.v1.messagePublished מהרשימה Event type. הגדרת הטריגר משתנה בהתאם לסוג האירוע הנתמך. מידע נוסף מופיע במאמר סוגי אירועים.

    5. ברשימה Select a Cloud Pub/Sub topic, בוחרים נושא שהטריגר יעקוב אחריו. הודעות שמתפרסמות בנושא הזה מפעילות קריאות לפונקציה.

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

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

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

    9. אם רוצים לאפשר ניסיונות חוזרים במקרה של כישלון, מסמנים את התיבה Enable retry on failure. אחרת, פעולת ברירת המחדל היא ניסיון שליחה אחד בלי ניסיונות חוזרים. מידע נוסף מופיע במאמר ניסיון חוזר של אירועים.

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

gcloud

כדי ליצור טריגר לשירות או לפונקציה באמצעות ה-CLI של gcloud:

  1. אם עדיין לא עשיתם את זה, פורסים את השירות או הפונקציה.

  2. אם כבר יש לכם נושא Pub/Sub, אתם יכולים לדלג על השלב הזה. אם אין, יוצרים נושא Pub/Sub:

    gcloud pubsub topics create TOPIC_NAME
  3. בוחרים את הכרטיסייה של הגדרת הטריגר שבחרתם:

    ישיר

    1. מגדירים את התפקידים הנדרשים לסוכן השירות של Pub/Sub:

      התפקידים הנדרשים לסוכן השירות של Pub/Sub

      בשלבים הבאים מוסבר איך ליצור חשבון שירות ולהשתמש בו כדי להפעיל את השירות או הפונקציה באמצעות המינוי ל-Pub/Sub. השלבים האלה נדרשים כשמשתמשים ב-Google Cloud CLI כדי ליצור פקודת טריגר של Pub/Sub. אם אתם משתמשים במסוף Google Cloud כדי ליצור את הטריגר, אתם יכולים לדלג על השלבים האלה.

      1. יוצרים או בוחרים חשבון שירות שייצג את הזהות של המינוי ל-Pub/Sub.

             gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
                --display-name "Cloud Run Pub/Sub Invoker"

        מחליפים את SERVICE_ACCOUNT_NAME בשם ייחודי לחשבון השירות.

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

          gcloud run services add-iam-policy-binding SERVICE_NAME \
             --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \
             --role=roles/run.invoker

        יכול להיות שיחלפו כמה דקות עד שהשינויים ב-IAM יתעדכנו. בינתיים, יכול להיות שיופיעו שגיאות HTTP 403 ביומני השירות.

      3. מאפשרים ל-Pub/Sub ליצור אסימוני אימות בפרויקט:

          gcloud projects add-iam-policy-binding PROJECT_ID \
             --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub. \
             --role=roles/iam.serviceAccountTokenCreator

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

        • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
        • ‫PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .

        מזהה הפרויקט ומספר הפרויקט מופיעים בחלונית Project info בGoogle Cloud מסוף של הפרויקט.

    2. יוצרים מינוי ל-Pub/Sub באמצעות חשבון השירות:

      gcloud pubsub subscriptions create SUBSCRIPTION_NAME \
        --topic TOPIC_NAME \
        --ack-deadline=600 \
        --push-endpoint=SERVICE_URL/ \
        --push-auth-service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

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

      • ‫SUBSCRIPTION_NAME: השם של המינוי שרוצים ליצור.
      • ‫TOPIC_NAME: שם הנושא שיצרתם קודם.
      • ‫SERVICE_URL: כתובת ה-URL מסוג HTTPS שצוינה בפריסת השירות. כתובת ה-URL הזו פועלת גם אם הוספתם מיפוי דומיינים.
      • ‫SERVICE_ACCOUNT_NAME: השם של חשבון השירות שיצרתם קודם.
      • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

      הערות:

      • הדגל --push-auth-service-account מפעיל את פונקציונליות ה-push של Pub/Sub לאימות והרשאה.

      • הדומיין של שירות Cloud Run נרשם באופן אוטומטי לשימוש עם מינויים ל-Pub/Sub.

      • רק ב-Cloud Run, יש בדיקת אימות מובנית שהאסימון תקין ובדיקת הרשאה שלחשבון השירות יש הרשאה להפעיל את שירות Cloud Run.

    Eventarc

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

    gcloud eventarc triggers create TRIGGER_NAME  \
       --location=LOCATION \
       --destination-run-service=DESTINATION_RUN_SERVICE  \
       --destination-run-region=DESTINATION_RUN_REGION \
       --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
       --transport-topic=projects/PROJECT_ID/topics/TOPIC_NAME \
       --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

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

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

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

    • ‫DESTINATION_RUN_SERVICE: השם של השירות או של פונקציית Cloud Run שנפרסו ומקבלים את האירועים של הטריגר.
    • ‫DESTINATION_RUN_REGION: (אופציונלי) Cloud Run location שבה נמצאת פונקציית היעד של Cloud Run. אם לא מציינים אזור, ההנחה היא שהפונקציה נמצאת באותו אזור של הטריגר.
    • הדגל --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" נדרש ואי אפשר לשנות אותו. כדי להגדיר סוג אירוע אחר, צריך ליצור טריגר חדש.
    • ‫TOPIC_NAME: המזהה של נושא Pub/Sub קיים. הנושא צריך להיות באותו פרויקט שבו נמצא הטריגר.
    • ‫SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמנוהל על ידי המשתמש.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

    הערות:

    • אם רוצים לציין ניסיון אחד לשליחת אירוע בלי ניסיונות חוזרים, משתמשים בדגל --max-retry-attempts. הערך התקין היחיד הוא 1. אם משמיטים את הדגל, חלה התנהגות ברירת המחדל של ניסיון חוזר. מידע נוסף זמין במאמר ניסיון חוזר של אירועים.
    • יש עוד דגלים שאפשר להשתמש בהם. מידע נוסף זמין במאמר gcloud eventarc triggers create.

Terraform

במאמר יצירת טריגר באמצעות Terraform מוסבר איך יוצרים טריגר של Eventarc לפונקציית Cloud Run.

השלבים הבאים