מיקומים של Cloud Functions

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