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

אתם יכולים לבצע בדיקות מקומיות של האפליקציה לפני הפריסה ב-App Hosting באמצעות אמולטור App Hosting, שהוא חלק מ-Firebase Local Emulator Suite.

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

הנושא הזה מיועד למשתמשים שכבר מכירים את App Hosting. אם צריך, כדאי לעיין במבוא ל-App Hosting ובחומרים אחרים שיעזרו לכם להבין איך App Hosting עובד.

מה אפשר לעשות עם המהדר של App Hosting?

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

האמולטור של App Hosting:

  1. מאפשרת להריץ את אפליקציית האינטרנט באופן מקומי, עם משתני סביבה וסודות שהוגדרו בקובצי תצורה של apphosting.yaml.
  2. אפשר לשנות את משתני הסביבה והסודות לשימוש במהדר באמצעות הקובץ apphosting.emulator.yaml.
  3. אפשר להשתמש בו לצד אמולטורים אחרים של Firebase. אם אתם משתמשים ב-Firestore, ב-Auth או באמולטור אחר, ה-Local Emulator Suite מוודא שהאמולטורים האלה מופעלים קודם לאמולטור App Hosting.

הגדרת האמולטור

כדי להתחיל, צריך להתקין ולאתחל את Local Emulator Suite כפי שמתואר במאמר התקנה, הגדרה ושילוב של Local Emulator Suite. בנוסף למהדמנים אחרים של Firebase שרוצים להגדיר, חשוב לבחור באפשרות App Hosting Emulator. ב-CLI תופיע בקשה להזין ערכים מסוימים של המהדר App Hosting, כולל:

  • ספריית השורש של האפליקציה ביחס לפרויקט. הנתיב הזה חשוב אם אתם משתמשים במאגרים מונוליתיים עם App Hosting.
  • אם רוצים לשנות את הערכים לפיתוח מקומי.
  • אם רוצים לתת לחברי צוות גישה לסודות לפיתוח מקומי.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (./)

? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)

? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
 ◯ API_KEY

? What new value would you like for plaintext MEMCACHE_ADDR?

? What would you like to name the secret reference for API_KEY? (test-api-key)

? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]

? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:

✔  Successfully set IAM bindings on secret test-api-key.

הערכים שתספקו בתהליך ההגדרה הזה ישמשו לעדכון ההגדרות של המהדר של App Hosting ב-firebase.json. אפשר גם להגדיר את המהדר של App Hosting על ידי עדכון firebase.json ישירות. הסכימה של אמולטור האירוח של אפליקציות היא:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • השדה startCommand נוצר ומוגדר באופן אוטומטי כשהמכונה הווירטואלית מופעלת. אם לא תספקו את הפרמטר הזה, הסימולטור יזהה ויפעיל את הפקודה dev של מנהל החבילות.
  • rootDirectory משמש לתמיכה בהגדרות של פרויקטים ב-monorepo. אם אפליקציית האינטרנט נמצאת בתיקיית משנה, צריך לספק את הנתיב של התיקייה הזו ביחס לשורש (המיקום של firebase.json).

ניהול ההדמיה

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

קובץ apphosting.emulator.yaml נועד לאפשר לכם לבצע השמירה (commit) ולשתף אותו עם עמיתים בצורה בטוחה. כדי להבטיח שלא תבצעו בטעות השמירה של מידע רגיש במאגרי המקור, כל משתנה סביבה שהוא סוד ב-apphosting.yaml חייב להיות סוד גם ב-apphosting.emulator.yaml. אם סוד לא צריך להשתנות בין סביבה לייצור לבין פיתוח מקומי (למשל, מפתח API של Gemini), אין צורך להוסיף אותו ל-apphosting.emulator.yaml. במקום זאת, מקצים לצוות גישה לסוד.

אם האפליקציה שלכם משתמשת בסודות רבים (לדוגמה, מפתחות API לשלושה שירותים שונים, עם ערכים שונים לכל אחת מהסביבות: ייצור, סביבה לניסוי ופיתוח מקומי), יכול להיות שתחרגו מהתוכנית ללא תשלום של Cloud Secret Manager ותצטרכו לשלם 0.06 $לכל סוד נוסף בחודש. אם אתם מעדיפים לנהל את ההגדרות המקומיות מחוץ למערכת בקרת הגרסאות כדי להימנע מהחיוב הזה, תוכלו להשתמש בקובץ apphosting.local.yaml הקודם. בשונה מ-apphosting.emulator.yaml, בקובץ הזה מותר לספק ערכים של טקסט ללא הצפנה למשתני סביבה שהם ערכים סודיים ב-apphosting.yaml.

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

הסודות שמאוחסנים ב-apphosting.emulator.yaml נקרא כשהמכונה הווירטואלית מופעלת. המשמעות היא שלצוות הפיתוח צריכה להיות גישה לסוד. אפשר להשתמש בפקודה apphosting:secrets:grantaccess כדי להעניק גישה לסוד למשתמש או לקבוצה באימייל.

firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com

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

מומלץ להשתמש בקבוצות Google כדי לנהל את הגישה לסודות, במקום להעניק גישה למשתמשים ספציפיים. כך תוכלו להוסיף חברים חדשים לצוות המפתחים בקלות, כי הוספה שלהם לקבוצה תעניק להם גישה לכל הסודות שהם צריכים. יכול להיות שכבר יש לכם קבוצה מתאימה שבה המפתחים מתקשרים ביניהם. שליטה בגישה באמצעות קבוצות Google עוזרת גם לוודא שמפתחים שעוזבים את הצוות יאבדו את הגישה לכל הסודות כשהם יוסרו מקבוצת האימייל. עם זאת, אם לסוד יש גישה לנתוני ייצור או לתופעות לוואי בעולם האמיתי, עדיין יכול להיות שעדיף לבצע רוטציה של המפתח ולתת לו ערך חדש באמצעות firebase apphosting:secrets:set.

הפעלת האמולטור

firebase emulators:start

הפקודה הזו תפעיל את כל האמולטורים שהוגדרו בקובץ firebase.json, כולל אמולטור App Hosting.