הסבר על המיקומים של Eventarc

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

מיקום המקור

המיקום של מקור האירוע קובע בדרך כלל את מיקום הטריגר. בדוגמה הבאה, מכיוון שהקטגוריה של Cloud Storage נמצאת באזור europe-west1, גם הטריגר צריך להיות ממוקם באזור europe-west1.

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=europe-west1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-europe-west1-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

מיקום יעד גיאוגרפי

כשפורסים את יעד האירוע (לדוגמה, שירות Cloud Run), בוחרים אזור נתמך כמיקום שלו. בדרך כלל, מומלץ שהאזור הזה יהיה זהה לאזור של מקור האירועים, כדי לצמצם את זמן האחזור ולשמור על מיקום הנתונים. עם זאת, זה לא חובה, ובדוגמה הקודמת, מקור האירוע הוא europe-west1, בעוד שהדגל --destination-run-region מציין שיעד האירוע הוא us-central1.

מיקום הטריגר

בנוסף, סוג הטריגר של Eventarc שיוצרים משפיע על המיקום של הטריגר, שמצוין באמצעות הדגל ‑‑location:

יומני ביקורת של Cloud

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

המיקום של מקור האירוע קובע את מיקום הטריגר. בדרך כלל זה מיקום באזור יחיד. לדוגמה, כדי לתעד אירועים של Cloud Storage מקטגוריה באזור europe-west1 באמצעות טריגר של יומני ביקורת, צריך ליצור טריגר באותו מיקום:

gcloud eventarc triggers create trigger-auditlog \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=europe-west1 \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=storage.googleapis.com" \
    --event-filters="methodName=storage.objects.create" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

מכיוון שאי אפשר לסנן לפי קטגוריה כשמשתמשים בטריגר של Cloud Audit Logs, הטריגר יתאים לכל הקטגוריות באזור europe-west1. (כדי לסנן לפי קטגוריה, אפשר להשתמש במקום זאת בטריגר ישיר של Cloud Storage).

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

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=global \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-europe-west1-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Cloud Storage

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

המיקום של הקטגוריה ב-Cloud Storage קובע את המיקום של טריגר Eventarc, והם חייבים להיות זהים. בדוגמה הבאה, מיקום הטריגר תואם למיקום של קטגוריית Cloud Storage (המיקום eu במספר אזורים):

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=eu \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-eu-multi-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

אם האזורים של מאגר הנתונים ושל הטריגר לא תואמים, תוצג שגיאה דומה לזו:

ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was
invalid: Bucket "my-bucket-in-eu-multi-region" location "eu" does not match
trigger location "europe-west1". Try again by creating the trigger in "eu".

Pub/Sub

טריגר Pub/Sub מקשר נושא Pub/Sub ליעד אירועים. טריגרים של Pub/Sub זמינים רק במיקומים של אזור יחיד, ואי אפשר ליצור טריגר Eventarc גלובלי.

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

gcloud eventarc triggers create trigger-pubsub \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=us-central1 \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/your-projectid/topics/your-topic

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

פריסות במספר אזורים ושכפול הודעות

כשיוצרים טריגר Eventarc לנושא Pub/Sub,‏ Eventarc יוצר אוטומטית מינוי Pub/Sub ייחודי בסיסי לטריגר הספציפי הזה. כך Eventarc יכול לנהל את מחזור החיים, ההרשאות והתאימות של המינוי לדרישות של שמירת נתונים.

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

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

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

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

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

  • במדריך מוסבר איך לנתב אירועים בין פרויקטים שונים. Google Cloud