Firebase सीएलआई निर्देशों का इस्तेमाल करके, फ़ंक्शन डिप्लॉय किए जा सकते हैं, मिटाए जा सकते हैं, और उनमें बदलाव किया जा सकता है इसके लिए, अपने फ़ंक्शन के सोर्स कोड में रनटाइम के विकल्प सेट करें.
फ़ंक्शन डिप्लॉय करें
फ़ंक्शन डिप्लॉय करने के लिए, इस Firebase सीएलआई कमांड को चलाएं:
firebase deploy --only functions
डिफ़ॉल्ट रूप से, Firebase सीएलआई, इसके अंदर के सभी फ़ंक्शन को डिप्लॉय करता है
उसी समय. अगर आपके प्रोजेक्ट में पांच से ज़्यादा फ़ंक्शन हैं, तो
हमारा सुझाव है कि आप खास फ़ंक्शन नामों के साथ --only
फ़्लैग का इस्तेमाल करें
ताकि सिर्फ़ वे फ़ंक्शन डिप्लॉय किए जा सकें
जिसे आपने संपादित किया है. खास फ़ंक्शन को डिप्लॉय करना
इस तरह से डिप्लॉयमेंट की प्रोसेस तेज़ हो जाती है और आपको
डिप्लॉयमेंट कोटा. उदाहरण के लिए:
firebase deploy --only functions:addMessage,functions:makeUppercase
बड़ी संख्या में फ़ंक्शन डिप्लॉय करते समय, स्टैंडर्ड कोटा और एचटीटीपी 429 या 500 गड़बड़ी के मैसेज मिलते हैं. हल करने के लिए इसका इस्तेमाल करके, फ़ंक्शन को 10 या उससे कम के ग्रुप में डिप्लॉय किया जा सकता है.
यहां उपलब्ध पूरी सूची देखने के लिए, Firebase सीएलआई का रेफ़रंस देखें निर्देश देखें.
डिफ़ॉल्ट रूप से, Firebase सीएलआई, फ़ाइल के लिए functions/
फ़ोल्डर में दिखता है
सोर्स कोड. आपके पास फ़ंक्शन व्यवस्थित करने का विकल्प भी है
को कोड बेस या फ़ाइलों के कई सेट में एक्सपोर्ट किया जा सकता है.
फ़ंक्शन मिटाएं
डिप्लॉय किए गए पुराने फ़ंक्शन को इस तरह मिटाया जा सकता है:
- Firebase सीएलआई में
functions:delete
के साथ साफ़ तौर पर - साफ़ तौर पर, Google Cloud कंसोल में सबमिट करें.
- इंप्लिसिट रूप से, डिप्लॉयमेंट से पहले सोर्स से फ़ंक्शन को हटाकर.
डेटा मिटाने की सभी कार्रवाइयां इस प्रॉम्प्ट की मदद से, फ़ंक्शन को प्रोडक्शन से हटाने से पहले पुष्टि करने के लिए कहा जाएगा.
Firebase सीएलआई में एक्सप्लिसिट फ़ंक्शन मिटाने की प्रोसेस के दौरान, कई आर्ग्युमेंट इस्तेमाल किए जा सकते हैं साथ ही, फ़ंक्शन ग्रुप बनाया जा सकता है. इसकी मदद से किसी खास क्षेत्र में चलने वाले फ़ंक्शन के बारे में बताया जा सकता है. इसके अलावा, पुष्टि करने वाले प्रॉम्प्ट को भी बदला जा सकता है.
# 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
आपके सोर्स को पार्स करता है और
फ़ाइल से हटाए गए किसी भी फ़ंक्शन को प्रोडक्शन से हटा देता है.
फ़ंक्शन के नाम, क्षेत्र या ट्रिगर में बदलाव करें
अगर क्षेत्रों का नाम बदला जा रहा है या उन्हें बदला जा रहा है या फिर ऐसे फ़ंक्शन के लिए ट्रिगर किया जा रहा है जो प्रोडक्शन ट्रैफ़िक को मैनेज करें. इसके लिए, इस सेक्शन में दिया गया तरीका अपनाएं इवेंट में बदलाव कर रहे हैं. यह तरीका अपनाने से पहले, पक्का करें कि फ़ंक्शन idempoent है, क्योंकि आपके फ़ंक्शन का नया वर्शन और पुराना वर्शन, दोनों एक ही समय पर चालू करें.
फ़ंक्शन का नाम बदलना
किसी फ़ंक्शन का नाम बदलने के लिए, अपने सोर्स में फ़ंक्शन का नाम बदला गया नया वर्शन बनाएं
और फिर दो अलग-अलग डिप्लॉयमेंट कमांड चलाएं. पहला निर्देश,
नया नाम वाला फ़ंक्शन है और दूसरा निर्देश पहले डिप्लॉय किए गए फ़ंक्शन को हटा देता है
वर्शन है. उदाहरण के लिए, अगर आपके पास 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
फ़ंक्शन का इलाका या इलाका बदलना
अगर आप दिए गए क्षेत्र को के काम करने का तरीका बताया है, तो आप इन चरणों को क्रम से लागू करें:
- फ़ंक्शन का नाम बदलें और ज़रूरत के हिसाब से इसके क्षेत्र या इलाके बदलें.
- बदले गए नाम वाला फ़ंक्शन डिप्लॉय करें. इससे, क्षेत्र के दोनों सेट में कुछ समय के लिए एक ही कोड चलेगा.
- पिछले फ़ंक्शन को मिटाएं.
उदाहरण के लिए, अगर आपके पास
जिसे 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
अब एक जैसे दो फ़ंक्शन चल रहे हैं: us-central1
में webhook
चल रहा है,
और asia-northeast1
में webhookAsia
चल रहा है.
इसके बाद, webhook
मिटाएं:
firebase functions:delete webhook
अब सिर्फ़ एक फ़ंक्शन है - webhookAsia
, जो asia-northeast1
में चल रहा है.
फ़ंक्शन का ट्रिगर टाइप बदलना
समय के साथ, जैसे-जैसे Cloud Functions for Firebase का डिप्लॉयमेंट किया जाएगा, कई वजहों से फ़ंक्शन का ट्रिगर टाइप बदलने की ज़रूरत है. उदाहरण के लिए, आप शायद एक तरह के Firebase Realtime Database से बदलना चाहें या किसी अन्य टाइप के लिए Cloud Firestore इवेंट.
किसी फ़ंक्शन का इवेंट टाइप बदलने के लिए, सिर्फ़
सोर्स कोड मौजूद है और firebase deploy
चल रहा है. गड़बड़ियों से बचने के लिए,
इस प्रोसेस से फ़ंक्शन के ट्रिगर टाइप को बदलें:
- अपने हिसाब से ट्रिगर करने के तरीके के साथ नया फ़ंक्शन शामिल करने के लिए, सोर्स कोड में बदलाव करें.
- ऐसा फ़ंक्शन डिप्लॉय करें जिससे पुराने और नए, दोनों फ़ंक्शन कुछ समय के लिए काम करें.
- 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 Console या gcloud सीएलआई और आपको ये वैल्यू नहीं चाहिए
हर डिप्लॉयमेंट पर ओवरराइड होने के बाद, preserveExternalChanges
विकल्प को true
पर सेट करें.
इस विकल्प को true
पर सेट करने पर, Firebase आपके ऐप्लिकेशन में सेट किए गए रनटाइम के विकल्पों को मर्ज कर देता है
कोड के साथ आपके फ़ंक्शन के वर्तमान में डिप्लॉय किए गए वर्शन की सेटिंग
निम्न प्राथमिकता:
- फ़ंक्शन कोड में विकल्प सेट किया गया है: बाहरी बदलावों को बदलें.
- फ़ंक्शन कोड में, विकल्प को
RESET_VALUE
पर सेट किया गया है: बाहरी बदलावों को डिफ़ॉल्ट वैल्यू से बदलें. - विकल्प को फ़ंक्शन कोड में सेट नहीं किया गया है, लेकिन उसे मौजूदा डिप्लॉय किए गए फ़ंक्शन में सेट किया गया है: डिप्लॉय किए गए फ़ंक्शन में दिए गए विकल्प का इस्तेमाल करें.
preserveExternalChanges: true
विकल्प का इस्तेमाल करने का सुझाव नहीं दिया जाता
ज़्यादातर मामलों में, क्योंकि आपके
कोड आपके लिए रनटाइम के विकल्पों के लिए, सही सोर्स का इस्तेमाल नहीं कर पाएगा
फ़ंक्शन. अगर इसका इस्तेमाल किया जाता है, तो Google Cloud Console की जांच करें या gcloud का इस्तेमाल करें
सीएलआई का इस्तेमाल करें.
Node.js वर्शन सेट करें
Cloud Functions के लिए Firebase SDK टूल की मदद से, Node.js रनटाइम को चुना जा सकता है. आपके पास किसी प्रोजेक्ट के सभी फ़ंक्शन को खास तौर पर रनटाइम पर चलाने का विकल्प है इनमें से किसी एक Node.js वर्शन के साथ काम करने वाला एनवायरमेंट:
- Node.js 20 (झलक)
- Node.js 18
- Node.js 16
- Node.js 14
Node.js वर्शन को सेट करने के लिए:
package.json
में, engines
फ़ील्ड में जाकर वर्शन सेट किया जा सकता है
ऐसी फ़ाइल जो शुरू होने के दौरान आपकी functions/
डायरेक्ट्री में बनाई गई थी.
उदाहरण के लिए, सिर्फ़
वर्शन 18 के लिए, package.json
में इस लाइन में बदलाव करें:
"engines": {"node": "18"}
अगर आप यार्न पैकेज मैनेजर का इस्तेमाल कर रहे हैं या आपकी
engines
फ़ील्ड का इस्तेमाल करके, Cloud Functions के लिए Firebase SDK टूल का रनटाइम सेट किया जा सकता है
इसके बजाय firebase.json
:
{
"functions": {
"runtime": "nodejs18" // or nodejs14, nodejs16 or nodejs20
}
}
सीएलआई, firebase.json
में सेट की गई वैल्यू को किसी भी वैल्यू या
जिसकी सीमा आपने package.json
में अलग से सेट की है.
अपना Node.js रनटाइम अपग्रेड करें
अपने Node.js रनटाइम को अपग्रेड करने के लिए:
- पक्का करें कि आपका प्रोजेक्ट ब्लेज़ प्राइसिंग प्लान.
- पक्का करें कि Firebase CLI v11.18.0 या इसके बाद के वर्शन का इस्तेमाल किया जा रहा हो.
- यहां बनाई गई
package.json
फ़ाइल मेंengines
वैल्यू बदलें शुरू करने के दौरान, अपनीfunctions/
डायरेक्ट्री को ऐक्सेस करें. उदाहरण के लिए, यदि आप संस्करण 16 से संस्करण 18 में अपग्रेड कर रहे हैं, तो दिखना चाहिए:"engines": {"node": "18"}
- वैकल्पिक रूप से, Firebase Local Emulator Suite.
- सभी फ़ंक्शन को फिर से डिप्लॉय करें.
स्केलिंग के व्यवहार को कंट्रोल करें
डिफ़ॉल्ट रूप से, Cloud Functions for Firebase, चल रहे इंस्टेंस की संख्या को स्केल करता है यह संख्या, आने वाले अनुरोधों की संख्या के आधार पर तय होती है. इसे घटाकर शायद शून्य कर दिया जाता है ट्रैफ़िक कम होने पर इंस्टेंस. हालांकि, अगर आपका ऐप्लिकेशन इस्तेमाल करने के लिए कम कोल्ड स्टार्ट की संख्या को कम करना है और आपको कंटेनर इंस्टेंस की कम से कम संख्या तय करके डिफ़ॉल्ट व्यवहार गर्म रखा और अनुरोधों को पूरा करने के लिए तैयार है.
इसी तरह, इंस्टेंस की स्केलिंग को सीमित करने के लिए, ज़्यादा से ज़्यादा संख्या सेट की जा सकती है आने वाले अनुरोधों का जवाब दे सकें. अपनी लागत को कंट्रोल करने के लिए, इस सेटिंग का इस्तेमाल करें या बैकिंग सेवा से कनेक्शन की संख्या सीमित करने के लिए किया जा सकता है. उदाहरण के लिए, डेटाबेस.
कोल्ड स्टार्ट की संख्या कम करें
सोर्स कोड में किसी फ़ंक्शन के लिए, इंस्टेंस की कम से कम संख्या सेट करने के लिए,
runWith
तरीका. यह तरीका, JSON ऑब्जेक्ट को स्वीकार करता है
RuntimeOptions
इंटरफ़ेस, जो 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
तरीका. यह तरीका, JSON ऑब्जेक्ट को स्वीकार करता है
RuntimeOptions
इंटरफ़ेस, जो
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
को इस्तेमाल करने के सबसे सही तरीके.
टाइम आउट और मेमोरी ऐलोकेशन सेट करें
कुछ मामलों में, लंबे टाइम आउट के लिए, आपके फ़ंक्शन के लिए खास शर्तें हो सकती हैं या बहुत ज़्यादा मेमोरी का इस्तेमाल होता हो. आप इन वैल्यू को इनमें से किसी पर भी सेट कर सकते हैं: Google Cloud Console या फ़ंक्शन के सोर्स कोड (सिर्फ़ Firebase) में.
फ़ंक्शन के सोर्स कोड में, मेमोरी का ऐलोकेशन और टाइम आउट सेट करने के लिए,
runWith
Cloud Functions के 2.0.0 वर्शन के लिए, Firebase SDK टूल में पैरामीटर पेश किया गया. यह रनटाइम विकल्प स्वीकार करता है
एक 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
या 9 मिनट हो सकता है.
किसी फ़ंक्शन को दी गई मेमोरी, तय किए गए सीपीयू के हिसाब से होती है
फ़ंक्शन के लिए, जैसा कि memory
के लिए मान्य वैल्यू की इस सूची में बताया गया है:
128MB
— 200 मेगाहर्ट्ज़256MB
— 400 मेगाहर्ट्ज़512MB
— 800 मेगाहर्ट्ज़1GB
— 1.4 गीगाहर्ट्ज़2GB
— 2.4 गीगाहर्ट्ज़4GB
— 4.8 गीगाहर्ट्ज़8GB
— 4.8 गीगाहर्ट्ज़
Google Cloud कंसोल में, मेमोरी का बंटवारा और टाइम आउट सेट करने के लिए:
- Google Google Cloud कंसोल में, नीचे दिए गए विकल्पों में से Cloud Functions चुनें बायां मेन्यू.
- फ़ंक्शन सूची में किसी फ़ंक्शन के नाम पर क्लिक करके उसे चुनें.
- सबसे ऊपर मौजूद मेन्यू में, बदलाव करें आइकॉन पर क्लिक करें.
- असाइन की गई मेमोरी लेबल वाले ड्रॉप-डाउन मेन्यू से, मेमोरी का बंटवारा चुनें.
- बेहतर विकल्प दिखाने के लिए, ज़्यादा पर क्लिक करें. इसके बाद, समय खत्म टेक्स्ट बॉक्स में सेकंड की संख्या डालें.
- फ़ंक्शन को अपडेट करने के लिए, सेव करें पर क्लिक करें.