अपने ऐप को क्लाउड फ़ंक्शंस एम्यूलेटर से कनेक्ट करें

अपने ऐप को क्लाउड फ़ंक्शंस एमुलेटर से कनेक्ट करने से पहले, सुनिश्चित करें कि आप समग्र फायरबेस लोकल एमुलेटर सूट वर्कफ़्लो को समझते हैं , और आप लोकल एमुलेटर सूट को इंस्टॉल और कॉन्फ़िगर करते हैं और इसके सीएलआई कमांड की समीक्षा करते हैं।

एक फायरबेस प्रोजेक्ट चुनें

फायरबेस लोकल एमुलेटर सुइट एकल फायरबेस प्रोजेक्ट के लिए उत्पादों का अनुकरण करता है।

उपयोग करने के लिए प्रोजेक्ट का चयन करने के लिए, एमुलेटर शुरू करने से पहले, सीएलआई में अपनी कार्यशील निर्देशिका में firebase use । या, आप प्रत्येक एमुलेटर कमांड को --project फ़्लैग पास कर सकते हैं।

स्थानीय एमुलेटर सुइट वास्तविक फायरबेस परियोजनाओं और डेमो परियोजनाओं के अनुकरण का समर्थन करता है।

परियोजना प्रकार विशेषताएँ एम्यूलेटर के साथ प्रयोग करें
असली

एक वास्तविक फ़ायरबेस प्रोजेक्ट वह है जिसे आपने बनाया और कॉन्फ़िगर किया है (संभवतः फ़ायरबेस कंसोल के माध्यम से)।

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

वास्तविक फायरबेस परियोजनाओं के साथ काम करते समय, आप किसी या सभी समर्थित उत्पादों के लिए एमुलेटर चला सकते हैं।

किसी भी उत्पाद के लिए जिसका आप अनुकरण नहीं कर रहे हैं, आपके ऐप्स और कोड लाइव संसाधन (डेटाबेस इंस्टेंस, स्टोरेज बकेट, फ़ंक्शन इत्यादि) के साथ इंटरैक्ट करेंगे।

डेमो

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

डेमो प्रोजेक्ट के लिए प्रोजेक्ट आईडी में demo- उपसर्ग होता है।

डेमो फायरबेस प्रोजेक्ट्स के साथ काम करते समय, आपके ऐप्स और कोड केवल एमुलेटर के साथ इंटरैक्ट करते हैं। यदि आपका ऐप किसी ऐसे संसाधन के साथ इंटरैक्ट करने का प्रयास करता है जिसके लिए एमुलेटर नहीं चल रहा है, तो वह कोड विफल हो जाएगा।

हम अनुशंसा करते हैं कि आप जहां भी संभव हो डेमो प्रोजेक्ट का उपयोग करें। लाभों में शामिल हैं:

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

एमुलेटर से बात करने के लिए अपने ऐप को उपकरण दें

कॉल करने योग्य कार्यों के लिए अपने ऐप को उपकरणित करें

यदि आपके प्रोटोटाइप और परीक्षण गतिविधियों में कॉल करने योग्य बैकएंड फ़ंक्शंस शामिल हैं, तो फायरबेस एमुलेटर के लिए क्लाउड फ़ंक्शंस के साथ इंटरैक्शन को इस तरह कॉन्फ़िगर करें:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
तीव्र
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web namespaced API

firebase.functions().useEmulator("127.0.0.1", 5001);

HTTPS फ़ंक्शंस अनुकरण के लिए अपने ऐप को उपकरणित करें

आपके कोड में प्रत्येक HTTPS फ़ंक्शन को निम्नलिखित URL प्रारूप का उपयोग करके स्थानीय एमुलेटर से परोसा जाएगा:

http:// $HOST : $PORT / $PROJECT / $REGION / $NAME

उदाहरण के लिए, डिफ़ॉल्ट होस्ट पोर्ट और क्षेत्र के साथ एक सरल helloWorld फ़ंक्शन यहां प्रस्तुत किया जाएगा:

https://localhost:5001/ $PROJECT /us-central1/helloWorld

पृष्ठभूमि-ट्रिगर फ़ंक्शन अनुकरण के लिए अपने ऐप को उपकरणित करें

क्लाउड फ़ंक्शंस एमुलेटर निम्नलिखित स्रोतों से पृष्ठभूमि-ट्रिगर फ़ंक्शंस का समर्थन करता है:

  • रीयलटाइम डेटाबेस एमुलेटर
  • क्लाउड फायरस्टोर एमुलेटर
  • प्रमाणीकरण एम्यूलेटर
  • पब/उप एम्यूलेटर

पृष्ठभूमि घटनाओं को ट्रिगर करने के लिए, एमुलेटर सूट यूआई का उपयोग करके बैक-एंड संसाधनों को संशोधित करें, या अपने प्लेटफ़ॉर्म के लिए एसडीके का उपयोग करके अपने ऐप या टेस्ट कोड को एमुलेटर से कनेक्ट करें।

एक्सटेंशन द्वारा उत्सर्जित कस्टम ईवेंट के लिए परीक्षण हैंडलर

उन फ़ंक्शंस के लिए जिन्हें आप क्लाउड फ़ंक्शंस v2 के साथ फ़ायरबेस एक्सटेंशन कस्टम इवेंट को संभालने के लिए लागू करते हैं, क्लाउड फ़ंक्शंस एमुलेटर इवेंटार्क ट्रिगर्स का समर्थन करने के लिए इवेंटार्क एमुलेटर के साथ जुड़ जाता है।

इवेंट उत्सर्जित करने वाले एक्सटेंशन के लिए कस्टम इवेंट हैंडलर का परीक्षण करने के लिए, आपको क्लाउड फ़ंक्शंस और इवेंटर्क एमुलेटर इंस्टॉल करना होगा।

यदि इवेंटार्क एमुलेटर चल रहा है तो क्लाउड फ़ंक्शंस रनटाइम वर्तमान प्रक्रिया में EVENTARC_EMULATOR पर्यावरण चर को localhost:9299 पर सेट करता है। EVENTARC_EMULATOR पर्यावरण चर सेट होने पर फायरबेस एडमिन एसडीके स्वचालित रूप से इवेंटार्क एमुलेटर से कनेक्ट हो जाता है। आप डिफ़ॉल्ट पोर्ट को संशोधित कर सकते हैं जैसा कि कॉन्फिगर लोकल एमुलेटर सूट के तहत चर्चा की गई है।

जब पर्यावरण चर ठीक से कॉन्फ़िगर किए जाते हैं, तो फ़ायरबेस एडमिन एसडीके स्वचालित रूप से ईवेंट आर्क एमुलेटर को इवेंट भेजता है। बदले में, इवेंटार्क एमुलेटर किसी भी पंजीकृत हैंडलर को ट्रिगर करने के लिए क्लाउड फ़ंक्शंस एमुलेटर पर वापस कॉल करता है।

आप हैंडलर निष्पादन के विवरण के लिए एमुलेटर सूट यूआई में फ़ंक्शन लॉग की जांच कर सकते हैं।

स्थानीय परीक्षण वातावरण कॉन्फ़िगर करें

यदि आपके कार्य dotenv-आधारित पर्यावरण कॉन्फ़िगरेशन पर निर्भर हैं, तो आप अपने स्थानीय परीक्षण वातावरण में उस व्यवहार का अनुकरण कर सकते हैं।

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

उदाहरण के लिए, किसी प्रोजेक्ट में विकास और स्थानीय परीक्षण के लिए थोड़े भिन्न मान वाली ये तीन फ़ाइलें शामिल हो सकती हैं:

.env .env.dev .env.local
ग्रह=पृथ्वी

दर्शक=मनुष्य

दर्शक=देव मानव दर्शक=स्थानीय मनुष्य

जब स्थानीय संदर्भ में शुरू किया जाता है, तो एम्यूलेटर पर्यावरण चर को लोड करता है जैसा कि दिखाया गया है:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

क्लाउड फ़ंक्शंस एमुलेटर में रहस्य और क्रेडेंशियल

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

पर्यावरण चर के लिए क्लाउड फ़ंक्शंस एमुलेटर समर्थन के समान, आप .secret.local फ़ाइल सेट करके रहस्य मानों को ओवरराइड कर सकते हैं। इससे आपके लिए स्थानीय स्तर पर अपने कार्यों का परीक्षण करना आसान हो जाता है, खासकर यदि आपके पास गुप्त मूल्य तक पहुंच नहीं है।

क्लाउड फ़ंक्शंस के परीक्षण के लिए अन्य कौन से उपकरण मौजूद हैं?

क्लाउड फ़ंक्शंस एमुलेटर अन्य प्रोटोटाइप और परीक्षण टूल द्वारा पूरक है:

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

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

क्लाउड फ़ंक्शंस एमुलेटर उत्पादन से कैसे भिन्न है

अधिकांश उपयोग मामलों के लिए क्लाउड फ़ंक्शंस एमुलेटर उत्पादन वातावरण के काफी करीब है। हमने यह सुनिश्चित करने के लिए व्यापक काम किया है कि नोड रनटाइम के भीतर सब कुछ यथासंभव उत्पादन के करीब हो। हालाँकि, एमुलेटर पूर्ण कंटेनरीकृत उत्पादन वातावरण की नकल नहीं करता है, इसलिए जब आपका फ़ंक्शन कोड वास्तविक रूप से निष्पादित होगा, तो आपके पर्यावरण के अन्य पहलू (यानी स्थानीय फ़ाइलें, फ़ंक्शन क्रैश के बाद व्यवहार, आदि) भिन्न होंगे।

बादल आईएएम

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

मेमोरी और प्रोसेसर प्रतिबंध

एमुलेटर आपके कार्यों के लिए मेमोरी या प्रोसेसर प्रतिबंध लागू नहीं करता है। हालाँकि, एम्यूलेटर timeoutSeconds रनटाइम तर्क के माध्यम से टाइमिंग आउट फ़ंक्शन का समर्थन करता है।

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

स्थानीय और उत्पादन परिवेश में अंतर के लिए योजना बनाना

चूंकि एमुलेटर आपकी स्थानीय मशीन पर चलता है, यह अनुप्रयोगों और अंतर्निहित कार्यक्रमों और उपयोगिताओं के लिए आपके स्थानीय वातावरण पर निर्भर करता है।

ध्यान रखें कि क्लाउड फ़ंक्शंस विकास के लिए आपका स्थानीय वातावरण Google उत्पादन वातावरण से भिन्न हो सकता है:

  • उत्पादन वातावरण को अनुकरण करने के लिए आपके द्वारा स्थानीय रूप से इंस्टॉल किए गए एप्लिकेशन (उदाहरण के लिए इस ट्यूटोरियल से ImageMagick) उत्पादन से व्यवहार में भिन्न हो सकते हैं, खासकर यदि आपको एक अलग संस्करण की आवश्यकता होती है या गैर-लिनक्स वातावरण में विकसित किया जाता है। अपने फ़ंक्शन परिनियोजन के साथ-साथ लापता प्रोग्राम की अपनी स्वयं की बाइनरी प्रतिलिपि तैनात करने पर विचार करें।

  • इसी तरह, अंतर्निहित उपयोगिताएँ (उदाहरण के लिए, शेल कमांड जैसे ls , mkdir ) उत्पादन में उपलब्ध संस्करणों से भिन्न हो सकती हैं, खासकर यदि आप गैर-लिनक्स वातावरण (उदाहरण के लिए, macOS) में विकास कर रहे हैं। आप मूल कमांड के लिए केवल-नोड विकल्पों का उपयोग करके, या अपनी तैनाती के साथ बंडल करने के लिए लिनक्स बायनेरिज़ का निर्माण करके इस समस्या को संभाल सकते हैं।

पुनः प्रयास किया जाएगा

क्लाउड फ़ंक्शंस एमुलेटर विफलता पर कार्यों को पुनः प्रयास करने का समर्थन नहीं करता है।

आगे क्या?