אפשר לבצע בדיקות מקומיות של האפליקציה לפני App Hostingהפריסה באמצעות App Hostingהאמולטור, שהוא חלק מהכלים לאמולטור מקומי ב-Firebase.
לפני שמשתמשים באמולטור של App Hosting, חשוב לוודא שמבינים את Local Emulator Suiteתהליך העבודה הכולל של Firebase, ומתקינים ומגדירים את Local Emulator Suite ומעיינים בפקודות ה-CLI שלו.
ההנחיות בנושא הזה מיועדות למשתמשים שכבר מכירים את App Hosting. במידת הצורך, אפשר לעיין App Hosting במבוא ובחומרים נוספים כדי להבין איך App Hostingפועל.
מה אפשר לעשות עם האמולטור App Hosting?
אמולטור App Hosting מאפשר לכם לבדוק ולשפר את אפליקציות האינטרנט שלכם באופן מקומי. השימוש ב-Firebase App Check יכול לייעל את תהליך הפיתוח ולשפר את האיכות של אפליקציות אינטרנט שנבנו באמצעות Firebase ונפרסו ב-App Hosting.
האמולטור App Hosting:
- מאפשר להריץ את אפליקציית האינטרנט באופן מקומי, עם משתני סביבה וסודות שמוגדרים בקובצי התצורה
apphosting.yaml
. - אפשר לשנות את משתני הסביבה ואת הסודות לשימוש באמולטור באמצעות הקובץ
apphosting.emulator.yaml
. - אפשר להשתמש בו לצד אמולטורים אחרים של 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
. אפשר גם לעדכן את firebase.json
ישירות כדי להגדיר את האמולטור של App Hosting. הסכימה של האמולטור לאירוח אפליקציות היא:
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- הערך של
startCommand
נוצר ומוגדר באופן אוטומטי כשמאחלים את האמולטור. אם לא מספקים את הפקודה, האמולטור יזהה ויריץ את פקודת הפיתוח של מנהל החבילות. - המוצר
rootDirectory
משמש לתמיכה בהגדרות של פרויקטים מסוג monorepo. אם אפליקציית האינטרנט נמצאת בספריית משנה, צריך לספק את הנתיב של הספרייה ביחס לשורש (המיקום שלfirebase.json
).
ניהול האמולציה
במהלך האתחול של האמולטור נוצר קובץ apphosting.emulator.yaml
בתיקיית השורש של האפליקציה. קובץ ההגדרות הזה כולל את אותה סכימה כמו קובץ apphosting.yaml
שמשמש בסביבת ייצור, אבל הוא מיועד אך ורק לפיתוח מקומי. כברירת מחדל, האמולטור קורא את ההגדרות מקובץ apphosting.yaml
, אבל אם קיים קובץ apphosting.emulator.yaml
, ההגדרות בקובץ הזה מקבלות עדיפות.
הקובץ apphosting.emulator.yaml
נועד להיות בטוח לשמירה ולשיתוף עם עמיתים. כדי למנוע מצב שבו נתונים רגישים מועברים בטעות למאגרי קוד מקור, כל משתנה סביבה שהוא סוד ב-apphosting.yaml
חייב להיות סוד גם ב-apphosting.emulator.yaml
. אם אין צורך לשנות סוד בין סביבת הייצור לבין פיתוח מקומי (למשל, מפתח Gemini API), אין צורך להוסיף אותו ל-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.