מיקומים של Cloud Functions

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

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

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

במקרים שבהם אזור מסוים לא נתמך, אפשר להיעזר במיפוי הבא כדי לראות אילו אזורים קרובים נתמכים עבור 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