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

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

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

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

התקנת Firebase CLI

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

npm install -g firebase-tools

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

  • firebase-admin גרסה 8.0.0 ומעלה.
  • firebase-functions גרסה 3.0.0 ומעלה.

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

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

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

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

  1. פותחים את החלונית Service Accounts במסוף Google Cloud.
  2. מוודאים שחשבון השירות שמוגדר כברירת מחדל App Engine נבחר, ומשתמשים בתפריט האפשרויות בצד שמאל כדי לבחור באפשרות יצירת מפתח.
  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, בהתאם למוצרים שהפעלתם בפרויקט המקומי באמצעות firebase init. אם רוצים להפעיל אמולטור מסוים, משתמשים בדגל --only:

firebase emulators:start --only functions

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

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

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

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

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

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

Kotlin
// 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().useEmulator(withHost: "localhost", port: 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

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

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

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

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

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

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

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

רישום ביומן

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

השלבים הבאים

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