Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

फ़ंक्शन परिनियोजन और रनटाइम विकल्प प्रबंधित करें

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

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

कार्यों को परिनियोजित करने के लिए, यह फायरबेस सीएलआई कमांड चलाएँ:

$ firebase deploy --only functions

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

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

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

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

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

०२आब७०७४०

कार्यों को हटाएं

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

  • functions:delete साथ फायरबेस सीएलआई में स्पष्ट रूप से functions:delete
  • फ़ायरबेस कंसोल में फ़ंक्शन सूची में संदर्भ मेनू का स्पष्ट रूप से उपयोग करना
  • implictly से समारोह को हटाने के द्वारा 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 firebase deploy करता है और फ़ाइल से निकाले गए किसी भी फ़ंक्शन को उत्पादन से हटा देता है।

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

यदि आप क्षेत्रों का नाम बदल रहे हैं या बदल रहे हैं या ऐसे कार्यों के लिए ट्रिगर कर रहे हैं जो उत्पादन ट्रैफ़िक को संभाल रहे हैं, तो संशोधन के दौरान घटनाओं को खोने से बचने के लिए इस अनुभाग में दिए गए चरणों का पालन करें। इन चरणों का पालन करने से पहले, पहले यह सुनिश्चित कर लें कि आपका फ़ंक्शन 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 के डिफ़ॉल्ट फ़ंक्शन क्षेत्र में us-central1 , और आप इसे asia-northeast1 पर माइग्रेट करना चाहते हैं, तो आपको फ़ंक्शन का नाम बदलने और क्षेत्र को संशोधित करने के लिए पहले अपने स्रोत कोड को संशोधित करना होगा। .

// 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 asia-northeast1 में चल रहा है।

फिर, webhook हटाएं:

$ firebase functions:delete webhook

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

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

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

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

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

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

उदाहरण के लिए, यदि आपके पास कोई फ़ंक्शन 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

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

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

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

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

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

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

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

  "engines": {"node": "14"}

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

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

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

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

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

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

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

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
  • 4GB
  • 8GB

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

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