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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Firebase आपके 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 वर्शन को लिखने और डिप्लॉय करने की सुविधा देती हैं. आप इस्तेमाल किए जा सकने वाले दूसरे वर्शन चुनें.

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

सेटअप के टास्क पूरे करने के बाद, ये काम किए जा सकते हैं सोर्स डायरेक्ट्री खोलें और सेक्शन पढ़ें. इस सैंपल के लिए, आपके प्रोजेक्ट को Cloud Functions और एडमिन SDK मॉड्यूल, जो नोड require का इस्तेमाल करते हैं स्टेटमेंट. लाइनें जोड़ें आपकी 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, Authentication, और Firebase Realtime Database के लिए इसका इस्तेमाल किया जाता है. यह 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 Local Emulator Suite आपको अपने कंप्यूटर पर ऐप्लिकेशन बनाने के बजाय, उन्हें अपनी लोकल मशीन पर बनाने और उनकी जांच करने की सुविधा मिलती है Firebase प्रोजेक्ट. डेवलपमेंट के दौरान, स्थानीय तौर पर टेस्ट करने का सुझाव दिया जाता है. क्योंकि इससे कोडिंग में होने वाली गड़बड़ियों का खतरा कम हो जाता है. लागत को प्रोडक्शन एनवायरमेंट में खर्च करना पड़ता है. उदाहरण के लिए, इनफ़ाइनाइट लूप.

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

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

  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. Emulator Suite UI में फ़ंक्शन के असर देखें:

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

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. फ़ायर स्टोर टैब में, आपको वह दस्तावेज़ दिखेगा जिसमें आपका मूल दस्तावेज़ होगा और आपके संदेश का अपरकेस किया गया वर्शन (अगर यह मूल रूप से "अपरकेसमे" लिखा होता है, तो आपको "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 कंसोल में लॉग देखें. अगर आपको फ़ंक्शन मिटाने हैं डेवलपमेंट या प्रोडक्शन के दौरान, 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 के बारे में ज़्यादा जानने के लिए, ये काम भी किए जा सकते हैं: