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 जोहानेसबर्ग सिर्फ़ 2nd gen
asia-east1 ताइवान पहली पीढ़ी, दूसरी पीढ़ी
asia-east2 हॉन्ग कॉन्ग सिर्फ़ पहली जनरेशन के लिए
asia-northeast1 टोक्यो पहली पीढ़ी, दूसरी पीढ़ी
asia-northeast2 ओसाका पहली पीढ़ी, दूसरी पीढ़ी
europe-north1 फ़िनलैंड सिर्फ़ 2nd gen energy_savings_leaf
europe-southwest1 मैड्रिड सिर्फ़ 2nd gen
europe-west1 बेल्जियम पहली पीढ़ी, दूसरी पीढ़ी energy_savings_leaf
europe-west4 नीदरलैंड्स सिर्फ़ 2nd gen
europe-west8 मिलान सिर्फ़ दूसरी जनरेशन के लिए
europe-west9 पेरिस सिर्फ़ दूसरी जनरेशन के लिए energy_savings_leaf
me-west1 तेल अवीव सिर्फ़ 2nd gen
europe-west2 लंदन सिर्फ़ पहली जनरेशन के लिए
us-central1 आयोवा पहली पीढ़ी, दूसरी पीढ़ी energy_savings_leaf
us-east1 दक्षिण कैरोलाइना 1st gen, 2nd gen
us-east4 उत्तरी वर्जीनिया पहली पीढ़ी, दूसरी पीढ़ी
us-east5 कोलंबस सिर्फ़ दूसरी जनरेशन के लिए
us-south1 डैलस सिर्फ़ 2nd gen
us-west1 ओरेगन पहली पीढ़ी, दूसरी पीढ़ी energy_savings_leaf

टियर 2 की कीमत

Cloud Functions इन देशों/इलाकों में टीयर 2 की कीमत पर उपलब्ध है:

क्षेत्र जगह इस्तेमाल किए जा सकने वाले प्रॉडक्ट वर्शन CO2 उत्सर्जन
asia-east2 हॉन्ग कॉन्ग सिर्फ़ 2nd gen
asia-northeast3 सोल पहली पीढ़ी, दूसरी पीढ़ी
asia-southeast1 सिंगापुर पहली पीढ़ी, दूसरी पीढ़ी
asia-southeast2 जकार्ता पहली पीढ़ी, दूसरी पीढ़ी
asia-south1 मुंबई सिर्फ़ 2nd gen
asia-south2 दिल्ली, भारत सिर्फ़ 2nd gen
australia-southeast1 सिडनी 1st gen, 2nd gen
australia-southeast2 मेलबर्न सिर्फ़ 2nd gen
europe-central2 वॉरसॉ 1st gen, 2nd gen
europe-west2 लंदन सिर्फ़ दूसरी जनरेशन
europe-west3 फ़्रैंकफ़र्ट 1st gen, 2nd gen energy_savings_leaf
europe-west6 ज़्यूरिख़ पहली पीढ़ी, दूसरी पीढ़ी energy_savings_leaf
europe-west10 बर्लिन सिर्फ़ 2nd gen
europe-west12 टूरीन सिर्फ़ दूसरी जनरेशन के लिए
me-central1 दोहा सिर्फ़ 2nd gen
me-central2 दम्माम सिर्फ़ 2nd gen
northamerica-northeast1 मॉन्ट्रियल 1st gen, 2nd gen energy_savings_leaf
northamerica-northeast2 टोरंटो सिर्फ़ 2nd gen energy_savings_leaf
southamerica-east1 साओ पौलो पहली पीढ़ी, दूसरी पीढ़ी energy_savings_leaf
southamerica-west1 सैंटियागो, चिली सिर्फ़ दूसरी जनरेशन
us-west2 लॉस एंजेलिस 1st gen, 2nd gen
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 होगा. इसी तरह, अन्य ट्रिगर के लिए भी इवेंट फ़िल्टर अलग-अलग होंगे.

प्रोडक्शन ट्रैफ़िक को मैनेज करने वाले फ़ंक्शन के लिए क्षेत्र बदलने के बारे में ज़्यादा जानने के लिए, किसी फ़ंक्शन का क्षेत्र बदलना लेख पढ़ें.

एचटीटीपी और क्लाइंट से कॉल किए जा सकने वाले फ़ंक्शन

एचटीटीपी और कॉल किए जा सकने वाले फ़ंक्शन के लिए, हमारा सुझाव है कि आप पहले अपने फ़ंक्शन को डेस्टिनेशन क्षेत्र में सेट करें. इसके अलावा, आप इसे उस जगह के सबसे करीब सेट करें जहां ज़्यादातर संभावित ग्राहक मौजूद हैं. इसके बाद, अपने ओरिजनल फ़ंक्शन में बदलाव करके, उसके एचटीटीपी अनुरोध को नए फ़ंक्शन पर रीडायरेक्ट करें. इन दोनों फ़ंक्शन का नाम एक जैसा हो सकता है. अगर आपके एचटीटीपी फ़ंक्शन के क्लाइंट, रीडायरेक्ट करने की सुविधा के साथ काम करते हैं, तो अपने ओरिजनल फ़ंक्शन को बदलकर, एचटीटीपी रीडायरेक्ट स्टेटस (301) दिखाएं. साथ ही, अपने नए फ़ंक्शन का यूआरएल भी दिखाएं. अगर आपके क्लाइंट, रीडायरेक्ट को सही तरीके से हैंडल नहीं करते हैं, तो ओरिजनल फ़ंक्शन से नए फ़ंक्शन तक अनुरोध को प्रॉक्सी किया जा सकता है. इसके लिए, ओरिजनल फ़ंक्शन से नए फ़ंक्शन तक एक नया अनुरोध शुरू करें. आखिरी चरण में, यह पक्का करना होता है कि सभी क्लाइंट, नए फ़ंक्शन को कॉल कर रहे हों.

कॉल किए जा सकने वाले फ़ंक्शन के लिए, क्लाइंट-साइड पर जगह की जानकारी चुनने की सुविधा

कॉल किए जा सकने वाले फ़ंक्शन के लिए, क्लाइंट के ज़रिए कॉल किए जा सकने वाले सेटअप को एचटीटीपी फ़ंक्शन के लिए बनी गाइडलाइन का पालन करना चाहिए. क्लाइंट, क्षेत्र की जानकारी भी दे सकता है. अगर फ़ंक्शन, प्रोजेक्ट के डिफ़ॉल्ट क्षेत्र के अलावा किसी अन्य क्षेत्र में चलता है, तो उसे ऐसा करना चाहिए.

क्लाइंट पर क्षेत्र सेट करने के लिए, शुरुआत में ही अपनी पसंद का क्षेत्र तय करें:

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 से कनेक्ट किए गए फ़ंक्शन किसी भी इलाके में हो सकते हैं. हालांकि, सुझाव पाने के लिए होस्टिंग सर्वरलेस की खास जानकारी देखें.

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