Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

फ़ंक्शंस की तैनाती और रनटाइम विकल्प प्रबंधित करें

आप फायरबेस सीएलआई कमांड्स का उपयोग करके या अपने फंक्शंस सोर्स कोड में रनटाइम विकल्प सेट करके फंक्शन्स को तैनात, डिलीट और संशोधित कर सकते हैं।

कार्यों को तैनात करें

कार्यों को तैनात करने के लिए, इस Firebase CLI कमांड को चलाएं:

$ firebase deploy --only functions

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

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

बड़ी संख्या में फ़ंक्शंस की तैनाती करते समय, आप मानक कोटा से अधिक हो सकते हैं और HTTP 429 या 500 त्रुटि संदेश प्राप्त कर सकते हैं। इसे हल करने के लिए, 10 या उससे कम के समूहों में कार्यों को तैनात करें।

उपलब्ध कमांड की पूरी सूची के लिए फायरबेस सीएलआई संदर्भ देखें।

डिफ़ॉल्ट रूप से, फायरबेस सीएलआई स्रोत कोड के लिए functions/ फ़ोल्डर में दिखता है। आप firebase.json में निम्नलिखित पंक्तियों को जोड़कर एक और फ़ोल्डर निर्दिष्ट कर सकते हैं:

"functions": {
  "source": "another-folder"
}

कार्यों को हटा दें

आप इन तरीकों से पहले से तैनात कार्यों को हटा सकते हैं:

  • स्पष्ट रूप से functions:delete साथ फायरबेस सीएलआई में functions:delete
  • फायरबेस कंसोल में फ़ंक्शन सूची में संदर्भ मेनू का स्पष्ट रूप से उपयोग करना
  • निष्कासन से पहले index.js से फ़ंक्शन को हटाकर।

सभी विलोपन कार्य आपको उत्पादन से फ़ंक्शन को हटाने से पहले पुष्टि करने के लिए संकेत देते हैं।

फायरबेस सीएलआई में स्पष्ट फ़ंक्शन विलोपन कई तर्कों के साथ-साथ फ़ंक्शंस समूहों का समर्थन करता है, और आपको किसी विशेष क्षेत्र में चल रहे फ़ंक्शन को निर्दिष्ट करने की अनुमति देता है। इसके अलावा, आप पुष्टिकरण संकेत को ओवरराइड कर सकते हैं।

# Delete all functions that match the specified name in all regions.
$ firebase functions:delete myFunction

# Delete a specified function running in a specific region.
$ firebase functions:delete myFunction --region us-east-1

# Delete more than one function
$ firebase functions:delete myFunction myOtherFunction

# Delete a specified functions group.
$ firebase functions:delete groupA

# Bypass the confirmation prompt.
$ firebase functions:delete myFunction --force

निहित कार्य विलोपन के साथ, firebase deploy पर्स index.js और उत्पादन से किसी भी फ़ंक्शन को हटा देता है जो फ़ाइल से हटा दिया गया है।

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

यदि आप क्षेत्रों का नाम बदल रहे हैं या बदल रहे हैं या उन कार्यों के लिए ट्रिगर कर रहे हैं जो उत्पादन ट्रैफ़िक को संभाल रहे हैं, तो संशोधन के दौरान होने वाली घटनाओं से बचने के लिए इस अनुभाग में दिए चरणों का पालन करें। इससे पहले कि आप इन चरणों का पालन, पहले सुनिश्चित करें अपने समारोह है कि idempotent , क्योंकि दोनों नए संस्करण और अपने समारोह के पुराने संस्करण परिवर्तन के दौरान एक ही समय में चल रहे हो जाएगा।

एक फ़ंक्शन का नाम बदलें

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

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

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

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

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 webhook के डिफ़ॉल्ट फ़ंक्शन क्षेत्र में us-central1 , और आप इसे asia-northeast1 webhook पर माइग्रेट करना चाहते हैं, तो आपको फ़ंक्शन का नाम बदलने और क्षेत्र को संशोधित करने के लिए पहले अपने स्रोत कोड को संशोधित करना होगा ।

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

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

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

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

फिर चलाकर तैनात करें:

$ firebase deploy --only functions:webhookAsia

अब दो समान कार्य चल रहे हैं: webhook us-central1 webhookAsia में चल रहा है, और webhookAsia asia-northeast1 webhookAsia में चल रहा है।

फिर, webhook हटाएं:

$ firebase functions:delete webhook

अब केवल एक ही कार्य है - webhookAsia , जो asia-northeast1 webhookAsia में चल रहा है।

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

जैसे ही आप समय के साथ फायरबेस तैनाती के लिए अपने क्लाउड फ़ंक्शंस विकसित करते हैं, आपको विभिन्न कारणों से फ़ंक्शन के ट्रिगर प्रकार को बदलने की आवश्यकता हो सकती है। उदाहरण के लिए, आप चाहते हो सकता है:

  • विरासत भंडारण से बदलें onChange को घटना onFinalize , onDelete , onArchive , और onMetadataUpdate । (इस बारे में अधिक जानें बीटा में v1 या v2 अपग्रेड गाइड के लिए )।
  • इस तरह के सामान्य रूप में एक दूसरे से, करने के लिए Firebase रीयलटाइम डाटाबेस या बादल Firestore घटना का एक प्रकार से बदलें onWrite बारीक करने के लिए घटना onCreate घटना।

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

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

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

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

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

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

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

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

फायरबेस के लिए क्लाउड फ़ंक्शंस आपको Node.js रनटाइम संस्करण और प्रति-फ़ंक्शन टाइमआउट और मेमोरी आवंटन जैसे रनटाइम विकल्प का चयन करने देता है।

Node.js संस्करण सेट करें

क्लाउड फ़ंक्शंस 2.0.0 और उच्चतर के लिए फायरबेस एसडीके Node.js रनटाइम के चयन की अनुमति देता है। आप इन समर्थित Node.js संस्करणों में से एक के लिए रनटाइम वातावरण पर विशेष रूप से किसी प्रोजेक्ट में सभी फ़ंक्शन चलाने के लिए चुन सकते हैं:

  • Node.js 12 (बीटा)
  • Node.js 10

  • Node.js 8 (8 जून, 2020 के रूप में पदावनत) Node.js 8 कार्यों की तैनाती अब 15 फरवरी, 2020 के बाद की अनुमति नहीं दी जाएगी। फिर, पहले से तैनात Node.js 8 कार्यों के निष्पादन 15 मार्च, 2021 के बाद बंद हो जाएंगे। । यदि आपने Node.js 8 रनटाइम में फ़ंक्शंस की तैनाती की है, तो आपको Node.js 10 रनटाइम में अपग्रेड करने की अनुशंसा की जाती है

Node.js संस्करण सेट करने के लिए:

package.json में engines क्षेत्र में संस्करण को सेट करें। प्रारंभ करने के दौरान अपने functions/ निर्देशिका में बनाई गई फ़ाइल को package.json । उदाहरण के लिए, केवल संस्करण 10 का उपयोग करने के लिए, इस लाइन को package.json में संपादित करें:

  "engines": {"node": "10"}

engines क्षेत्र की आवश्यकता है; फ़ंक्शंस को परिनियोजित करने और चलाने के लिए आपको समर्थित Node.js संस्करणों में से एक को निर्दिष्ट करना होगा। वर्तमान में firebase init functions इस फ़ील्ड को 10 सेट करता है।

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

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

  1. सुनिश्चित करें कि आप ब्लेज़ पे-एज़-यू-गो बिलिंग प्लान पर हैं
  2. सुनिश्चित करें कि आप Firebase CLI संस्करण 8.1.0 या बाद का उपयोग कर रहे हैं।
  3. package.json वैल्यू में engines वैल्यू को बदलें। प्रारंभ के दौरान आपके functions/ निर्देशिका में बनाई गई फ़ाइल। उदाहरण के लिए, यदि आप संस्करण 8 से संस्करण 10 में अपग्रेड कर रहे हैं, तो प्रविष्टि इस तरह दिखनी चाहिए: "engines": {"node": "10"}
  4. वैकल्पिक रूप से, फायरबेस एमुलेटर का उपयोग करके अपने परिवर्तनों का परीक्षण करें।
  5. फायरबेस सीएलआई v8.1.0 या बाद के उपयोग से रीडेप्लॉय फ़ंक्शन।

टाइमआउट और मेमोरी आवंटन निर्धारित करें

कुछ मामलों में, आपके कार्यों में लंबे समय तक मान या स्मृति के एक बड़े आवंटन के लिए विशेष आवश्यकताएं हो सकती हैं। आप इन मूल्यों को या तो Google क्लाउड कंसोल में या फ़ंक्शन स्रोत कोड (केवल Firebase) में सेट कर सकते हैं।

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

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

timeoutSeconds लिए अधिकतम मूल्य 540 , या 9 मिनट है। memory लिए मान्य मूल्य हैं:

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB

Google क्लाउड प्लेटफ़ॉर्म कंसोल में मेमोरी आवंटन और टाइमआउट सेट करने के लिए:

  1. Google क्लाउड प्लेटफ़ॉर्म कंसोल में, बाएं मेनू से क्लाउड फ़ंक्शंस चुनें।
  2. फ़ंक्शन सूची में इसके नाम पर क्लिक करके एक फ़ंक्शन का चयन करें।
  3. शीर्ष मेनू में संपादन आइकन पर क्लिक करें
  4. ड्रॉप-डाउन मेनू लेबल मेमोरी आवंटित से एक स्मृति आवंटन का चयन करें।
  5. उन्नत विकल्प प्रदर्शित करने के लिए अधिक पर क्लिक करें, और टाइमआउट पाठ बॉक्स में कई सेकंड दर्ज करें।
  6. फ़ंक्शन को अपडेट करने के लिए सहेजें पर क्लिक करें