शुरू करें: अपने पहले फ़ंक्शन लिखें, टेस्ट करें, और डिप्लॉय करें


Cloud Functions का इस्तेमाल शुरू करने के लिए, इस ट्यूटोरियल की मदद से काम करें, इसकी शुरुआत, सेटअप से जुड़े ज़रूरी टास्क से होती है. इसके अलावा, यह कुछ नया बनाने, टेस्ट करने, और और दो मिलते-जुलते फ़ंक्शन को डिप्लॉय कर रहा है:

  • "मैसेज जोड़ें" फ़ंक्शन जो एक ऐसे यूआरएल को दिखाता है जो टेक्स्ट वैल्यू को स्वीकार करता है और उसे लिखता है Cloud Firestore में बदलें.
  • "अंग्रेज़ी के बड़े अक्षर दिखाएं" वह फ़ंक्शन जो Cloud Firestore के लिखने पर ट्रिगर होता है और पूरी तरह बदल देता है टेक्स्ट को कैपिटल लेटर में कर दिया जाएगा.

हमने इसके लिए Cloud Firestore और एचटीटीपी से ट्रिगर किए गए JavaScript फ़ंक्शन को चुना है का एक हिस्सा है, क्योंकि इन बैकग्राउंड ट्रिगर की अच्छी तरह से जांच की जा सकती है. Firebase लोकल एम्युलेटर सुइट की मदद से. यह टूलसेट रीयलटाइम डेटाबेस का भी इस्तेमाल करता है, PubSub, पुष्टि, और कॉल किए जा सकने वाले एचटीटीपी ट्रिगर. अन्य तरह के बैकग्राउंड ट्रिगर जैसे रिमोट कॉन्फ़िगरेशन, TestLab, और Analytics ट्रिगर, ये सभी इंटरैक्टिव तरीके से टेस्ट किया गया. इसमें ऐसे टूलसेट का इस्तेमाल नहीं किया गया जो इस पेज में बताया गया है.

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

Firebase प्रोजेक्ट बनाना

  1. Firebase कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें.

    • किसी मौजूदा Google Cloud प्रोजेक्ट में Firebase के संसाधन जोड़ने के लिए, प्रोजेक्ट का नाम डालें या ड्रॉपडाउन मेन्यू से इसे चुनें.

    • नया प्रोजेक्ट बनाने के लिए, प्रोजेक्ट का पसंदीदा नाम डालें. यह विकल्प भी इस्तेमाल किया जा सकता है प्रोजेक्ट के नाम के नीचे दिखाए गए प्रोजेक्ट आईडी में बदलाव करें.

  2. अगर कहा जाए, तो Firebase की शर्तों को पढ़ें और स्वीकार करें.

  3. जारी रखें पर क्लिक करें.

  4. (ज़रूरी नहीं) अपने प्रोजेक्ट के लिए Google Analytics सेट अप करना. इसकी मदद से, नीचे दिए गए Firebase प्रॉडक्ट में से किसी भी एक का इस्तेमाल करके बेहतर अनुभव पाने के लिए:

    मौजूदा रिपोर्ट में से किसी एक को चुनें Google Analytics खाता या नया खाता बनाने के लिए.

    अगर नया खाता बनाया जाता है, तो Analytics रिपोर्टिंग स्थान, फिर स्वीकार करें डेटा शेयर करने की सेटिंग और Google Analytics की शर्तों में बदलाव कर सकते हैं.

  5. प्रोजेक्ट बनाएं पर क्लिक करें (या अगर आप किसी मौजूदा Google Cloud प्रोजेक्ट शामिल हैं).

Firebase आपके Firebase प्रोजेक्ट के लिए संसाधन अपने-आप सेट अप करता है. टास्क कब शुरू होगा प्रोसेस पूरी हो जाती है, तो आपको Firebase के खास जानकारी वाले पेज पर ले जाया जाएगा प्रोजेक्ट पर काम करता है.

Node.js और Firebase सीएलआई को सेट अप करना

फ़ंक्शन लिखने के लिए, आपको Node.js एनवायरमेंट की ज़रूरत होगी, साथ ही, इन कामों को करने के लिए आपको Firebase सीएलआई की ज़रूरत पड़ेगी Cloud Functions रनटाइम. Node.js और npm इंस्टॉल करने के लिए, नोड वर्शन मैनेजर का सुझाव दिया जाता है.

Node.js और npm को इंस्टॉल करने के बाद, Firebase सीएलआई इंस्टॉल करना आपके पसंदीदा तरीके से. एनपीएम के ज़रिए सीएलआई इंस्टॉल करने के लिए, इसका इस्तेमाल करें:

npm install -g firebase-tools

इससे दुनिया भर में उपलब्ध Firebase कमांड इंस्टॉल हो जाता है. अगर आपने आदेश विफल होता है, तो आपको npm अनुमतियां बदलें. firebase-tools को नए वर्शन में अपडेट करने के लिए, उसी निर्देश को फिर से चलाएं.

प्रोजेक्ट शुरू करना

Cloud Functions के लिए Firebase SDK टूल का इस्तेमाल शुरू करने पर, एक खाली प्रोजेक्ट बनाएं जिसमें डिपेंडेंसी और कम से कम सैंपल कोड शामिल हो और आप फ़ंक्शन लिखने के लिए TypeScript या JavaScript. इसके उद्देश्यों के लिए ट्यूटोरियल के तौर पर, आपको Cloud Firestore को शुरू करना होगा.

प्रोजेक्ट शुरू करने के लिए:

  1. ब्राउज़र के ज़रिए लॉग इन करने औरfirebase login Firebase सीएलआई.
  2. अपनी Firebase प्रोजेक्ट डायरेक्ट्री पर जाएं.
  3. firebase init firestore चलाएं. इस ट्यूटोरियल के लिए, अगर आपके पास Firebase के नियमों और इंडेक्स फ़ाइलों के लिए पूछे जाने पर वैल्यू. अगर आपने फ़िलहाल, इस प्रोजेक्ट में Cloud Firestore का इस्तेमाल करके, के लिए, एक शुरुआती मोड और जगह चुननी होगी, जैसा कि यहां बताया गया है Cloud Firestore के साथ शुरुआत करें.
  4. firebase init functions चलाएं. सीएलआई आपको मौजूदा दस्तावेज़ चुनने के लिए कहता है या कोड बेस को शुरू करें और नया नाम रखें. अगर आपने अभी-अभी शुरुआत की है, डिफ़ॉल्ट जगह पर एक ही कोड बेस काफ़ी है; बाद में, जैसे-जैसे अपने सिस्टम का दायरा बढ़ता है, आपको कोडबेस में फ़ंक्शन व्यवस्थित करने हों.
  5. सीएलआई में आपको भाषा से जुड़ी सहायता के लिए दो विकल्प मिलते हैं:

    इस ट्यूटोरियल के लिए JavaScript चुनें.

  6. सीएलआई, आपको एनपीएम के साथ डिपेंडेंसी इंस्टॉल करने का विकल्प देता है. यह सुरक्षित है किसी अन्य तरीके से डिपेंडेंसी मैनेज करने के लिए, हालांकि, अगर आप ऐसा नहीं करते हैं, तो आपको ऐसा करने से पहले npm install को एम्युलेट करना होगा या आपके फ़ंक्शन को डिप्लॉय कर रहा है.

इन निर्देशों के पूरा होने के बाद, आपके प्रोजेक्ट का स्ट्रक्चर ऐसा दिखेगा शामिल करें:

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

शुरू करने के दौरान बनाई गई package.json फ़ाइल में, एक अहम फ़ाइल कुंजी: "engines": {"node": "16"}. यह आपके Node.js वर्शन को लिखने और डिप्लॉय करने की सुविधा देती हैं. आप इस्तेमाल किए जा सकने वाले दूसरे वर्शन चुनें.

ज़रूरी मॉड्यूल इंपोर्ट करके, ऐप्लिकेशन शुरू करें

सेटअप के टास्क पूरे करने के बाद, ये काम किए जा सकते हैं सोर्स डायरेक्ट्री खोलें और सेक्शन पढ़ें. इस सैंपल के लिए, आपके प्रोजेक्ट को नोड require का इस्तेमाल करने वाले Cloud Functions और एडमिन SDK मॉड्यूल स्टेटमेंट. लाइनें जोड़ें आपकी index.js फ़ाइल से:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

ये लाइनें, firebase-functions और firebase-admin मॉड्यूल को लोड करती हैं, और admin ऐप्लिकेशन इंस्टेंस से शुरू करें, जिससे Cloud Firestore में बदलाव किए जा सकते हैं. जहां भी Admin SDK सहायता उपलब्ध है, FCM, पुष्टि, और Firebase रीयल टाइम डेटाबेस के लिए, यह एक यह Cloud Functions का इस्तेमाल करके Firebase को इंटिग्रेट करने का एक बेहतरीन तरीका है.

Firebase सीएलआई अपने-आप शुरू करने पर, Cloud Functions नोड मॉड्यूल के लिए Firebase और Firebase SDK टूल इंस्टॉल किया जाता है आपका प्रोजेक्ट. तीसरे पक्ष की लाइब्रेरी जोड़ने के लिए आपके प्रोजेक्ट में, package.json में बदलाव किया जा सकता है और npm install को चलाया जा सकता है. ज़्यादा जानकारी के लिए, यह देखें डिपेंडेंसी मैनेज करें.

addMessage() फ़ंक्शन जोड़ें

addMessage() फ़ंक्शन के लिए, इन पंक्तियों को index.js में जोड़ें:

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

addMessage() फ़ंक्शन एक एचटीटीपी एंडपॉइंट है. एंडपॉइंट को किया जाने वाला कोई भी अनुरोध ExpressJS-स्टाइल में नतीजे अनुरोध और जवाब ऑब्जेक्ट को onRequest() कॉलबैक.

एचटीटीपी फ़ंक्शन सिंक्रोनस होते हैं (जो callable फ़ंक्शन), इसलिए आपको जवाब भेजना चाहिए और Cloud Firestore का इस्तेमाल करके, काम को टाला जाएगा. addMessage() एचटीटीपी फ़ंक्शन, एचटीटीपी एंडपॉइंट में एक टेक्स्ट वैल्यू पास करता है और उसे डेटाबेस को पाथ /messages/:documentId/original में शामिल करें.

makeUppercase() फ़ंक्शन जोड़ें

makeUppercase() फ़ंक्शन के लिए, इन पंक्तियों को index.js में जोड़ें:

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

makeUppercase() फ़ंक्शन तब लागू होता है, जब Cloud Firestore को लिखा जाता है. कॉन्टेंट बनाने ref.set फ़ंक्शन सुनने के लिए दस्तावेज़ के बारे में बताता है. परफ़ॉर्मेंस की वजह से, सटीक जानकारी देनी चाहिए.

ब्रेसेस—उदाहरण के लिए, {documentId}—सराउंड "पैरामीटर" वाइल्डकार्ड जो कॉलबैक में अपना मैच किया गया डेटा दिखाते हैं.

Cloud Firestore, onCreate() नए मैसेज जोड़े जाने पर कॉलबैक करें.

इवेंट से जुड़े फ़ंक्शन, जैसे कि Cloud Firestore इवेंट एसिंक्रोनस. कॉलबैक फ़ंक्शन को null, ऑब्जेक्ट, या प्रॉमिस. अगर कुछ भी नहीं लौटाया जाता है, तो फ़ंक्शन का समय खत्म हो जाता है, गड़बड़ी का संकेत मिलता है, और फिर से कोशिश की जाती है. सिंक करना, एक साथ काम नहीं करने वाली प्रोसेस, और प्रॉमिस देखें.

अपने फ़ंक्शन के एक्ज़ीक्यूशन को एम्युलेट करें

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

अपने फ़ंक्शन को एम्युलेट करने के लिए:

  1. firebase emulators:start चलाएं और यूआरएल के लिए आउटपुट देखें के यूज़र इंटरफ़ेस (यूआई) में जोड़ दिया जाएगा. यह डिफ़ॉल्ट रूप से इस पर सेट होती है localhost:4000 पर होस्ट किया जाता है. हालांकि, इसे किसी दूसरे यूआरएल पर होस्ट किया जा सकता है अपनी मशीन पर पोर्ट करना है. इसे खोलने के लिए, उस यूआरएल को अपने ब्राउज़र में डालें एम्युलेटर सुइट का यूज़र इंटरफ़ेस (यूआई).

  2. firebase emulators:start के आउटपुट की जाँच करें यूआरएल के लिए निर्देश वाला है.addMessage() यह ऐसा दिखेगा http://localhost:5001/MY_PROJECT/us-central1/addMessage, इसके अलावा:

    1. MY_PROJECT को आपके प्रोजेक्ट आईडी से बदल दिया जाएगा.
    2. आपके कंप्यूटर पर पोर्ट अलग हो सकता है.
  3. फ़ंक्शन के यूआरएल के आखिर में ?text=uppercaseme क्वेरी स्ट्रिंग जोड़ें. यह कुछ ऐसा दिखेगा: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. वैकल्पिक रूप से, आप "अपरकेसमे" मैसेज को बदल सकते हैं कस्टम में दिखाई देगा.

  4. यूआरएल को अपने ब्राउज़र के नए टैब में खोलकर, एक नया मैसेज बनाएं.

  5. एम्युलेटर सुइट यूज़र इंटरफ़ेस (यूआई) में फ़ंक्शन के असर देखें:

    1. लॉग टैब में, आपको नए लॉग दिखेंगे जिससे यह पता चलेगा कि फ़ंक्शन addMessage() और makeUppercase() दौड़े:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Firestore टैब में, आपको वह दस्तावेज़ दिखेगा जिसमें आपका मूल दस्तावेज़ होगा और आपके संदेश का अपरकेस किया गया वर्शन (अगर यह मूल रूप से "अपरकेसमे" लिखा होता है, तो आपको "UPCASEME" दिखेगा).

प्रोडक्शन एनवायरमेंट में फ़ंक्शन डिप्लॉय करना

एम्युलेटर में आपके फ़ंक्शन के हिसाब से काम करने के बाद, आगे बढ़ें उन्हें डिप्लॉय करना, टेस्ट करना, और प्रोडक्शन एनवायरमेंट में चलाना. इन बातों का ध्यान रखें जिसे सुझाए गए Node.js 14 रनटाइम एनवायरमेंट में डिप्लॉय करने पर, आपके प्रोजेक्ट को ब्लेज़ प्राइसिंग प्लान के हिसाब से होना चाहिए. यहां जाएं: Cloud Functions की कीमत.

ट्यूटोरियल को पूरा करने के लिए, अपने फ़ंक्शन डिप्लॉय करें और फिर उन्हें एक्ज़ीक्यूट करें makeUppercase() को ट्रिगर करने के लिए addMessage().

  1. अपने फ़ंक्शन को डिप्लॉय करने के लिए, इस कमांड को चलाएं:

     firebase deploy --only functions
     

    इस निर्देश को चलाने के बाद, Firebase सीएलआई एचटीटीपी फ़ंक्शन एंडपॉइंट के बारे में भी बताएंगे. अपने टर्मिनल में, आपको इस तरह की एक लाइन दिखेगी:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    यूआरएल में आपके प्रोजेक्ट आईडी के साथ-साथ एचटीटीपी के क्षेत्र की जानकारी होती है फ़ंक्शन का इस्तेमाल करना होगा. आपको इसके बारे में चिंता करने की ज़रूरत नहीं है. कुछ प्रोडक्शन एचटीटीपी फ़ंक्शन को जगह तय करनी चाहिए, ताकि नेटवर्क इंतज़ार में लगने वाला समय कम करें.

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

  2. सीएलआई के ज़रिए addMessage() यूआरएल आउटपुट का इस्तेमाल करके, एक टेक्स्ट क्वेरी पैरामीटर जोड़ें, और इसे किसी ब्राउज़र में खोलें:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    फ़ंक्शन, ब्राउज़र को एक्ज़ीक्यूट करता है और डेटाबेस की लोकेशन पर Firebase कंसोल जहां टेक्स्ट स्ट्रिंग सेव की जाती है. यह लिखने के लिए इवेंट ट्रिगर makeUppercase(), जो एक अपरकेस लिखता है स्ट्रिंग का वर्शन है.

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

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

पूरे सैंपल कोड की समीक्षा करें

यहां फ़ंक्शन वाले पूरे functions/index.js की जानकारी दी गई है addMessage() और makeUppercase(). इन फ़ंक्शन की मदद से एचटीटीपी एंडपॉइंट के लिए पैरामीटर जो Cloud Firestore के लिए एक वैल्यू लिखता है और उसे इस तरह बदल देता है: स्ट्रिंग के सभी वर्णों को अंग्रेज़ी के बड़े अक्षरों में लिखें.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

अगले चरण

इस दस्तावेज़ में, आपको यह जानने में मदद मिलेगी कि Cloud Functions के लिए फ़ंक्शन मैनेज करें और साथ ही, का इस्तेमाल, Cloud Functions के साथ काम करने वाले सभी इवेंट टाइप को मैनेज करने के लिए किया जाता है.

Cloud Functions के बारे में ज़्यादा जानने के लिए, ये काम भी किए जा सकते हैं: