הרצת פונקציות באופן מקומי

ה-CLI של Firebase כולל אמולטור של Cloud Functions שיכול לדמות את סוגי הפונקציות הבאים:

  • פונקציות HTTPS
  • פונקציות שניתן להפעיל
  • פונקציות בתור המשימה
  • פונקציות רקע שמופעלות מ-Firebase Authentication, מ-Realtime Database, מ-Cloud Firestore, מ-Cloud Storage, מהתראות נתמכות של Firebase ומ-Cloud Pub/Sub.

אפשר להריץ פונקציות באופן מקומי כדי לבדוק אותן לפני הפריסה בסביבת הייצור.

התקנת ה-CLI של Firebase

כדי להשתמש באמולטור Cloud Functions, קודם מתקינים את ה-CLI של Firebase:

npm install -g firebase-tools

כדי להשתמש בסימולטור המקומי, Cloud Functions צריך להיות תלוי ב:

  • firebase-admin בגרסה 8.0.0 ואילך.
  • firebase-functions מגרסה 3.0.0 ואילך.

הגדרת פרטי הכניסה של האדמין (אופציונלי)

אם אתם רוצים שבדיקות הפונקציות יתקשרו ל-Google APIs או ל-Firebase APIs אחרים דרך Firebase Admin SDK, יכול להיות שתצטרכו להגדיר פרטי כניסה של אדמין.

  • לטריגרים Cloud Firestore ו-Realtime Database כבר יש פרטי כניסה מספיקים, והם לא דורשים הגדרה נוספת.
  • כל ממשקי ה-API האחרים, כולל ממשקי Firebase כמו Authentication ו-FCM או ממשקי Google כמו Cloud Translation או Cloud Speech, דורשים את שלבי ההגדרה שמפורטים בקטע הזה. ההנחיה הזו רלוונטית גם אם משתמשים במעטפת Cloud Functions וגם אם משתמשים ב-firebase emulators:start.

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

  1. פותחים את החלונית Service Accounts במסוף Google Cloud.
  2. מוודאים שהאפשרות App Engine default service account מסומנת, ומשתמשים בתפריט האפשרויות משמאל כדי לבחור Create key.
  3. כשמופיעה בקשה, בוחרים באפשרות JSON בתור סוג המפתח ולוחצים על Create.
  4. מגדירים את פרטי הכניסה שמוגדרים כברירת מחדל ב-Google כך שיצביעו על המפתח שהורדתם:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

אחרי ביצוע השלבים האלה, לבדיקות הפונקציות תהיה גישה ל-Firebase ול-Google APIs באמצעות Admin SDK. לדוגמה, כשבודקים טריגר Authentication, הפונקציה המדומה יכולה להפעיל את admin.auth().getUserByEmail(email).

הגדרת ההגדרות של הפונקציות (אופציונלי)

אם אתם משתמשים במשתני הגדרה מותאמים אישית של פונקציות, תחילה מריצים את הפקודה כדי לקבל את ההגדרות המותאמות אישית (מריצים את הפקודה בתוך הספרייה functions) בסביבה המקומית:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

הפעלת חבילת האמולטור

כדי להריץ את המהדר של Cloud Functions, משתמשים בפקודה emulators:start:

firebase emulators:start

הפקודה emulators:start תפעיל אמולטורים ל-Cloud Functions, ל-Cloud Firestore, למסד נתונים בזמן אמת ולאירוח ב-Firebase, על סמך המוצרים שאתחלתם בפרויקט המקומי באמצעות firebase init. כדי להפעיל אמולטור מסוים, משתמשים בדגל --only:

firebase emulators:start --only functions

אם רוצים להריץ חבילת בדיקות או סקריפט בדיקה אחרי שהאמולטורים הופעלו, משתמשים בפקודה emulators:exec:

firebase emulators:exec "./my-test.sh"

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

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

הוספת כלי למדידה לאפליקציה לצורך קריאה לפונקציות

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

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

הוספת רכיבים לאפליקציה להדמיה של פונקציות HTTPS

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

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

לדוגמה, פונקציית helloWorld פשוטה עם יציאת המארח והאזור שמוגדרים כברירת מחדל תוצג בכתובת:

https://localhost:5001/$PROJECT/us-central1/helloWorld

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

האמולטור מגדיר אוטומטית תורי משימות אמולטור על סמך הגדרות הטריגר, ו-Admin SDK מנתב מחדש לאמולטור את הבקשות שנשלחות בתור, אם הוא מזהה שהוא פועל דרך משתנה הסביבה CLOUD_TASKS_EMULATOR_HOST.

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

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

האמולטור Cloud Functions תומך בפונקציות שהופעלו ברקע מהמקורות הבאים:

  • אמולטור Realtime Database
  • אמולטור Cloud Firestore
  • אמולטור Authentication
  • אמולטור Pub/Sub
  • אמולטור התראות של Firebase

כדי להפעיל אירועים ברקע, צריך לשנות את המשאבים בקצה העורפי באמצעות Emulator Suite UI, או על ידי חיבור האפליקציה או קוד הבדיקה לאמולטורים באמצעות ה-SDK של הפלטפורמה.

בדיקות handler של אירועים מותאמים אישית שהופעלו על ידי תוספים

לפונקציות שאתם מטמיעים כדי לטפל באירועים מותאמים אישית של Firebase Extensions עם גרסה 2 של Cloud Functions, האמולטור Cloud Functions מתחבר לאמולטור של Eventarc כדי לתמוך בטריגרים של Eventarc.

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

סביבת זמן הריצה Cloud Functions מגדירה את משתנה הסביבה EVENTARC_EMULATOR לערך localhost:9299 בתהליך הנוכחי, אם אמולטור Eventarc פועל. ה-Firebase Admin SDK מתחברים באופן אוטומטי למהדר של Eventarc כשמגדירים את משתנה הסביבה EVENTARC_EMULATOR. אפשר לשנות את יציאת ברירת המחדל כפי שמוסבר בקטע הגדרה Local Emulator Suite.

כשמשתני הסביבה מוגדרים כראוי, האירועים נשלחים באופן אוטומטי על ידי Firebase Admin SDK למהדמטור של Eventarc. לאחר מכן, האמולטור של Eventarc מבצע קריאה חוזרת לאמולטור Cloud Functions כדי להפעיל handlers רשומים.

אפשר לבדוק את יומני Functions ב-Emulator Suite UI כדי לקבל פרטים על ביצוע הטיפול.

אינטראקציות עם שירותים אחרים

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

Cloud Firestore

אם יש לכם פונקציות שמשתמשות ב-Firebase Admin SDK כדי לכתוב ב-Cloud Firestore, פעולות הכתיבה האלה יישלחו למהדר של Cloud Firestore אם הוא פועל. אם הפעולות האלה יפעילו פונקציות נוספות, הן יופעלו במהמתר Cloud Functions.

Cloud Storage

אם יש לכם פונקציות שמשתמשות ב-Firebase Admin SDK (גרסה 9.7.0 ואילך) כדי לכתוב ב-Cloud Storage, פעולות הכתיבה האלה יישלחו למהדר של Cloud Storage אם הוא פועל. אם פעולות הכתיבה האלה מפעילים פונקציות נוספות, הן ירוצו באמולטור Cloud Functions.

Firebase Authentication

אם יש לכם פונקציות שמשתמשות ב-Firebase Admin SDK (גרסה 9.3.0 ואילך) כדי לכתוב ב-Firebase Authentication, פעולות הכתיבה האלה יישלחו למהדמטור האימות אם הוא פועל. אם הפעולות האלה יפעילו פונקציות נוספות, הן יופעלו במהמתר Cloud Functions.

אירוח ב-Firebase

אם אתם משתמשים ב-Cloud Functions כדי ליצור תוכן דינמי עבור Firebase Hosting, firebase emulators:start משתמש בפונקציות ה-HTTP המקומיות שלכם כשרתי proxy לאירוח.

התראות ב-Firebase

בכל פרויקט שכולל לפחות טריגר אחד להתראות של Firebase, ממשק המשתמש של האמולטור כולל את הכרטיסייה FireAlerts. כדי לאמולציה של טריגר התראה:

  1. פותחים את הכרטיסייה FireAlerts. בכרטיסייה הזו מוצגת תפריט נפתח עם סוגי ההתראות שיש להן טריגרים משויכים (לדוגמה, אם יש לכם טריגר onNewFatalIssuePublished, יוצג crashlytics.newFatalIssue).
  2. בוחרים סוג התראה. הטופס מתמלא באופן אוטומטי בערכי ברירת מחדל, שאפשר לערוך. תוכלו לערוך את השדות של האירוע (המערכת מפיקה מידע אחר מאירוע ההתראה, מדמות ערכים או מיוצרת באופן אקראי).
  3. בוחרים באפשרות Send Alert כדי לשלוח התראה סינתטית למהדמם הפונקציות, עם רישום ביומן בAlerts במסוף Firebase (וגם ביומנים).

רישום ביומן

הסימולטור מעביר בזמן אמת יומנים מהפונקציות שלכם לחלון מסוף שבו הן פועלות. הוא מציג את כל הפלט מהצהרות console.log(),‏ console.info(),‏ console.error() ו-console.warn() בתוך הפונקציות.

השלבים הבאים

כדי לראות דוגמה מלאה לשימוש בחבילת האמולטור של Firebase, אפשר לעיין בדוגמה במדריך למתחילים.