חיבור האפליקציה לאמולטור Cloud Functions

לפני שמחברים את האפליקציה למהדמ של Cloud Functions, חשוב לוודא שמבינים את תהליך העבודה הכללי של Firebase Local Emulator Suite, ומתקינים ומגדירים את Local Emulator Suite ובודקים את פקודות ה-CLI שלו.

בחירת פרויקט ב-Firebase

ה-Firebase Local Emulator Suite מעתיק מוצרים לפרויקט Firebase יחיד.

כדי לבחור את הפרויקט שבו רוצים להשתמש, לפני שמפעילים את הסימולטורים, מריצים את הפקודה firebase use בספריית העבודה ב-CLI. לחלופין, אפשר להעביר את הדגל --project לכל הפקודות של הסימולטור.

Local Emulator Suite תומך באמולציה של פרויקטים אמיתיים ב-Firebase פרויקטים של הדגמה.

סוג הפרויקט תכונות שימוש עם אמולטורים
ריאל

פרויקט Firebase אמיתי הוא פרויקט שיצרתם והגדרתם (סביר להניח דרך מסוף Firebase).

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

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

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

הדגמה

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

מזהי פרויקטים של פרויקטים לדוגמה כוללים את הקידומת demo-.

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

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

  • הגדרה קלה יותר, כי אפשר להריץ את הסימולטורים בלי ליצור פרויקט Firebase
  • אבטחה חזקה יותר, כי אם הקוד מפעיל בטעות משאבים לא ממולאמים (בפרודקשן), אין סיכוי לשינוי נתונים, שימוש בחיוב
  • תמיכה טובה יותר במצב אופליין, כי אין צורך לגשת לאינטרנט כדי להוריד את הגדרות ה-SDK.

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

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

אם פעילויות האב טיפוס והבדיקה כוללות פונקציות קצה עורפי שניתן לקרוא, מגדירים את האינטראקציה עם האמולטור 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 בקוד תוצג מהאמולטור המקומי בפורמט הבא:

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 כדי לקבל פרטים על ביצוע הטיפול.

הגדרת סביבת בדיקה מקומית

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

כשמשתמשים במהדר Cloud Functions מקומי, אפשר לשנות את משתני הסביבה של הפרויקט על ידי הגדרת קובץ .env.local. תוכן של הפרמטר .env.local מקבל עדיפות על פני .env והקובץ .env הספציפי לפרויקט.

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

.env .env.dev .env.local
PLANET=Earth

AUDIENCE=בני אדם

AUDIENCE=Dev בני אדם AUDIENCE=בני אדם מקומיים

כשהמכונה הווירטואלית מופעלת בהקשר המקומי, היא טוענת את משתני הסביבה באופן הבא:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

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

האמולטור Cloud Functions תומך בשימוש בסודות כדי לשמור מידע הגדרות רגיש ולגשת אליו. כברירת מחדל, הסימולטור ינסה לגשת לסודות הייצור באמצעות Application Default Credentials. במצבים מסוימים, כמו סביבות CI, יכול להיות שהאמולטור לא יקבל גישה ערכים סודיים עקב הגבלות הרשאות.

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

אילו כלים נוספים קיימים לבדיקת Cloud Functions?

למהדורת המהווה את המהדמ של Cloud Functions מצורפים כלי בדיקה וכלי יצירת אב טיפוס אחרים:

  • מעטפת Cloud Functions, שמאפשרת פיתוח ויצירת אב טיפוס של פונקציות אינטראקטיביות וחזרתיות. המעטפת משתמשת באמולטור Cloud Functions עם ממשק בסגנון REPL לצורכי פיתוח. אין שילוב עם סופקו אמולטורים של Cloud Firestore או Realtime Database. באמצעות המעטפת, אפשר ליצור נתונים מדומים ולבצע קריאות לפונקציות כדי לדמות אינטראקציה עם מוצרים ש-Local Emulator Suite לא תומך בהם כרגע: Analytics,‏ Remote Config ו-Crashlytics.
  • Firebase Test SDK for Cloud Functions, Node.js עם מסגרת מוקה לפיתוח פונקציות. למעשה, Cloud Functions Test SDK מספק מעל המעטפת של Cloud Functions.

מידע נוסף על מעטפת Cloud Functions ועל Cloud Functions Test SDK זמין במאמרים בדיקת פונקציות באופן אינטראקטיבי ובדיקת יחידה של Cloud Functions.

ההבדל בין המהדורה לבדיקה של Cloud Functions לבין המהדורה בסביבת הייצור

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

Cloud IAM

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

מגבלות על הזיכרון והמעבד

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

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

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

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

חשוב לזכור שהסביבה המקומית לפיתוח של Cloud Functions עשויה להיות שונה מסביבת הייצור של Google:

  • אפליקציות שאתם מתקינים באופן מקומי כדי לדמות את סביבת הייצור (למשל, ImageMagick ממדריך זה) עשויים להיות שונים בהתנהגות שלהם בסביבת הייצור, במיוחד אם צריך או לפתח בסביבה שאינה של Linux. מומלץ לפרוס עותק בינארי משלכם של התוכנית החסרה לצד הפריסה של הפונקציה.

  • באופן דומה, ייתכן שתוכנות שירות מובנות (למשל, פקודות מעטפת כמו ls,‏ mkdir) יהיו שונות מהגרסאות הזמינות בסביבת הייצור, במיוחד אם אתם מפתחים בסביבה שאינה Linux (למשל, macOS). כדי לפתור את הבעיה, אפשר להשתמש בחלופות ל-Node בלבד לפקודות מקוריות, או ליצור תוכניות בינאריות של Linux כדי לצרף אותן לפריסה.

מנסה שוב

האמולטור של Cloud Functions לא תומך בניסיון חוזר של פונקציות במקרה של כשל.

מה הלאה?