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

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

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

फ़ंक्शन डिप्लॉय करने के लिए, Firebase CLI का यह निर्देश चलाएं:

firebase deploy --only functions

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

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

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

उपलब्ध सभी निर्देशों की पूरी सूची देखने के लिए, Firebase CLI का रेफ़रंस देखें.

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

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

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

  • साफ़ तौर पर Firebase CLI में functions:delete का इस्तेमाल करके
  • साफ़ तौर पर 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 आपके सोर्स को पार्स करता है और फ़ाइल से हटाए गए सभी फ़ंक्शन को प्रोडक्शन से हटा देता है.

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

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

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

किसी फ़ंक्शन का नाम बदलने के लिए, अपने सोर्स में फ़ंक्शन का नया नाम वाला वर्शन बनाएं. इसके बाद, डिप्लॉयमेंट के दो अलग-अलग निर्देश चलाएं. पहले निर्देश से, नए नाम वाला फ़ंक्शन डिप्लॉय होता है. वहीं, दूसरे निर्देश से, पहले से डिप्लॉय किया गया वर्शन हट जाता है. उदाहरण के लिए, अगर आपके पास Node.js का फ़ंक्शन है जिसे webhook कहा जाता है और आप इसे बदलकर 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 कंसोल या gcloud CLI) का इस्तेमाल करके सेट किए गए विकल्पों को बदल देगा.

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

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

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

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

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

  • Node.js 22
  • Node.js 20
  • Node.js 18 (अब इस्तेमाल नहीं किया जाता)

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

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

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

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

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

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

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

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

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

  1. पक्का करें कि आपका प्रोजेक्ट, Blaze प्लान पर हो.
  2. पक्का करें कि आप Firebase CLI v11.18.0 या उसके बाद का वर्शन इस्तेमाल कर रहे हों.
  3. package.json फ़ाइल में engines की वैल्यू बदलें. यह फ़ाइल, शुरू करने के दौरान आपकी functions/ डायरेक्ट्री में बनाई गई थी. उदाहरण के लिए, अगर आपको वर्शन 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 पैरामीटर का इस्तेमाल करें जो Firebase SDK for Cloud Functions 2.0.0 में शामिल किया गया है. यह रनटाइम विकल्प एक JSON ऑब्जेक्ट स्वीकार करता है जो RuntimeOptions इंटरफ़ेस के मुताबिक है, जो 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 — 200MHz
  • 256MB — 400MHz
  • 512MB — 800MHz
  • 1GB — 1.4 GHz
  • 2GB — 2.4 GHz
  • 4GB — 4.8 GHz
  • 8GB — 4.8 GHz

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

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