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

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

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

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

התקנת ה-CLI של Firebase

כדי להשתמש במהדר Cloud Functions, קודם צריך להתקין את Firebase CLI:

npm install -g firebase-tools

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

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

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

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

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

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

  1. פותחים את החלונית Service Accounts במסוף Google Cloud.
  2. מוודאים שבחרתם באפשרות App Engine default service account, ובתפריט האפשרויות שבצד שמאל בוחרים באפשרות Create key.
  3. כשמופיעה בקשה, בוחרים באפשרות JSON בתור סוג המפתח ולוחצים על יצירה.
  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,‏ Realtime Database ו-Firebase Hosting, בהתאם למוצרים שהפעלתם בפרויקט המקומי באמצעות 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 באמצעות Cloud Functions v2, הסימולטור של 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 רשומים.

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

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

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

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. בוחרים באפשרות שליחת התראה כדי לשלוח התראה סינתטית לאמולטור הפונקציות, כשהרישום ביומן זמין בקטע התראות במסוף Firebase (וגם ביומנים).

רישום ביומן

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

השלבים הבאים

דוגמה מלאה לשימוש בחבילת המהדמנים של Firebase מופיעה במדריך למתחילים בנושא בדיקות.