Cloud Functions की जगहें

Cloud Functionsक्षेत्र के हिसाब से काम करता है. इसका मतलब है कि आपका फ़ंक्शन जिस इन्फ़्रास्ट्रक्चर पर चलता है वह कुछ खास क्षेत्रों में मौजूद होता है. साथ ही, Google इसे मैनेज करता है, ताकि इन क्षेत्रों के सभी ज़ोन में यह सुविधा उपलब्ध रहे.

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

डिफ़ॉल्ट रूप से, Firebase CLI, आपके प्रोजेक्ट के कॉन्फ़िगरेशन के आधार पर, फ़ंक्शन को किसी क्षेत्र में डिप्लॉय करता है. इवेंट-ड्रिवन फ़ंक्शन के लिए, यह आम तौर पर ट्रिगर करने वाले डेटा सोर्स के क्षेत्र में a क्षेत्र में डिप्लॉय होता है. जैसे, a 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, आपके प्रोजेक्ट के कॉन्फ़िगरेशन के आधार पर, फ़ंक्शन को किसी क्षेत्र में डिप्लॉय करता है. इवेंट-ड्रिवन फ़ंक्शन के लिए, यह आम तौर पर ट्रिगर करने वाले डेटा सोर्स के क्षेत्र में a क्षेत्र में डिप्लॉय होता है. जैसे, a Cloud Firestore डेटाबेस या Cloud Storage बकेट. इसके अलावा, फ़ॉल बैक के तौर पर, यह us-central1 में डिप्लॉय होता है.

हमारा सुझाव है कि Firebase की डिफ़ॉल्ट सेटिंग पर निर्भर रहने के बजाय, खास क्षेत्र सेट करें. ऐसा इसलिए, क्योंकि समय के साथ-साथ 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