מיקומים של Cloud Functions

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

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

כברירת מחדל, הפונקציות פועלות באזור us-central1. חשוב לזכור שהאזור הזה עשוי להיות שונה מהאזור של מקור האירוע, כמו קטגוריה Cloud Storage. בהמשך הדף מוסבר איך מציינים את האזור שבו הפונקציה פועלת.

אזורים נתמכים

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

תמחור ברמה 1

Cloud Functions זמין באזורים הבאים עם תמחור ברמה 1:

אזור מיקום גרסאות המוצר הנתמכות פליטות CO2
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");

פונקציות ברקע

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

אם הפונקציה שלכם לא חד-פעמית כרגע, או שהיא לא חד-פעמית מעבר לאזור, מומלץ להטמיע אותה קודם לפני שמעבירים אותה.

ההמלצות לאזורים אופטימליים משתנות בהתאם לסוג הטריגר של האירוע:

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

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