Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

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

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

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

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

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

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

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

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

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

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

डेमो

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

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

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

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

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

एमुलेटर से बात करने के लिए अपने ऐप को इंस्ट्रुमेंट करें

कॉल करने योग्य कार्यों के लिए अपने ऐप को इंस्ट्रुमेंट करें

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

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().useEmulator(withHost: "localhost", port: 5001)

Web version 9

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

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

Web version 8

firebase.functions().useEmulator("localhost", 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 पर्यावरण चर सेट होने पर Firebase व्यवस्थापक SDK स्वचालित रूप से Eventarc एमुलेटर से कनेक्ट हो जाते हैं। आप डिफ़ॉल्ट पोर्ट को संशोधित कर सकते हैं जैसा कि स्थानीय एमुलेटर सूट कॉन्फ़िगर करें के तहत चर्चा की गई है।

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

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

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

यदि आपके कार्य 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

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

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

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

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

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

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

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

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

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

बादल आईएएम

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

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

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

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

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

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

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

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

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

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

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

आगे क्या?