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

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

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

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

  • सभी क्षेत्रों में, दिए गए नाम से मैच होने वाले सभी फ़ंक्शन मिटाता है:

    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 सीएलआई का इस्तेमाल करके, प्रोडक्शन से पुराने फ़ंक्शन को साफ़ तौर पर मिटाएं.

उदाहरण के लिए, अगर आपके पास 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 कंसोल देखें या किसी फ़ंक्शन का पूरा कॉन्फ़िगरेशन देखने के लिए, 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"
    }
  }

सीएलआई, firebase.json में सेट की गई वैल्यू का इस्तेमाल करता है. यह वैल्यू, package.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 मॉड्यूल (ईएसएम) के साथ भी काम करते हैं. Cloud Functions, दोनों तरह के ऐप्लिकेशन के लिए काम करता है.

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

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

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

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

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

इसे सेट करने के बाद, ईएसएम 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) में सेट किया जा सकता है.

फ़ंक्शन के सोर्स कोड में मेमोरी के बंटवारे और टाइम आउट को सेट करने के लिए, Cloud Functions 2.0.0 के लिए Firebase SDK में पेश किए गए runWith पैरामीटर का इस्तेमाल करें. यह रनटाइम विकल्प, 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 या नौ मिनट है. किसी फ़ंक्शन को दी गई मेमोरी, उस फ़ंक्शन के लिए तय किए गए सीपीयू के हिसाब से होती है. इसके बारे में, memory के लिए मान्य वैल्यू की इस सूची में बताया गया है:

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

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

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