Cloud Functions הוא שירות אזורי, כלומר התשתית שמריצה את הפונקציה נמצאת באזורים ספציפיים, ו-Google מנהלת אותה כך שתהיה זמינה באופן יתיר בכל האזורים האלה.
כשבוחרים את האזורים שבהם הפונקציות יפעלו, השיקולים העיקריים צריכים להיות זמן האחזור והזמינות. בדרך כלל אפשר לבחור אזורים שקרובים למשתמשים, אבל כדאי גם להביא בחשבון את המיקום של המוצרים והשירותים האחרים שבהם האפליקציה משתמשת. שימוש בשירותים בכמה אזורים יכול להשפיע על זמן האחזור של האפליקציה ועל התמחור.
כברירת מחדל, ה-Firebase CLI פורס פונקציות באזור בהתאם להגדרות של הפרויקט. בפונקציות מבוססות-אירועים, בדרך כלל הפריסה מתבצעת באזור של מקור הנתונים שמפעיל את האירוע (כמו מסד נתונים של Cloud Firestore או קטגוריה של Cloud Storage), ואם זה לא אפשרי, הפריסה מתבצעת באזור us-central1.
אחרי הפריסה, אפשר לאמת את האזור במסוף Firebase או על ידי הפעלת firebase functions:list. אם רוצים שהפונקציה תפעל באזור אחר, אפשר לשנות את האזור שלה.
אזורים נתמכים
ברשימות שבקטע הזה, הסמל energy_savings_leaf מציין שהחשמל באזור הזה מיוצר עם פליטות פחמן נמוכות. מידע נוסף זמין במאמר אנרגיה נטולת פחמן באזורים של Google Cloud.
תמחור ברמה 1
Cloud Functions זמין באזורים הבאים עם תמחור ברמה 1:
| אזור | מיקום | גרסאות המוצרים הנתמכות | פליטות פחמן דו-חמצני (CO2) |
|---|---|---|---|
africa-south1 |
יוהנסבורג | רק בדור השני | |
asia-east1 |
טאיוואן | דור ראשון, דור שני | |
asia-east2 |
הונג קונג | דור ראשון בלבד | |
asia-northeast1 |
טוקיו | דור ראשון, דור שני | |
asia-northeast2 |
אוסקה | דור ראשון, דור שני | |
europe-north1 |
פינלנד | רק בדור השני | energy_savings_leaf |
europe-southwest1 |
מדריד | רק בדור השני | |
europe-west1 |
בלגיה | דור ראשון, דור שני | energy_savings_leaf |
europe-west4 |
הולנד | רק בדור השני | |
europe-west8 |
מילאנו | רק בדור השני | |
europe-west9 |
פריז | רק בדור השני | energy_savings_leaf |
me-west1 |
תל אביב | רק בדור השני | |
europe-west2 |
לונדון | דור ראשון בלבד | |
us-central1 |
איווה | דור ראשון, דור שני | energy_savings_leaf |
us-east1 |
דרום קרוליינה | דור ראשון, דור שני | |
us-east4 |
צפון וירג'יניה | דור ראשון, דור שני | |
us-east5 |
קולומבוס | רק בדור השני | |
us-south1 |
דאלאס | רק בדור השני | |
us-west1 |
אורגון | דור ראשון, דור שני | energy_savings_leaf |
תמחור ברמה 2
Cloud Functions זמין באזורים הבאים עם תמחור ברמה 2:
| אזור | מיקום | גרסאות המוצרים הנתמכות | פליטות CO2 |
|---|---|---|---|
asia-east2 |
הונג קונג | רק בדור השני | |
asia-northeast3 |
סיאול | דור ראשון, דור שני | |
asia-southeast1 |
סינגפור | דור ראשון, דור שני | |
asia-southeast2 |
ג'קארטה | דור ראשון, דור שני | |
asia-south1 |
מומבאי | רק בדור השני | |
asia-south2 |
דלהי, הודו | רק בדור השני | |
australia-southeast1 |
סידני | דור ראשון, דור שני | |
australia-southeast2 |
מלבורן | רק בדור השני | |
europe-central2 |
ורשה | דור ראשון, דור שני | |
europe-west2 |
לונדון | רק בדור השני | |
europe-west3 |
פרנקפורט | דור ראשון, דור שני | energy_savings_leaf |
europe-west6 |
ציריך | דור ראשון, דור שני | energy_savings_leaf |
europe-west10 |
ברלין | רק בדור השני | |
europe-west12 |
טורינו | רק בדור השני | |
me-central1 |
דוחה | רק בדור השני | |
me-central2 |
דמאם | רק בדור השני | |
northamerica-northeast1 |
מונטריאול | דור ראשון, דור שני | energy_savings_leaf |
northamerica-northeast2 |
טורונטו | רק בדור השני | energy_savings_leaf |
southamerica-east1 |
סאו פאולו | דור ראשון, דור שני | energy_savings_leaf |
southamerica-west1 |
סנטיאגו, צ'ילה | רק בדור השני | |
us-west2 |
לוס אנג'לס | דור ראשון, דור שני | |
us-west3 |
סולט לייק סיטי | דור ראשון, דור שני | |
us-west4 |
לאס וגאס | דור ראשון, דור שני |
לפונקציות באזור מסוים בפרויקט מסוים צריכים להיות שמות ייחודיים (לא תלויי-רישיות), אבל לפונקציות באזורים שונים או בפרויקטים שונים יכולים להיות שמות זהים.
שיטות מומלצות לציון אזור
כברירת מחדל, ה-Firebase CLI פורס פונקציות באזור בהתאם להגדרות של הפרויקט. בפונקציות מבוססות-אירועים, הפונקציה בדרך כלל נפרסת באזור של מקור הנתונים שמפעיל את האירוע (כמו מסד נתונים של Cloud Firestore או קטגוריה של Cloud Storage), ואם זה לא אפשרי, היא נפרסת ב-us-central1.
מומלץ להגדיר אזורים ספציפיים במקום להסתמך על ברירות המחדל של Firebase, שעשויות להשתנות עם הזמן. כשמגדירים אזורים, צריך לפעול לפי ההמלצות שבקטע הזה לכל סוג של טריגר.
כדי להגדיר את האזור שבו הפונקציה פועלת, מגדירים את הפרמטר region בהגדרת הפונקציה, כמו בדוגמה הבאה:
Node.js
exports.firestoreAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
Python
# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
pass
# After
@firestore_fn.on_document_created("my-collection/{docId}",
region="asia-northeast1")
def firestore_trigger_asia(event):
pass
אפשר לציין כמה אזורים על ידי העברת כמה מחרוזות של אזורים מופרדות בפסיקים ב-region. שימו לב גם שבחלק מסוגי הטריגרים ברקע, כשמציינים אזור צריך לציין גם את מסנן האירועים הנכון. בדוגמה שלמעלה, זהו ה-Cloud Firestore document
שמפעיל את האירוע. בטריגר של Cloud Storage מסנן האירועים יכול להיות bucket, בטריגר של Pub/Sub הוא יכול להיות topic וכן הלאה.
במאמר שינוי האזור של פונקציה מוסבר איך לשנות את האזור של פונקציה שמטפלת בתנועה בסביבת הייצור.
פונקציות HTTP ופונקציות שניתן להפעיל מהלקוח
בפונקציות HTTP ובפונקציות שניתן להפעיל, מומלץ להגדיר קודם את הפונקציה לאזור היעד, או לאזור הקרוב ביותר למיקום שבו צפויים להיות רוב הלקוחות, ואז לשנות את הפונקציה המקורית כדי להפנות את בקשת ה-HTTP שלה לפונקציה החדשה (הן יכולות להיות עם אותו שם). אם הלקוחות של פונקציית ה-HTTP תומכים בהפניות אוטומטיות, אתם יכולים פשוט לשנות את הפונקציה המקורית כך שתחזיר סטטוס הפניה אוטומטית של HTTP (301) יחד עם כתובת ה-URL של הפונקציה החדשה. אם הלקוחות שלכם לא מטפלים היטב בהפניות אוטומטיות, אתם יכולים להעביר את הבקשה מהפונקציה המקורית לפונקציה החדשה באמצעות שרת proxy, על ידי הפעלת בקשה חדשה מהפונקציה המקורית לפונקציה החדשה. השלב האחרון הוא לוודא שכל הלקוחות קוראים לפונקציה החדשה.
בחירת מיקום בצד הלקוח לפונקציות שניתן להפעיל
לגבי הפונקציה שניתנת לקריאה, ההגדרות של פונקציות שניתנות לקריאה על ידי הלקוח צריכות לפעול לפי אותן הנחיות כמו פונקציות HTTP. הלקוח יכול גם לציין אזור, וצריך לעשות זאת אם הפונקציה פועלת באזור שאינו ברירת המחדל של הפרויקט.
כדי להגדיר אזורים בלקוח, מציינים את האזור הרצוי באתחול:
Swift
lazy var functions = Functions.functions(region:"europe-west1")
Objective-C
@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];
אינטרנט
var functions = firebase.app().functions('europe-west1');
Android
private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");
C++
firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");
Unity
firebase.Functions.FirebaseFunctions functions;
functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");
פונקציות ברקע
פונקציות ברקע משתמשות בסמנטיקה של מסירת אירועים לפחות פעם אחת, כלומר בנסיבות מסוימות הן עשויות לקבל אירועים כפולים. לכן, צריך להטמיע פונקציות אידמפוטנטיות. אם הפונקציה כבר אידמפוטנטית, אפשר לפרוס אותה מחדש באזור החדש עם אותו טריגר לאירוע, ולהסיר את הפונקציה הישנה אחרי שמוודאים שהפונקציה החדשה מקבלת תנועה בצורה תקינה. במהלך המעבר, שתי הפונקציות יקבלו אירועים. במאמר שינוי האזור של פונקציה מוסבר איך לשנות את האזורים של הפונקציות באמצעות רצף הפקודות המומלץ.
אם הפונקציה לא אידמפוטנטית כרגע, או שהאידמפוטנטיות שלה לא חלה מחוץ לאזור, מומלץ קודם להטמיע אידמפוטנטיות ורק אז להעביר את הפונקציה.
ההמלצות לאזור האופטימלי משתנות בהתאם לסוג הטריגר של האירוע:
| סוג הטריגר | המלצה על אזור |
|---|---|
| Cloud Firestore | האזור הכי קרוב למיקום של המכונה של Cloud Firestore (ראו את החלק הבא) |
| Realtime Database | אותו אזור שבו נמצא המכונה של Realtime Database |
| Cloud Storage | האזור הכי קרוב למיקום הקטגוריה של Cloud Storage (ראו את הקטע הבא) |
| אחרים | אם אתם מבצעים אינטראקציה עם מכונה של Realtime Database, מכונה של Cloud Firestore או קטגוריה של Cloud Storage בתוך הפונקציה, האזור המומלץ הוא אותו אזור כמו במקרה של פונקציה שמופעלת על ידי אחד מהמשאבים האלה. הפונקציות שמקושרות ל-Firebase Hosting יכולות להיות בכל אזור, אבל כדאי לעיין בסקירה הכללית על אירוח ללא שרת (serverless) כדי לקבל המלצות. |
בחירת אזורים על סמך המיקומים של Cloud Firestore ו-Cloud Storage
האזורים שזמינים לפונקציות לא תמיד תואמים בדיוק לאזורים שזמינים למסד הנתונים של Cloud Firestore ולקטגוריות של Cloud Storage.
שימו לב שאם הפונקציה והמשאב (מכונה של מסד נתונים או קטגוריה של Cloud Storage) נמצאים במיקומים שונים, יכול להיות שתחוו זמן אחזור ארוך יותר ועלויות חיוב גבוהות יותר.
בטבלה הבאה מוצג מיפוי של האזורים הקרובים ביותר שנתמכים בפונקציות של Cloud Firestore ו-Cloud Storage, למקרים שבהם אותו אזור לא נתמך:
| אזור או מספר אזורים ל-Cloud Firestore ול-Cloud Storage | האזור הכי קרוב לפונקציות |
|---|---|
nam5 או us-central (במספר אזורים) |
us-central1 |
eur3 או europe-west (במספר אזורים) |
europe-west1 |
europe-west4 (הולנד) |
europe-west1 |
asia-south1 (מומבאי) |
asia-east2 |
asia-south2 (דלהי) |
asia-east2 |
australia-southeast2 (מלבורן) |
australia-southeast1 |