फ़ंक्शन मैनेज करना (पहली जनरेशन)

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

फ़ंक्शन डिप्लॉय करना

फ़ंक्शन डिप्लॉय करने के लिए, यह Firebase सीएलआई कमांड चलाएं:

firebase deploy --only functions

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

firebase deploy --only functions:addMessage,functions:makeUppercase

बहुत ज़्यादा फ़ंक्शन डिप्लॉय करने पर, हो सकता है कि आप स्टैंडर्ड कोटे से ज़्यादा फ़ंक्शन डिप्लॉय कर दें. ऐसे में, आपको एचटीटीपी 429 या 500 गड़बड़ी के मैसेज मिल सकते हैं. इस समस्या को हल करने के लिए, फ़ंक्शन को 10 या उससे कम के ग्रुप में डिप्लॉय करें.

उपलब्ध कमांड की पूरी सूची देखने के लिए, Firebase सीएलआई रेफ़रंस देखें.

डिफ़ॉल्ट रूप से, Firebase सीएलआई, सोर्स कोड के लिए functions/ फ़ोल्डर में देखता है. अगर आपको पसंद है, तो कोडबेस या फ़ाइलों के कई सेट में फ़ंक्शन व्यवस्थित किए जा सकते हैं.

फ़ंक्शन मिटाना

पहले से डिप्लॉय किए गए फ़ंक्शन को इन तरीकों से मिटाया जा सकता है:

  • functions:delete के साथ Firebase सीएलआई में साफ़ तौर पर
  • Google Cloud कंसोल में साफ़ तौर पर बताया गया हो.
  • डिप्लॉयमेंट से पहले, सोर्स से फ़ंक्शन हटाकर सीधे तौर पर.

मिटाने से जुड़ी सभी कार्रवाइयों में, प्रोडक्शन से फ़ंक्शन हटाने से पहले पुष्टि करने के लिए कहा जाता है.

Firebase CLI में फ़ंक्शन को मिटाने की सुविधा में कई तर्क और फ़ंक्शन ग्रुप इस्तेमाल किए जा सकते हैं. साथ ही, इसमें किसी खास इलाके में चल रहे फ़ंक्शन को तय करने की सुविधा भी मिलती है. पुष्टि करने के लिए दिखने वाले प्रॉम्प्ट को भी बदला जा सकता है.

  • यह कमांड, सभी इलाकों में उस नाम से मेल खाने वाले सभी फ़ंक्शन मिटा देती है:

    firebase functions:delete FUNCTION-1_NAME

  • यह फ़ंक्शन, किसी ऐसे फ़ंक्शन को मिटाता है जो डिफ़ॉल्ट क्षेत्र के अलावा किसी अन्य क्षेत्र में चल रहा है:

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • एक से ज़्यादा फ़ंक्शन मिटाता है:

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • यह फ़ंक्शन, फ़ंक्शन के चुने गए ग्रुप को मिटाता है:

    firebase functions:delete GROUP_NAME

  • पुष्टि करने के लिए दिखने वाले प्रॉम्प्ट को बायपास करता है:

    firebase functions:delete FUNCTION-1_NAME --force

फ़ंक्शन को अपने-आप मिटाने की सुविधा की मदद से, firebase deploy आपके सोर्स को पार्स करता है. साथ ही, प्रोडक्शन से उन सभी फ़ंक्शन को हटा देता है जिन्हें फ़ाइल से हटा दिया गया है.

किसी फ़ंक्शन का नाम, क्षेत्र या ट्रिगर बदलना

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

किसी फ़ंक्शन का नाम बदलना

किसी फ़ंक्शन का नाम बदलने के लिए, अपने सोर्स में फ़ंक्शन का नया नाम वाला वर्शन बनाएं. इसके बाद, दो अलग-अलग डिप्लॉयमेंट कमांड चलाएं. पहली कमांड, नए नाम वाले फ़ंक्शन को डिप्लॉय करती है. वहीं, दूसरी कमांड, पहले डिप्लॉय किए गए वर्शन को हटाती है. उदाहरण के लिए, अगर आपके पास webhook नाम का कोई Node.js फ़ंक्शन है और आपको इसे webhookNew में बदलना है, तो कोड में इस तरह बदलाव करें:

// before
const functions = require('firebase-functions/v1');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions/v1');

exports.webhookNew = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

इसके बाद, नए फ़ंक्शन को डिप्लॉय करने के लिए, ये कमांड चलाएं:

# Deploy new function called webhookNew
firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
firebase functions:delete webhook

किसी फ़ंक्शन के लिए, क्षेत्र या क्षेत्र बदलना

अगर आपको प्रोडक्शन ट्रैफ़िक को मैनेज करने वाले फ़ंक्शन के लिए, तय किए गए क्षेत्रों में बदलाव करना है, तो इवेंट के डेटा के नुकसान को रोका जा सकता है. इसके लिए, इन चरणों को क्रम से पूरा करें:

  1. फ़ंक्शन का नाम बदलें और अपनी पसंद के मुताबिक, उसके क्षेत्र या क्षेत्रों में बदलाव करें.
  2. नाम बदले गए फ़ंक्शन को डिप्लॉय करें. इससे, कुछ समय के लिए दोनों सेट के इलाकों में एक ही कोड चलेगा.
  3. पिछले फ़ंक्शन को मिटाओ.

उदाहरण के लिए, अगर आपके पास webhook नाम का कोई फ़ंक्शन है, जो फ़िलहाल us-central1 के डिफ़ॉल्ट फ़ंक्शन वाले क्षेत्र में है और आपको इसे asia-northeast1 पर माइग्रेट करना है, तो आपको पहले अपने सोर्स कोड में बदलाव करना होगा. इसके लिए, फ़ंक्शन का नाम बदलें और क्षेत्र में बदलाव करें.

// before
const functions = require('firebase-functions/v1');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions/v1');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

इसके बाद, यह कमांड चलाकर डिप्लॉय करें:

firebase deploy --only functions:webhookAsia

अब दो एक जैसे फ़ंक्शन चल रहे हैं: webhook, us-central1 में चल रहा है और webhookAsia, asia-northeast1 में चल रहा है.

इसके बाद, webhook मिटाएं:

firebase functions:delete webhook

अब सिर्फ़ एक फ़ंक्शन - webhookAsia है, जो asia-northeast1 में चल रहा है.

फ़ंक्शन के ट्रिगर का टाइप बदलना

समय के साथ Cloud Functions for Firebase को डिप्लॉय करने के दौरान, आपको कई वजहों से किसी फ़ंक्शन के ट्रिगर टाइप में बदलाव करने की ज़रूरत पड़ सकती है. उदाहरण के लिए, हो सकता है कि आपको एक तरह के Firebase Realtime Database या Cloud Firestore इवेंट से दूसरी तरह के इवेंट पर स्विच करना हो.

सिर्फ़ सोर्स कोड बदलकर और firebase deploy को चलाकर, किसी फ़ंक्शन के इवेंट टाइप को नहीं बदला जा सकता. गड़बड़ियों से बचने के लिए, फ़ंक्शन के ट्रिगर टाइप को इस तरीके से बदलें:

  1. सोर्स कोड में बदलाव करके, ट्रिगर के मनमुताबिक टाइप वाला नया फ़ंक्शन शामिल करें.
  2. फ़ंक्शन को डिप्लॉय करें. इससे कुछ समय के लिए, पुराने और नए, दोनों फ़ंक्शन एक साथ काम करते हैं.
  3. Firebase CLI का इस्तेमाल करके, प्रोडक्शन से पुराने फ़ंक्शन को मिटाएं.

उदाहरण के लिए, अगर आपके पास objectChanged नाम का कोई Node.js फ़ंक्शन है, जिसमें लेगसी onChange इवेंट टाइप है और आपको इसे onFinalize में बदलना है, तो पहले फ़ंक्शन का नाम बदलें और उसे onFinalize इवेंट टाइप में बदलें.

// before
const functions = require('firebase-functions/v1');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions/v1');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});

इसके बाद, पुराने फ़ंक्शन को मिटाने से पहले, नया फ़ंक्शन बनाने के लिए यहां दिए गए निर्देश चलाएं:

# Create new function objectFinalized
firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
firebase functions:delete objectChanged

रनटाइम के विकल्प सेट करना

Cloud Functions for Firebase की मदद से, रनटाइम के विकल्प चुने जा सकते हैं. जैसे, Node.js रनटाइम वर्शन और हर फ़ंक्शन के लिए टाइम आउट, मेमोरी का बंटवारा, और कम से कम/ज़्यादा से ज़्यादा फ़ंक्शन इंस्टेंस.

सबसे सही तरीके के तौर पर, इन विकल्पों (Node.js वर्शन को छोड़कर) को फ़ंक्शन कोड में कॉन्फ़िगरेशन ऑब्जेक्ट पर सेट किया जाना चाहिए. यह RuntimeOptions ऑब्जेक्ट, आपके फ़ंक्शन के रनटाइम विकल्पों के लिए भरोसेमंद सोर्स है. साथ ही, यह किसी अन्य तरीके से सेट किए गए विकल्पों को बदल देगा. जैसे, Google Cloud Console या gcloud CLI के ज़रिए सेट किए गए विकल्प.

अगर डेवलपमेंट के वर्कफ़्लो में, Google Cloud Console या gcloud CLI के ज़रिए मैन्युअल तरीके से रनटाइम के विकल्प सेट किए जाते हैं और आपको हर डिप्लॉयमेंट पर इन वैल्यू को बदलने की ज़रूरत नहीं है, तो preserveExternalChanges विकल्प को true पर सेट करें. इस विकल्प को true पर सेट करने पर, Firebase आपके कोड में सेट किए गए रनटाइम विकल्पों को, फ़ंक्शन के मौजूदा समय में डिप्लॉय किए गए वर्शन की सेटिंग के साथ मर्ज कर देता है. ऐसा इस क्रम में किया जाता है:

  1. यह विकल्प, फ़ंक्शन के कोड में सेट किया जाता है: बाहरी बदलावों को खारिज करें.
  2. फ़ंक्शन कोड में विकल्प को RESET_VALUE पर सेट किया गया है: डिफ़ॉल्ट वैल्यू के साथ बाहरी बदलावों को बदलें.
  3. फ़ंक्शन के कोड में विकल्प सेट नहीं किया गया है, लेकिन फ़िलहाल डिप्लॉय किए गए फ़ंक्शन में सेट किया गया है: डिप्लॉय किए गए फ़ंक्शन में बताए गए विकल्प का इस्तेमाल करें.

ज़्यादातर स्थितियों में, preserveExternalChanges: true विकल्प का इस्तेमाल करने का सुझाव नहीं दिया जाता. ऐसा इसलिए, क्योंकि अब आपका कोड, फ़ंक्शन के रनटाइम विकल्पों के लिए पूरी तरह से भरोसेमंद सोर्स नहीं रहेगा. अगर आपने इसका इस्तेमाल किया है, तो Google Cloud Console देखें या किसी फ़ंक्शन का पूरा कॉन्फ़िगरेशन देखने के लिए, gcloud CLI का इस्तेमाल करें.

Node.js का वर्शन सेट करना

Cloud Functions के लिए Firebase SDK टूल की मदद से, Node.js रनटाइम को चुना जा सकता है. आपके पास किसी प्रोजेक्ट में सभी फ़ंक्शन को सिर्फ़ ऐसे रनटाइम एनवायरमेंट पर चलाने का विकल्प होता है जो Node.js के इन वर्शन के साथ काम करता हो:

  • Node.js 22
  • Node.js 20
  • Node.js 18 (अब सेवा में नहीं है)

Node.js के इन वर्शन के लिए, सहायता जारी रखने से जुड़ी अहम जानकारी के लिए, सहायता शेड्यूल देखें.

Node.js का वर्शन सेट करने के लिए:

शुरुआत के दौरान, functions/ डायरेक्ट्री में बनाई गई package.json फ़ाइल के engines फ़ील्ड में वर्शन सेट किया जा सकता है. उदाहरण के लिए, सिर्फ़ 20वें वर्शन का इस्तेमाल करने के लिए, package.json में इस लाइन में बदलाव करें:

  "engines": {"node": "22"}

अगर Yarn पैकेज मैनेजर का इस्तेमाल किया जा रहा है या engines फ़ील्ड के लिए आपकी कुछ खास ज़रूरतें हैं, तो firebase.json में Cloud Functions के लिए Firebase SDK टूल का रनटाइम सेट किया जा सकता है. इसके लिए, यह तरीका अपनाएं:

  {
    "functions": {
      "runtime": "nodejs22"
    }
  }

सीएलआई, package.json में अलग से सेट की गई किसी भी वैल्यू या रेंज के बजाय, firebase.json में सेट की गई वैल्यू का इस्तेमाल करता है.

Node.js रनटाइम को अपग्रेड करना

Node.js रनटाइम को अपग्रेड करने के लिए:

  1. पक्का करें कि आपका प्रोजेक्ट ब्लेज़ प्राइसिंग प्लान पर हो.
  2. पक्का करें कि Firebase सीएलआई v11.18.0 या उसके बाद का वर्शन इस्तेमाल किया जा रहा हो.
  3. शुरू करने के दौरान, अपनी functions/ डायरेक्ट्री में बनाई गई package.json फ़ाइल में engines वैल्यू बदलें. उदाहरण के लिए, अगर आपको वर्शन 16 से वर्शन 18 पर अपग्रेड करना है, तो एंट्री ऐसी दिखनी चाहिए: "engines": {"node": "18"}
  4. अगर चाहें, तो Firebase Local Emulator Suite का इस्तेमाल करके, अपने बदलावों की जांच करें.
  5. सभी फ़ंक्शन फिर से डिप्लॉय करें.

Node.js मॉड्यूल सिस्टम चुनना

Node.js में डिफ़ॉल्ट मॉड्यूल सिस्टम CommonJS (CJS) है. हालांकि, Node.js के मौजूदा वर्शन में ECMAScript Modules (ESM) भी काम करते हैं. Cloud Functions दोनों के साथ काम करता है.

डिफ़ॉल्ट रूप से, आपके फ़ंक्शन CommonJS का इस्तेमाल करते हैं. इसका मतलब है कि इंपोर्ट और एक्सपोर्ट इस तरह दिखते हैं:

const functions = require("firebase-functions/v1");

exports.helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));

इसके बजाय, ESM का इस्तेमाल करने के लिए, अपनी package.json फ़ाइल में "type": "module" फ़ील्ड को सेट करें :

  {
   ...
   "type": "module",
   ...
  }

इसे सेट करने के बाद, ESM import और export सिंटैक्स का इस्तेमाल करें:

import functions from "firebase-functions/v1";

export const helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));

दोनों मॉड्यूल सिस्टम पूरी तरह से काम करते हैं. अपने प्रोजेक्ट के हिसाब से सबसे सही विकल्प चुनें. ज़्यादा जानने के लिए, मॉड्यूल के बारे में Node.js का दस्तावेज़ पढ़ें.

स्केलिंग के तरीके को कंट्रोल करना

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

इसी तरह, आने वाले अनुरोधों के जवाब में इंस्टेंस की संख्या को बढ़ाने की सीमा तय की जा सकती है. इस सेटिंग का इस्तेमाल, अपने खर्च को कंट्रोल करने के लिए करें. इसके अलावा, इसका इस्तेमाल डेटाबेस जैसी बैकिंग सेवा से कनेक्शन की संख्या को सीमित करने के लिए भी किया जा सकता है.

कोल्ड स्टार्ट की संख्या कम करना

सोर्स कोड में किसी फ़ंक्शन के लिए कम से कम इंस्टेंस सेट करने के लिए, runWith तरीके का इस्तेमाल करें. यह तरीका, RuntimeOptions इंटरफ़ेस के मुताबिक JSON ऑब्जेक्ट स्वीकार करता है. यह इंटरफ़ेस, minInstances के लिए वैल्यू तय करता है. उदाहरण के लिए, यह फ़ंक्शन, कम से कम पांच इंस्टेंस को चालू रखता है:

exports.getAutocompleteResponse = functions
    .runWith({
      // Keep 5 instances warm for this latency-critical function
      minInstances: 5,
    })
    .https.onCall((data, context) => {
      // Autocomplete a user's search term
    });

minInstances एट्रिब्यूट की वैल्यू सेट करते समय, इन बातों का ध्यान रखें:

  • अगर Cloud Functions for Firebase, आपके ऐप्लिकेशन को minInstances सेटिंग से ज़्यादा स्केल करता है, तो आपको उस थ्रेशोल्ड से ऊपर के हर इंस्टेंस के लिए कोल्ड स्टार्ट का सामना करना पड़ेगा.
  • कोल्ड स्टार्ट का सबसे ज़्यादा असर, ट्रैफ़िक में अचानक बढ़ोतरी वाले ऐप्लिकेशन पर पड़ता है. अगर आपके ऐप्लिकेशन में ट्रैफ़िक में अचानक बढ़ोतरी होती है और आपने minInstances की वैल्यू इतनी ज़्यादा सेट की है कि ट्रैफ़िक में हर बार बढ़ोतरी होने पर कोल्ड स्टार्ट कम हो जाते हैं, तो आपको लेटेन्सी में काफ़ी कमी दिखेगी. जिन ऐप्लिकेशन पर लगातार ट्रैफ़िक आता रहता है उनकी परफ़ॉर्मेंस पर कोल्ड स्टार्ट का ज़्यादा असर नहीं पड़ता.
  • कम से कम इंस्टेंस सेट करना, प्रोडक्शन एनवायरमेंट के लिए सही हो सकता है. हालांकि, टेस्टिंग एनवायरमेंट में ऐसा करने से बचना चाहिए. अपने टेस्ट प्रोजेक्ट में स्केल-टू-ज़ीरो की सुविधा चालू करने के लिए, लेकिन प्रोडक्शन प्रोजेक्ट में कोल्ड स्टार्ट को कम करने के लिए, FIREBASE_CONFIG एनवायरमेंट वैरिएबल के आधार पर minInstances सेट किया जा सकता है:

    // Get Firebase project id from `FIREBASE_CONFIG` environment variable
    const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId;
    
    exports.renderProfilePage = functions
        .runWith({
          // Keep 5 instances warm for this latency-critical function
          // in production only. Default to 0 for test projects.
          minInstances: envProjectId === "my-production-project" ? 5 : 0,
        })
        .https.onRequest((req, res) => {
          // render some html
        });
    

किसी फ़ंक्शन के लिए, इंस्टेंस की ज़्यादा से ज़्यादा संख्या को सीमित करना

फ़ंक्शन के सोर्स कोड में ज़्यादा से ज़्यादा इंस्टेंस सेट करने के लिए, runWith तरीके का इस्तेमाल करें. यह तरीका, RuntimeOptions इंटरफ़ेस के मुताबिक JSON ऑब्जेक्ट स्वीकार करता है. यह इंटरफ़ेस, maxInstances के लिए वैल्यू तय करता है. उदाहरण के लिए, यह फ़ंक्शन 100 इंस्टेंस की सीमा तय करता है, ताकि काल्पनिक लेगसी डेटाबेस पर ज़्यादा असर न पड़े:

exports.mirrorOrdersToLegacyDatabase = functions
    .runWith({
      // Legacy database only supports 100 simultaneous connections
      maxInstances: 100,
    })
    .firestore.document("orders/{orderId}")
    .onWrite((change, context) => {
      // Connect to legacy database
    });

अगर किसी एचटीटीपी फ़ंक्शन को maxInstances सीमा तक बढ़ाया जाता है, तो नए अनुरोधों को 30 सेकंड के लिए लाइन में लगा दिया जाता है. इसके बाद, अगर कोई इंस्टेंस उपलब्ध नहीं होता है, तो उन्हें 429 Too Many Requests रिस्पॉन्स कोड के साथ अस्वीकार कर दिया जाता है.

ज़्यादा से ज़्यादा इंस्टेंस इस्तेमाल करने की सेटिंग के सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, maxInstances इस्तेमाल करने के सबसे सही तरीके देखें.

सेवा खाता सेट करना

पहली जनरेशन के फ़ंक्शन के लिए डिफ़ॉल्ट सेवा खाते, PROJECT_ID@appspot.gserviceaccount.com (जिसे App Engine का डिफ़ॉल्ट सेवा खाता कहा जाता है) के पास कई तरह की अनुमतियां होती हैं. इनकी मदद से, Firebase और Google Cloud की अन्य सेवाओं के साथ इंटरैक्ट किया जा सकता है.

डिफ़ॉल्ट सेवा खाते को बदला जा सकता है. साथ ही, किसी फ़ंक्शन को सिर्फ़ ज़रूरी संसाधनों तक सीमित किया जा सकता है. इसके लिए, कस्टम सेवा खाता बनाएं और .runWith() तरीके का इस्तेमाल करके, उसे सही फ़ंक्शन असाइन करें. यह तरीका, कॉन्फ़िगरेशन के विकल्पों वाला एक ऑब्जेक्ट लेता है. इसमें serviceAccount प्रॉपर्टी भी शामिल है.

const functions = require("firebase-functions/v1");

exports.helloWorld = functions
    .runWith({
        // This function doesn't access other Firebase project resources, so it uses a limited service account.
        serviceAccount:
            "my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
    })
    .https.onRequest((request, response) => {
        response.send("Hello from Firebase!");
    });

टाइम आउट और मेमोरी का बंटवारा सेट करना

कुछ मामलों में, आपके फ़ंक्शन के लिए टाइम आउट की लंबी अवधि या ज़्यादा मेमोरी की ज़रूरत हो सकती है. इन वैल्यू को Google Cloud Console या फ़ंक्शन के सोर्स कोड (सिर्फ़ Firebase) में सेट किया जा सकता है.

फ़ंक्शन के सोर्स कोड में मेमोरी का बंटवारा और टाइम आउट सेट करने के लिए, runWith पैरामीटर का इस्तेमाल करें. यह पैरामीटर, Cloud Functions 2.0.0 के लिए Firebase SDK में पेश किया गया था. यह रनटाइम विकल्प, RuntimeOptions इंटरफ़ेस के मुताबिक JSON ऑब्जेक्ट स्वीकार करता है. यह timeoutSeconds और memory के लिए वैल्यू तय करता है. उदाहरण के लिए, यह स्टोरेज फ़ंक्शन 1 जीबी मेमोरी का इस्तेमाल करता है और 300 सेकंड के बाद टाइम आउट हो जाता है:

exports.convertLargeFile = functions
    .runWith({
      // Ensure the function has enough memory and time
      // to process large files
      timeoutSeconds: 300,
      memory: "1GB",
    })
    .storage.object()
    .onFinalize((object) => {
      // Do some complicated things that take a lot of memory and time
    });

timeoutSeconds की ज़्यादा से ज़्यादा वैल्यू 540 या नौ मिनट हो सकती है. किसी फ़ंक्शन को दी गई मेमोरी की मात्रा, उस फ़ंक्शन के लिए सीपीयू (CPU) के हिसाब से तय होती है. इसके बारे में ज़्यादा जानकारी के लिए, memory के लिए मान्य वैल्यू की यह सूची देखें:

  • 128MB — 200 मेगाहर्ट्ज़
  • 256MB — 400 मेगाहर्ट्ज़
  • 512MB — 800 मेगाहर्ट्ज़
  • 1GB — 1.4 गीगाहर्ट्ज़
  • 2GB — 2.4 गीगाहर्ट्ज़
  • 4GB — 4.8 गीगाहर्ट्ज़
  • 8GB — 4.8 गीगाहर्ट्ज़

Google Cloud कंसोल में मेमोरी का बंटवारा और टाइम आउट सेट करने के लिए:

  1. Google Google Cloud console में, बाईं ओर मौजूद मेन्यू से Cloud Functions चुनें.
  2. फ़ंक्शन की सूची में, उसके नाम पर क्लिक करके कोई फ़ंक्शन चुनें.
  3. सबसे ऊपर मौजूद मेन्यू में, बदलाव करें आइकॉन पर क्लिक करें.
  4. मेमोरी असाइन की गई लेबल वाले ड्रॉप-डाउन मेन्यू से, मेमोरी असाइन करने का कोई विकल्प चुनें.
  5. ऐडवांस विकल्प दिखाने के लिए, ज़्यादा पर क्लिक करें. इसके बाद, टाइमआउट टेक्स्ट बॉक्स में सेकंड की संख्या डालें.
  6. फ़ंक्शन को अपडेट करने के लिए, सेव करें पर क्लिक करें.