העברת תוספים ל-Firebase לערכות פונקציות

במדריך הזה מוסבר איך להעביר את התוספים שלכם מהסביבה Firebase Extensions שיצאה משימוש אל ערכת פונקציות שאפשר להתקין ולפרוס ב-Cloud Functions משלכם עבור בסיס הקוד של Firebase (דור שני).

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

במדריך הזה, התוסף Stream Cloud Firestore to BigQuery (firestore-bigquery-export) משמש כדוגמה שמציגה את הפקודות ואת הפלט של הפקודות בכל שלב של המיגרציה.

קביעת נתיב ההעברה

‫Firebase מעודדת את כל בעלי האתרים ב-Firebase Extensions ליצור תחליפים לתוספים שלהם כערכות פונקציות שפורסמו ב-npm. יש כמה דרכים לבדוק אם יש ערכת פונקציות חלופית לתוספים שלכם:

  • עוברים אל הדף Extensions במסוף Firebase של הפרויקט. לכל תוסף שהתקנתם יש אינדיקציה אם יש לו תחליף של ערכת פונקציות.
  • מריצים את הפקודה firebase ext:list בתוך פרויקט Firebase במסוף כדי לראות אילו מהתוספים שהתקנתם הוחלפו בתוספים רשמיים:

    firebase ext:list --project my-project
    
    i  extensions: ensuring required API firebaseextensions.googleapis.com is enabled...
    ✔  extensions: required API firebaseextensions.googleapis.com is enabled
    i  extensions: list of extensions installed in my-project:
    ┌────────────────────────────────────┬───────────┬────────────────────────────────┬────────┬─────────┬─────────────────────┬───────────────────────────────────────────────────┐
    │ Extension                          │ Publisher │ Instance ID                    │ State  │ Version │ Your last update    │ Replacement Kit                                   │
    ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤
    │ firebase/firestore-bigquery-export │ firebase  │ firestore-bigquery-export-zbrp │ ACTIVE │ 0.3.2   │ 2026-06-10 18:35:03 │ @firebase-function-kits/firestore-bigquery-export │
    ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤
    │ firebase/storage-resize-images     │ firebase  │ storage-resize-images          │ ACTIVE │ 0.3.6   │ 2026-06-03 17:41:24 │                                                   │
    └────────────────────────────────────┴───────────┴────────────────────────────────┴────────┴─────────┴─────────────────────┴───────────────────────────────────────────────────┘
    ⚠ Notice: Firebase Extensions will shut down on March 31, 2027. Learn more: https://firebase.google.com/docs/extensions/faq-and-troubleshooting
    

אם יש ערכת פונקציות רשמית חלופית לתוסף שלכם, תוכלו להעביר אותו באמצעות הקטע העברה לערכות פונקציות ב-npm.

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

בחירת מסלול ההעברה: העברה לערכות פונקציות ב-npm העברה לערכת פונקציות שנוצרה באופן עצמאי

העברה לערכות פונקציות ב-npm

בדיקה אם יש מגבלות ידועות על ההעברה

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

  • מאגרי Docker בהתאמה אישית ומפתחות KMS דורשים פתרון עקיף ידני Cloud Functions for Firebase לא תומך בהחלפת פרמטרים של המערכת להגדרת מאגר Docker בהתאמה אישית או מפתח הצפנה בניהול הלקוח (מפתח KMS). אם התוסף מגדיר אחד מהפרמטרים האלה, אפשר לעיין בפתרון הבעיה בשאלות הנפוצות.

לפני שמתחילים

צריך להגדיר את Firebase CLI ולאתחל פרויקט Firebase. כשמשתמשים ב-CLI, צריך לוודא שמשתמשים בגרסה firebase-tools >= 15.32.0, שכוללת את הפקודות החדשות של העברה וערכת פונקציות.

הרשאות ותפקידים נדרשים בחשבון

בהתאם למה שצריך ליצור ולהגדיר באמצעות Firebase CLI במהלך ההעברה, לחשבון שבו אתם משתמשים כדי לבצע אימות באמצעות Firebase ו-Google Cloud צריכים להיות התפקידים הבאים:

  • roles/firebaseextensions.editor
  • roles/cloudbuild.builds.editor
  • roles/artifactregistry.writer
  • roles/run.developer
  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountCreator
  • ‫roles/cloudfunctions.admin (אם צריך לעשות setIamPermissions לנקודות קצה ציבוריות)
  • ‫roles/secretmanager.admin (אם משתמשים בסודות)
  • roles/serviceusage.serviceUsageAdmin (אם צריך להפעיל ממשקי API חדשים)

מומלץ להשתמש בחשבון שבו כבר הותקנו תוספים והופעלו פונקציות, כי רוב ההרשאות האלה כבר ניתנו. אם החשבון שמעבירים צריך עוד תפקידים, פועלים לפי Google Cloud ההוראות בנושא IAM כדי להוסיף אותם.

בחירת תהליך עבודה של CLI

כדי להעביר מופע של תוסף לערכת פונקציות שזמינה ב-npm, בוחרים באחת מהאפשרויות הבאות:

  • (מומלץ) מעבירים באמצעות פקודת ה-CLI‏ ext:migrate. הפקודה הזו פורסת את ערכת הפונקציות החלופית לפני שמסירים את התוסף שהיא מחליפה.
  • מעבירים באמצעות פקודות ה-CLI של ערכות הפונקציות. אפשר להשתמש בפקודות נפרדות כדי לעדכן את התוסף, להתקין ערכת פונקציות, להגדיר אותה כמו התוסף, לפרוס את הערכה ולהסיר את התוסף. כך יש יותר גמישות בסידור מחדש של פקודות או בביצוע עבודה נוספת בין השלבים.

העברה באמצעות ext:migrate

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

firebase ext:migrate --project <project-id>

הפקודה הזו תנחה אתכם בתהליך של:

  1. בחירת תוסף להעברה שיש לו ערכת פונקציות רשמית זמינה כתחליף.
  2. בחירת מופע ספציפי של התוסף.
  3. עדכון התוסף לגרסה העדכנית שלו, אם צריך.
  4. התקנת ערכת הפונקציות, הגדרת מופע באופן זהה להגדרת מופע התוסף.
  5. פריסת ערכת הפונקציות.
  6. מוודאים שערכת הפונקציות נפרסה בהצלחה ושהופעלו כל ה-lifecycle hooks, אם יש כאלה.
  7. הסרת מופע התוסף.

אם אתם יודעים את התוסף הספציפי או את מופע התוסף שאתם רוצים להעביר, אתם יכולים לציין אותו באמצעות הדגלים הבאים של שורת הפקודה:

firebase ext:migrate --extension firebase/firestore-bigquery-export --project <project-id>

# or

firebase ext:migrate --ext-instance firestore-bigquery-export-abcd --project <project-id>

אם אתם יודעים לאיזה חבילה ספציפית אתם רוצים להעביר את המינוי, במיוחד אם זו לא חבילת החלפה רשמית שמופיעה ברשימה של Google, אתם יכולים לציין אותה באמצעות הדגל --package:

firebase ext:migrate --ext-instance firestore-bigquery-export-abcd --package @firebase-function-kits/firestore-bigquery-export --project <project-id>

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

כדי לוודא שלא היו שגיאות ב-firebase deploy של ערכת הכלים, בודקים ביומני הפריסה אם הופעלו ווים של מחזור החיים. תוספים פופולריים, כמו Stream Cloud Firestore to BigQuery, משתמשים ב-lifecycle hooks. בדוגמה הבאה אפשר לראות איך נראה וו של מחזור חיים כשהוא מופעל:

i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i  functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project

הודעות היומן האלה מאשרות את הדברים הבאים:

  • נמצאה פונקציית Lifecycle Hook והיא הופעלה.
  • משימה הוכנסה לתור בתור המשימות שמשויך להוק (hook) מחזור החיים.
  • סופק קישור ל-Cloud Logging כדי שתוכלו לוודא שהמשימה הושלמה ללא שגיאות.

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

firebase functions:lifecycle:run <hook-name> <codebase>

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

firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>

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

בדיקת קובץ ה-README של ערכת הפונקציות

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

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

לפני שמתחילים, צריך לזהות ולרשום את מזהה המופע של התוסף שרוצים להעביר לערכת כלים, ואת שם חבילת ה-npm של ערכת הכלים החלופית. אפשר למצוא את שניהם באמצעות הפלט של firebase ext:list. דוגמה לשימוש ב-ext:list זמינה במאמר קביעת מסלול ההעברה.

1. שדרוג של מופע התוסף לגרסה העדכנית

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

אפשר להשתמש באחת מהאפשרויות הבאות כדי לעדכן את התוסף, בהתאם למקום שבו הוא הותקן:

  • ממסוף Firebase
  • מ-Firebase CLI באמצעות:
    • firebase ext:update <extension-instance-id> --project <project-id> firebase deploy --only extensions --project <project-id>

אם מדלגים על השלב הזה, ה-CLI יציג בקשה לשדרוג כשמייצאים את ההגדרה, אם התוסף לא בגרסה העדכנית.

2. בדיקה והתקנה של מופע של ערכת פונקציות חלופיות

כדי להתקין את ערכת הפונקציות, מריצים את פקודת ה-CLI הבאה:

firebase functions:kits:install --template migration --no-configure --package <npm-package-name> --project <project-id>

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

אחרי שמתקינים את ערכת הכלים, נוצרת ספרייה חדשה בתוך הפרויקט Firebase במיקום כמו function-kits/<kit-name>/source. הספרייה הזו מכילה את חבילת ה-npm עם ערכת הכלים שמחליפה את התוסף, וקובץ index.ts בסיסי שמייצא את הפונקציות האלה כדי ש-Firebase יוכל לפרוס ולהגדיר תצורה בהתאמה אישית.

מעיינים בקובץ ה-README של ערכת הכלים ופועלים לפי ההוראות הנוספות שמפורטות בו.

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

דוגמה:

firebase functions:kits:install --template migration --no-configure --package @firebase-function-kits/firestore-bigquery-export --project my-project

3. מגדירים את מופע Function Kit באופן זהה לתוסף

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

firebase ext:export --mode functions --instance <extension-instance-id> --kit-instance <kit-instance-id> --project <project-id>

בסוף השלב הזה, פרטי ההגדרה של המופע הזה נשמרים בקובץ .env ספציפי לפרויקט בתיקיית ההגדרות של המופע, כמו: function-kits/<kit-name>/config-<instance-id>/.env.<project-id>

4. פריסה ואימות של החלפת הערכה

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

אם ערכת הכלים משתמשת בפרמטרים חדשים שלא היו קיימים במופע התוסף שממנו ביצעתם את ההעברה, ה-CLI‏ Firebase יבקש מכם אותם בתחילת תהליך הפריסה. לא צפוי שזה יקרה בדוגמה הזו מתוך תוסף firestore-bigquery-export מעודכן, אבל הרבה ערכות כלים מבקשות פרמטר חדש לכל מקור הפעלת אירוע שבו נעשה שימוש בערכת הכלים. כחלק מההעברה הזו, ערכות הכלים המעודכנות משתמשות בפונקציות מהדור השני, במקום בפונקציות מהדור הראשון שבהן השתמשו התוספים בעבר. בדור השני, הפונקציות ממוקמות ליד מקורות האירועים שלהן ומוספות כפרמטר נוסף. בעדכונים עתידיים, אם יתווספו פרמטרים חדשים, ה-CLI יציג לכם בקשה בהפריסה הבאה.

דוגמה:

firebase deploy --only functions:firestore-bigquery-export --project my-project

פלט:

=== Deploying to 'my-project'...
i  deploying functions
i  functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project
i  functions: ensuring required API bigquery.googleapis.com is enabled...
i  functions: ensuring required API cloudtasks.googleapis.com is enabled...
✔  functions: required APIs are enabled
i  functions: granting declarative IAM roles to managed service account:
   - BigQuery Data Editor
   - BigQuery User
   - Cloud Datastore User
   - Eventarc Event Receiver
   - roles/run.invoker
✔  functions: successfully granted IAM roles
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-fsexportbigquery(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-initBigQuerySync(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-setupBigQuerySync(us-central1)...
✔  functions[kit-firestore-bigquery-export-fsexportbigquery(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-initBigQuerySync(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-setupBigQuerySync(us-central1)] Successful create operation.
i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/us-central1/queues/kit-firestore-bigquery-export-initBigQuerySync.
✔  Deploy complete!

כדי לוודא שלא היו שגיאות ב-firebase deploy של ערכת הכלים, בודקים ביומני הפריסה אם הופעלו ווים של מחזור החיים. תוספים פופולריים, כמו Stream Cloud Firestore to BigQuery, משתמשים ב-lifecycle hooks. בדוגמה הבאה אפשר לראות איך נראה וו של מחזור חיים כשהוא מופעל:

i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i  functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project

הודעות היומן האלה מאשרות את הדברים הבאים:

  • נמצאה פונקציית Lifecycle Hook והיא הופעלה.
  • משימה הוכנסה לתור בתור המשימות שמשויך להוק (hook) מחזור החיים.
  • סופק קישור ל-Cloud Logging כדי שתוכלו לוודא שהמשימה הושלמה ללא שגיאות.

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

firebase functions:lifecycle:run <hook-name> <codebase>

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

firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>

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

5. הסרת התוסף

אחרי שמאמתים את ערכת הפונקציות שנפרסה, אפשר להסיר את התוסף כדי שלא יהיה כפילות בהתנהגות שלו – פעם אחת עבור ערכת הפונקציות ופעם אחת עבור התוסף. אפשר להסיר את כל התוספים מ-FirebaseCLI בלי קשר לאופן ההתקנה שלהם, אם מעבירים את הדגל --immediate:

firebase ext:uninstall <extension-instance-id> --project <project-id> --immediate

דוגמה:

firebase ext:uninstall firestore-bigquery-export --project my-project --immediate

פלט:

i  extensions: uninstalling firestore-bigquery-export...
i  extensions: deleting extension instance resources in project my-project...
✔  extensions: successfully uninstalled firestore-bigquery-export

העברות מתקדמות

יכול להיות שיש לכם תוספים בכמה Firebase פרויקטים שאתם רוצים לנהל באמצעות בסיס קוד אחד. לדוגמה, אם פורסים את אותה התשתית בסביבת testing ובסביבת production, וכל אחת מהן כוללת מופע documents Cloud Firestore שמייצאים ל-BigQuery, יכול להיות שיהיו שני מופעים של התוסף firestore-bigquery-export:

  • export-documents-testing
  • export-documents-production

אם העברתם את שני מופעי התוספים האלה לשני מופעים של ערכת פונקציות בבסיס קוד יחיד כשעבדתם עם Firebase CLI ופרסתם באמצעות firebase deploy --project testing ו-firebase deploy --project production, כל פריסה תיצור שני מופעים בסביבות testing ו-production.

במקום זאת, מחליפים את שני המקרים של התוסף במקרה אחד של ערכת פונקציות firestore-bigquery-export שנפרסה למספר פרויקטים, כאשר לכל פרויקט יש תצורה משלו. ספריית ההגדרות של המופע צריכה להיראות כך:

  • config-export-documents/
    • .env.testing
    • .env.production

כל פריסה ל-testing ול-production יוצרת מופע אחד של ערכת הכלים עם ההגדרה המתאימה. הפקודות הקיימות ב-CLI יוצרות את ההגדרה הזו כל עוד מעבירים את הדגל --project בכל הפעלה של ext:migrate או functions:kits:install.

דוגמה:

firebase functions:kits:install --package @firebase-function-kits/firestore-bigquery-export --project testing --no-configure --template migration
✔ What would you like to name this kit? firestore-bigquery-export
✔ What would you like to name this instance? export-documents
✔  Wrote function-kits/firestore-bigquery-export/source/package.json
✔  Wrote function-kits/firestore-bigquery-export/source/tsconfig.json
✔  Wrote function-kits/firestore-bigquery-export/source/.gitignore
✔  Wrote function-kits/firestore-bigquery-export/source/src/index.ts
i  functions: Running npm install
✔  Wrote configuration info to firebase.json
✔  functions: Function kit firestore-bigquery-export successfully installed.
‫
# This creates the export-documents instance with an empty .env.testing file
# for the testing project. Now populate it via export:
firebase ext:export --mode functions --instance export-documents-testing \
  --kit-instance export-documents --project testing

# Repeat the export for production into the same kit instance to create
# .env.production from the export-documents-prod instance:
firebase ext:export --mode functions --instance export-documents-prod \
  --kit-instance export-documents --project production

עכשיו יש לכם מופע יחיד של ערכת כלים שהוגדר לפריסה בפרויקטים testing ו-production עם ההגדרות המתאימות. אם יוצרים מכונה בפרויקט testing ומריצים את הפקודה functions:kits:install לאותו חבילה בפרויקט production, תוצג בקשה לבחור אם להשתמש מחדש במכונה שהוגדרה עבור testing או להתקין מכונה שנייה.