Cloud Functions הוא אזורי, כלומר התשתית שמריצה את הפונקציה ממוקמת באזורים ספציפיים ומנוהלת על ידי Google כך שתהיה זמינה באופן יתירתי בכל האזורים בתוך האזורים האלה.
כשבוחרים באילו אזורים להריץ את הפונקציות, השיקולים העיקריים צריכים להיות זמן האחזור והזמינות. בדרך כלל אפשר לבחור אזורים שקרובים למשתמשים, אבל צריך גם לקחת בחשבון את המיקום של מוצרים ושירותים אחרים שבהם האפליקציה משתמשת. שימוש בשירותים בכמה אזורים יכול להשפיע על זמן האחזור של האפליקציה וגם על התמחור.
כברירת מחדל, הפונקציות פועלות באזור us-central1
. שימו לב שהאזור הזה יכול להיות שונה מהאזור של מקור אירועים, כמו דלי Cloud Storage.
בהמשך הדף מוסבר איך מציינים את האזור שבו הפונקציה פועלת.
אזורים נתמכים
ברשימות שבקטע הזה, הסמל 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 |
לאס וגאס | דור ראשון, דור שני |
לפונקציות באזור מסוים בפרויקט מסוים צריכים להיות שמות ייחודיים (לא תלויי-רישיות), אבל לפונקציות באזורים שונים או בפרויקטים שונים יכול להיות אותו שם.
שיטות מומלצות לציון אזור
כברירת מחדל, הפונקציות פועלות באזור us-central1
. שימו לב שהאזור הזה יכול להיות שונה מהאזור של מקור אירועים, כמו דלי Cloud Storage. אם אתם צריכים לציין את האזור שבו הפונקציה פועלת, אתם צריכים לפעול לפי ההמלצות שבקטע הזה לכל סוג של טריגר לפונקציה.
כדי להגדיר את האזור שבו הפונקציה פועלת, מגדירים את הפרמטר 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. הלקוח יכול גם לציין אזור, וחייב לעשות זאת אם הפונקציה פועלת באזור שאינו us-central1
.
כדי להגדיר אזורים בלקוח, מציינים את האזור הרצוי במהלך האתחול:
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 | תמיד us-central1 |
Cloud Storage | האזור הכי קרוב למיקום של קטגוריית Cloud Storage (ראו את הקטע הבא) |
אחרים | אם אתם מבצעים אינטראקציה עם מופע של Realtime Database, מופע של Cloud Firestore או קטגוריה של Cloud Storage בתוך הפונקציה, האזור המומלץ זהה לאזור שהיה מומלץ אם הפונקציה הייתה מופעלת על ידי אחד מהמשאבים האלה. אחרת, משתמשים באזור ברירת המחדל us-central1 .
פונקציות שמקושרות אל Firebase Hosting יכולות להיות בכל אזור, אבל כדאי לעיין בהמלצות שבסקירה הכללית של אירוח ללא שרת. |
בחירת אזורים על סמך מיקומי 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 |