טריגרים של Firestore מאפשרים להפעיל פונקציות באופן אוטומטי בכל פעם שנוצרים, מתעדכנים או נמחקים מסמכים באוסף מסוים. כך אפשר לעבד שינויים בנתונים בזמן אמת, לסנכרן מערכות חיצוניות ולהפוך תהליכי עבודה לקצה העורפי לאוטומטיים.
לפני שמתחילים
לפני שמריצים את הקוד לדוגמה במדריך הזה, צריך לבצע את הפעולות הבאות:
דוגמאות
בדוגמאות הבאות מוסבר איך לכתוב פונקציות שמגיבות לטריגר של Firestore.
דוגמה 1: פונקציית Hello Firestore
הדוגמה הבאה מדפיסה את השדות של אירוע Firestore שמפעיל את הפונקציה:
Node.js
Python
Go
Java
C#
פריסת הפונקציה Hello Firestore
אם עדיין לא עשיתם את זה, הגדירו את מסד הנתונים של Firestore.
אחרי שפורסים פונקציה, אפשר להגדיר טריגר באמצעות מסוף Google Cloud , ה-CLI של Google Cloud או Terraform.
המסוף
כשמשתמשים במסוף Google Cloud כדי ליצור פונקציה, אפשר גם להוסיף לה טריגר. כדי ליצור טריגר לפונקציה:
נכנסים ל-Cloud Run במסוף Google Cloud :
לוחצים על כתיבת פונקציה ומזינים את פרטי הפונקציה. מידע נוסף על הגדרת פונקציות במהלך הפריסה זמין במאמר פריסת פונקציות.
בקטע Trigger (טריגר), לוחצים על Add trigger (הוספת טריגר).
בוחרים באפשרות Firestore trigger.
בחלונית Eventarc trigger, משנים את פרטי הטריגר באופן הבא:
בשדה Trigger name, מזינים שם לטריגר או משתמשים בשם ברירת המחדל.
בוחרים סוג טריגר מהרשימה:
מקורות של Google כדי לציין טריגרים ל-Pub/Sub, ל-Cloud Storage, ל-Firestore ולספקי אירועים אחרים של Google.
צד שלישי כדי לשלב עם ספקים שאינם של Google שמציעים מקור Eventarc. מידע נוסף זמין במאמר אירועים של צד שלישי ב-Eventarc.
בוחרים באפשרות Cloud Firestore מהרשימה Event provider, כדי לבחור מוצר שמספק את סוג האירוע להפעלת הפונקציה. רשימת ספקי האירועים מופיעה במאמר ספקים ויעדים של אירועים.
בוחרים באפשרות type=google.cloud.firestore.document.v1.written מהרשימה Event type. הגדרת הטריגר משתנה בהתאם לסוג האירוע הנתמך. מידע נוסף מופיע במאמר סוגי אירועים.
משאירים את השדה סוג התוכן של נתוני האירועים כמו שהוא.
בקטע Filters, בוחרים מסד נתונים, פעולה וערכי מאפיינים, או משתמשים בברירות המחדל.
אם השדה Region מופעל, בוחרים מיקום לטריגר של Eventarc. באופן כללי, המיקום של הטריגר של Eventarc צריך להתאים למיקום של המשאב ב-Google Cloud שאתם רוצים לעקוב אחרי האירועים שלו. ברוב המקרים, כדאי לפרוס את הפונקציה באותו אזור. למידע נוסף על מיקומי הטריגרים של Eventarc, קראו את המאמר הסבר על מיקומי Eventarc.
בשדה Service account, בוחרים חשבון שירות. הטריגרים של Eventarc מקושרים לחשבונות שירות כדי להשתמש בהם כזהות כשמפעילים את הפונקציה. לחשבון השירות של הטריגר ב-Eventarc צריכה להיות הרשאה להפעיל את הפונקציה. כברירת מחדל, Cloud Run משתמש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.
אם רוצים, מציינים את נתיב כתובת ה-URL של השירות שאליו תישלח הבקשה הנכנסת. זהו הנתיב היחסי בשירות היעד שאליו צריך לשלוח את האירועים של הטריגר. לדוגמה:
/,/route,routeו-route/subroute.אם רוצים לאפשר ניסיונות חוזרים במקרה של כישלון, מסמנים את התיבה Enable retry on failure. אחרת, פעולת ברירת המחדל היא ניסיון מסירה אחד ללא ניסיונות חוזרים. מידע נוסף מופיע במאמר אירועי ניסיון חוזר.
אחרי שממלאים את שדות החובה, לוחצים על שמירת הטריגר.
לוחצים על יצירה.
בכרטיסייה Source, עורכים את קוד המקור לפי הצורך ולוחצים על Save and redeploy.
gcloud
כשיוצרים פונקציה באמצעות ה-CLI של gcloud, קודם צריך לפרוס את הפונקציה ואז ליצור טריגר. כדי ליצור טריגר לפונקציה:
מריצים את הפקודה הבאה בספרייה שמכילה את הקוד לדוגמה כדי לפרוס את הפונקציה:
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.
מריצים את הפקודה הבאה כדי ליצור טריגר שמסנן אירועים ומנתב אותם:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='users/{username}' \ --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 של ה-method מצליחה. בפעולות שנמשכות זמן רב, האירוע נוצר רק בסוף הפעולה, ורק אם הפעולה בוצעה בהצלחה. רשימה של סוגי האירועים הנתמכים מופיעה במאמר סוגי האירועים של Google שנתמכים ב-Eventarc. -
SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמנוהל על ידי המשתמש. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
הערות:
- אחרי שיוצרים טריגר, אי אפשר לשנות את סוג מסנן האירועים. כדי להשתמש בסוג אירוע אחר, צריך ליצור טריגר חדש.
--event-filters=type=google.cloud.firestore.document.v1.writtenמציין שהפונקציה מופעלת כשמסמך נוצר, מתעדכן או נמחק, בהתאם לסוג האירוע.-
--event-filters=database='(default)'מציין את מסד הנתונים של Firebase. שם ברירת המחדל של מסד הנתונים הוא(default). --event-filters-path-pattern=document='users/{username}'מציין את תבנית הנתיב של המסמכים שצריך לעקוב אחריהם כדי לזהות שינויים רלוונטיים. תבנית הנתיב הזו מציינת שצריך לעקוב אחרי כל המסמכים באוסףusers. מידע נוסף זמין במאמר הסבר על תבניות נתיב.- אם רוצים לציין ניסיון אחד לשליחת אירוע בלי ניסיונות חוזרים, משתמשים בדגל
--max-retry-attempts. הערך התקין היחיד הוא1. אם לא מציינים את הדגל, חלה התנהגות ברירת המחדל של ניסיון חוזר. מידע נוסף זמין במאמר ניסיון חוזר של אירועים. - יש עוד דגלים שאפשר להשתמש בהם. מידע נוסף זמין במאמר
gcloud eventarc triggers create.
-
Terraform
במאמר יצירת טריגר באמצעות Terraform מוסבר איך יוצרים טריגר של Eventarc לפונקציית Cloud Run.
בדיקת הפונקציה Hello Firestore
כדי לבדוק את הפונקציה Hello Firestore, מגדירים אוסף בשם users במסד הנתונים של Firestore:
במסוף Google Cloud , נכנסים לדף מסדי הנתונים של Firestore:
לוחצים על התחלת אוסף.
מציינים את הערך
usersכמזהה האוסף.כדי להתחיל להוסיף את המסמך הראשון לאוסף, בקטע Add its first document מאשרים את הערך שנוצר אוטומטית בשדה Document ID.
מוסיפים לפחות שדה אחד למסמך, ומציינים שם וערך. לדוגמה, בשדה Field name מזינים
username, ובשדה Field value מזיניםrowan.כשתסיים, לחץ על שמור.
הפעולה הזו יוצרת מסמך חדש, וכך מפעילה את הפונקציה.
כדי לוודא שהפונקציה הופעלה, לוחצים על השם המקושר של הפונקציה בדף הסקירה הכללית של Cloud Run במסוף Google Cloud כדי לפתוח את הדף Service details.
בכרטיסייה Observability, בוחרים בכרטיסייה Logs ומחפשים את המחרוזת הבאה:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
דוגמה 2: הפונקציה "המרת הטקסט לאותיות רישיות (אותיות גדולות)"
בדוגמה הבאה, המערכת מאחזרת את הערך שהמשתמש הוסיף, ממירה את המחרוזת במיקום הזה לאותיות רישיות ומחליפה את הערך במחרוזת עם האותיות הרישיות:
Node.js
משתמשים ב-protobufjs כדי לפענח את נתוני האירוע. מוסיפים את google.events.cloud.firestore.v1
data.proto
למקור.
Python
Go
Java
C#
פריסת הפונקציה Convert to Uppercase
אם עדיין לא עשיתם את זה, הגדירו את מסד הנתונים של Firestore.
אחרי שפורסים פונקציה, אפשר להגדיר טריגר באמצעות מסוף Google Cloud , ה-CLI של Google Cloud או Terraform.
המסוף
כשמשתמשים במסוף Google Cloud כדי ליצור פונקציה, אפשר גם להוסיף לה טריגר. כדי ליצור טריגר לפונקציה:
נכנסים ל-Cloud Run במסוף Google Cloud :
לוחצים על כתיבת פונקציה ומזינים את פרטי הפונקציה. מידע נוסף על הגדרת פונקציות במהלך הפריסה זמין במאמר פריסת פונקציות.
בקטע Trigger (טריגר), לוחצים על Add trigger (הוספת טריגר).
בוחרים באפשרות Firestore trigger.
בחלונית Eventarc trigger, משנים את פרטי הטריגר באופן הבא:
בשדה Trigger name, מזינים שם לטריגר או משתמשים בשם ברירת המחדל.
בוחרים סוג טריגר מהרשימה:
מקורות של Google כדי לציין טריגרים ל-Pub/Sub, ל-Cloud Storage, ל-Firestore ולספקי אירועים אחרים של Google.
צד שלישי כדי לשלב עם ספקים שאינם של Google שמציעים מקור Eventarc. מידע נוסף זמין במאמר אירועים של צד שלישי ב-Eventarc.
בוחרים באפשרות Firestore מהרשימה Event provider כדי לבחור מוצר שמספק את סוג האירוע להפעלת הפונקציה. רשימת ספקי האירועים מופיעה במאמר ספקים ויעדים של אירועים.
בוחרים באפשרות type=google.cloud.firestore.document.v1.written מהרשימה Event type. הגדרת הטריגר משתנה בהתאם לסוג האירוע הנתמך. מידע נוסף מופיע במאמר סוגי אירועים.
משאירים את השדה סוג התוכן של נתוני האירועים כמו שהוא.
בקטע Filters, בוחרים מסד נתונים, פעולה וערכי מאפיינים, או משתמשים בברירות המחדל. אם נתתם שם למסד הנתונים, הזינו את השם בשדה ערך מאפיין 1.
אם השדה Region מופעל, בוחרים מיקום לטריגר של Eventarc. באופן כללי, המיקום של הטריגר של Eventarc צריך להתאים למיקום של המשאב ב-Google Cloud שאתם רוצים לעקוב אחרי האירועים שלו. ברוב המקרים, כדאי לפרוס את הפונקציה באותו אזור. למידע נוסף על מיקומי הטריגרים של Eventarc, קראו את המאמר הסבר על מיקומי Eventarc.
בשדה Service account, בוחרים חשבון שירות. הטריגרים של Eventarc מקושרים לחשבונות שירות כדי להשתמש בהם כזהות כשמפעילים את הפונקציה. לחשבון השירות של הטריגר ב-Eventarc צריכה להיות הרשאה להפעיל את הפונקציה. כברירת מחדל, Cloud Run משתמש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.
אם רוצים, מציינים את נתיב כתובת ה-URL של השירות שאליו תישלח הבקשה הנכנסת. זהו הנתיב היחסי בשירות היעד שאליו צריך לשלוח את האירועים של הטריגר. לדוגמה:
/,/route,routeו-route/subroute.אם רוצים לאפשר ניסיונות חוזרים במקרה של כישלון, מסמנים את התיבה Enable retry on failure. אחרת, פעולת ברירת המחדל היא ניסיון מסירה אחד ללא ניסיונות חוזרים. מידע נוסף מופיע במאמר אירועי ניסיון חוזר.
אחרי שממלאים את שדות החובה, לוחצים על שמירת הטריגר.
לוחצים על יצירה.
בכרטיסייה Source, עורכים את קוד המקור לפי הצורך ולוחצים על Save and redeploy.
gcloud
כשיוצרים פונקציה באמצעות ה-CLI של gcloud, קודם צריך לפרוס את הפונקציה ואז ליצור טריגר. כדי ליצור טריגר לפונקציה:
מריצים את הפקודה הבאה בספרייה שמכילה את הקוד לדוגמה כדי לפרוס את הפונקציה:
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.
מריצים את הפקודה הבאה כדי ליצור טריגר שמסנן אירועים ומנתב אותם:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='messages/{pushId}' \ --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 של ה-method מצליחה. בפעולות שנמשכות זמן רב, האירוע נוצר רק בסוף הפעולה, ורק אם הפעולה בוצעה בהצלחה. רשימה של סוגי האירועים הנתמכים מופיעה במאמר סוגי האירועים של Google שנתמכים ב-Eventarc. -
SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמנוהל על ידי המשתמש. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
הערות:
- אחרי שיוצרים טריגר, אי אפשר לשנות את סוג מסנן האירועים. כדי להשתמש בסוג אירוע אחר, צריך ליצור טריגר חדש.
--event-filters=type=google.cloud.firestore.document.v1.writtenמציין שהפונקציה מופעלת כשמסמך נוצר, מתעדכן או נמחק, בהתאם לסוג האירוע.-
--event-filters=database='(default)'מציין את מסד הנתונים של Firebase. שם ברירת המחדל של מסד הנתונים הוא(default). --event-filters-path-pattern=document='users/{username}'מציין את תבנית הנתיב של המסמכים שצריך לעקוב אחריהם כדי לזהות שינויים רלוונטיים. תבנית הנתיב הזו מציינת שצריך לעקוב אחרי כל המסמכים באוסףusers. מידע נוסף זמין במאמר הסבר על תבניות נתיב.- אם רוצים לציין ניסיון אחד לשליחת אירוע בלי ניסיונות חוזרים, משתמשים בדגל
--max-retry-attempts. הערך התקין היחיד הוא1. אם לא מציינים את הדגל, חלה התנהגות ברירת המחדל של ניסיון חוזר. מידע נוסף זמין במאמר ניסיון חוזר של אירועים. - יש עוד דגלים שאפשר להשתמש בהם. מידע נוסף זמין במאמר
gcloud eventarc triggers create.
-
Terraform
במאמר יצירת טריגר באמצעות Terraform מוסבר איך יוצרים טריגר של Eventarc לפונקציית Cloud Run.
משתמשים בשדות האחרים כמו שהם:
--event-filters=type=google.cloud.firestore.document.v1.writtenמציין שהפונקציה מופעלת כשמסמך נוצר, מתעדכן או נמחק, בהתאם לgoogle.cloud.firestore.document.v1.writtenסוג האירוע.-
--event-filters=database='(default)'מציין את מסד הנתונים של Firestore. שם ברירת המחדל של מסד הנתונים הוא(default). --event-filters-path-pattern=document='messages/{pushId}'מציין את תבנית הנתיב של המסמכים שצריך לעקוב אחריהם כדי לזהות שינויים רלוונטיים. תבנית הנתיב הזו מציינת שצריך לעקוב אחרי כל המסמכים באוסףmessages. מידע נוסף זמין במאמר הסבר על תבניות נתיב.
בדיקת הפונקציה "המרת הטקסט לאותיות רישיות"
כדי לבדוק את הפונקציה Convert to Uppercase שפרסתם, מגדירים אוסף בשם messages במסד הנתונים של Firestore:
במסוף Google Cloud , נכנסים לדף מסדי הנתונים של Firestore:
בוחרים את מזהה מסד הנתונים של Firestore.
לוחצים על התחלת אוסף.
מציינים את הערך
messagesכמזהה האוסף.כדי להתחיל להוסיף את המסמך הראשון לאוסף, בקטע הוספת המסמך הראשון מאשרים את מזהה המסמך שנוצר אוטומטית.
כדי להפעיל את הפונקציה שנפרסה, מוסיפים מסמך שבו Field name הוא
originalו-Field value הואminka.כששומרים את המסמך, המילה באותיות קטנות בשדה הערך מומרת לאותיות רישיות.
אם תערכו את הערך בשדה כך שיכיל אותיות קטנות, הפונקציה תופעל שוב ותמיר את כל האותיות הקטנות לאותיות רישיות.
מגבלות על פונקציות
- לא מובטח שההזמנה תתבצע. שינויים מהירים יכולים להפעיל פונקציות בסדר לא צפוי.
- אירועים נשלחים לפחות פעם אחת, אבל אירוע יחיד יכול לגרום להפעלה של כמה פונקציות. אל תסתמכו על מנגנונים של "בדיוק פעם אחת", וכתבו פונקציות אידמפוטנטיות.
- טריגר משויך למסד נתונים אחד. אי אפשר ליצור טריגר שתואם לכמה מסדי נתונים.
- מחיקת מסד נתונים לא מוחקת באופן אוטומטי את הטריגרים של אותו מסד נתונים. הטריגר מפסיק להעביר אירועים, אבל ממשיך להתקיים עד שמוחקים אותו.