লোকাল ফাংশন রান করা

Firebase CLI-তে একটি Cloud Functions এমুলেটর অন্তর্ভুক্ত থাকে যা নিম্নলিখিত ফাংশনের ধরনগুলি এমুলেট করতে পারে:

  • HTTPS ফাংশন
  • কল করা যায় এমন ফাংশন
  • টাস্ক কিউ ফাংশন
  • Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, কাজ করে এমন Firebase অ্যালার্ট এবং Cloud Pub/Sub থেকে ব্যাকগ্রাউন্ড ফাংশন ট্রিগার করা হয়।

প্রোডাকশনে ডেপ্লয় করার আগে ফাংশন পরীক্ষা করার জন্য আপনি লোকালি তা রান করতে পারেন।

Firebase CLI ইনস্টল করা

Cloud Functions এমুলেটর ব্যবহার করতে, প্রথমে Firebase CLI ইনস্টল করুন:

npm install -g firebase-tools

লোকাল এমুলেটর ব্যবহার করতে, আপনার Cloud Functions-কে এগুলির উপর নির্ভর করতে হবে:

  • firebase-admin ভার্সন 8.0.0 বা তার পরবর্তী যেকোনও ভার্সন।
  • firebase-functions ভার্সন 3.0.0 বা তার পরবর্তী যেকোনও ভার্সন।

অ্যাডমিন ক্রেডেনশিয়াল সেট-আপ করুন (ঐচ্ছিক)

আপনি যদি চান যে আপনার ফাংশন টেস্ট Firebase Admin SDK-এর মাধ্যমে Google API বা অন্যান্য Firebase API-এর সাথে ইন্টার‍্যাক্ট করুক, তাহলে আপনাকে অ্যাডমিন ক্রেডেনশিয়াল সেট-আপ করতে হতে পারে।

  • Cloud Firestore এবং Realtime Database ট্রিগারে আগে থেকেই পর্যাপ্ত ক্রেডেনশিয়াল আছে এবং অতিরিক্ত সেট-আপের প্রয়োজন নেই।
  • Authentication এবং FCM-এর মতো Firebase API বা Cloud Translation বা Cloud Speech-এর মতো Google API সহ অন্যান্য সব API-এর জন্য এই বিভাগে বর্ণনা করা সেট-আপের ধাপগুলি প্রয়োজন। আপনি Cloud Functions শেল বা firebase emulators:start ব্যবহার করছেন কিনা তার উপর নির্ভর করে এটি প্রযোজ্য হয়।

এমুলেট করা ফাংশনের জন্য অ্যাডমিন ক্রেডেনশিয়াল সেট-আপ করতে:

  1. Google Cloud কনসোলের পরিষেবা অ্যাকাউন্ট প্যানেল খুলুন।
  2. App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট বেছে নেওয়া হয়েছে কিনা তা নিশ্চিত করুন এবং কী তৈরি করুন বিকল্প বেছে নিতে ডানদিকে বিকল্পের মেনু ব্যবহার করুন।
  3. প্রম্পট করা হলে, 'কী'-এর ধরন হিসেবে JSON বেছে নিন এবং তৈরি করুন বিকল্পে ক্লিক করুন।
  4. ডাউনলোড করা কী-তে পয়েন্ট করতে আপনার Google ডিফল্ট ক্রেডেনশিয়াল সেট করুন:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    জানলা

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

এইসব ধাপ সম্পূর্ণ করার পরে, আপনার ফাংশন টেস্ট Admin SDK ব্যবহার করে Firebase এবং Google API অ্যাক্সেস করতে পারবে। যেমন, Authentication ট্রিগার পরীক্ষা করার সময়, এমুলেট করা ফাংশন admin.auth().getUserByEmail(email) কল করতে পারে।

ফাংশন কনফিগারেশন সেট-আপ করুন (ঐচ্ছিক)

আপনি কাস্টম ফাংশন কনফিগারেশন ভেরিয়েবল ব্যবহার করলে, আপনার লোকাল এনভায়রনমেন্টে কাস্টম কনফিগারেশন (functions ডিরেক্টরির মধ্যে এটি রান করুন) পেতে প্রথমে কমান্ড রান করুন:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

ইমুলেটর সুইট রান করুন

Cloud Functions এমুলেটর রান করতে, emulators:start কমান্ড ব্যবহার করুন:

firebase emulators:start

emulators:start কমান্ড Cloud Functions, Cloud Firestore, Realtime Database এবং Firebase Hosting-এর জন্য এমুলেটর চালু করবে। এটি আপনার লোকাল প্রোজেক্টে firebase init ব্যবহার করে ইনিশিয়ালাইজ করা প্রোডাক্টের উপর ভিত্তি করে হবে। আপনি কোনও নির্দিষ্ট এমুলেটর শুরু করতে চাইলে, --only ফ্ল্যাগ ব্যবহার করুন:

firebase emulators:start --only functions

এমুলেটর চালু হওয়ার পরে আপনি যদি টেস্ট স্যুট বা টেস্টিং স্ক্রিপ্ট চালাতে চান, তাহলে emulators:exec কমান্ড ব্যবহার করুন:

firebase emulators:exec "./my-test.sh"

চালু হওয়ার পরে, এমুলেটর আপনার ফাংশন থেকে টার্মিনাল উইন্ডোতে লগ স্ট্রিম করে যেখানে এটি চলে। এটি আপনার ফাংশনের মধ্যে console.log(), console.info(), console.error() এবং console.warn() স্টেটমেন্ট থেকে সব আউটপুট দেখায়।

মনে রাখবেন যে এমুলেটর আউটপুট ডিফল্টভাবে একটি নির্দিষ্ট অঞ্চলে (us-central1) ফাংশনের ডিপ্লয়মেন্ট সিমুলেট করে যা প্রকৃত প্রোডাকশন ডিপ্লয়মেন্ট ডিফল্ট অঞ্চলের সাথে নাও মিলতে পারে। অঞ্চল সম্পর্কে আরও তথ্যের জন্য Cloud Functions লোকেশন দেখুন।

এমুলেটরের সাথে কথা বলতে আপনার অ্যাপকে ইনস্ট্রুমেন্ট করুন

এমুলেটরের সাথে ইন্টার‍্যাক্ট করার জন্য আপনার অ্যাপকে ইনস্ট্রুমেন্ট করতে, আপনাকে কিছু অতিরিক্ত কনফিগারেশন করতে হতে পারে।

কল করা যায় এমন ফাংশনের জন্য আপনার অ্যাপ ইন্সট্রুমেন্ট করুন

আপনার প্রোটোটাইপ এবং টেস্ট অ্যাক্টিভিটিতে কল করা যায় এমন ব্যাকএন্ড ফাংশন থাকলে, Cloud Functions for Firebase এমুলেটরের সাথে ইন্টার‍্যাকশন এইভাবে কনফিগার করুন:

Kotlin
// 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);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1:5001");

Web

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

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

Web

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

টাস্ক কিউ ফাংশন এমুলেশনের জন্য আপনার অ্যাপ ইন্সট্রুমেন্ট করুন

এমুলেটর ট্রিগার সংজ্ঞার উপর ভিত্তি করে এমুলেট করা টাস্ক কিউ অটোমেটিক সেট-আপ করে এবং অ্যাডমিন SDK কিউতে থাকা অনুরোধ এমুলেটরে রি-রুট করে যদি এটি শনাক্ত করে যে এটি CLOUD_TASKS_EMULATOR_HOST এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে চলছে।

মনে রাখবেন যে প্রোডাকশনে ব্যবহৃত ডিসপ্যাচ সিস্টেম এমুলেটরে প্রয়োগ করা সিস্টেমের চেয়ে বেশি জটিল, তাই এমুলেট করা আচরণ প্রোডাকশন এনভায়রনমেন্টের সাথে হুবহু মিলবে বলে আশা করবেন না। এমুলেটরের মধ্যে থাকা প্যারামিটারগুলি টাস্ক পাঠানো এবং আবার চেষ্টা করার হারের সর্বোচ্চ সীমা প্রদান করে।

ব্যাকগ্রাউন্ড-ট্রিগার করা ফাংশন এমুলেশনের জন্য আপনার অ্যাপ ইন্সট্রুমেন্ট করুন

Cloud Functions এমুলেটর নিম্নলিখিত সোর্স থেকে ব্যাকগ্রাউন্ড-ট্রিগার করা ফাংশন সাপোর্ট করে:

  • Realtime Database ইমুলেটর
  • Cloud Firestore ইমুলেটর
  • Authentication ইমুলেটর
  • Pub/Sub ইমুলেটর
  • Firebase Alerts এমুলেটর

ব্যাকগ্রাউন্ড ইভেন্ট ট্রিগার করতে, Emulator Suite UI ব্যবহার করে ব্যাক-এন্ড রিসোর্স পরিবর্তন করুন অথবা আপনার প্ল্যাটফর্মের জন্য SDK ব্যবহার করে এমুলেটরে আপনার অ্যাপ বা টেস্ট কোড কানেক্ট করুন।

এক্সটেনশন দ্বারা নির্গত কাস্টম ইভেন্টের জন্য টেস্ট হ্যান্ডলার

Cloud Functions v2-এর সাথে Firebase Extensions কাস্টম ইভেন্ট ম্যানেজ করার জন্য আপনি যে ফাংশন প্রয়োগ করেন, তার জন্য Cloud Functions এমুলেটর Eventarc এমুলেটরের সাথে পেয়ার করে Eventarc ট্রিগার-কে সাপোর্ট করে।

ইভেন্ট নির্গত করে এমন এক্সটেনশনের জন্য কাস্টম ইভেন্ট হ্যান্ডলার পরীক্ষা করতে, আপনাকে অবশ্যই Cloud Functions এবং Eventarc এমুলেটর ইনস্টল করতে হবে।

Eventarc এমুলেটর চালু থাকলে, Cloud Functions রানটাইম বর্তমান প্রসেসে EVENTARC_EMULATOR এনভায়রনমেন্ট ভেরিয়েবলকে localhost:9299-এ সেট করে। EVENTARC_EMULATOR এনভায়রনমেন্ট ভেরিয়েবল সেট করা থাকলে, Firebase Admin SDK অটোমেটিক Eventarc এমুলেটরের সাথে কানেক্ট করে। আপনি Local Emulator Suite কনফিগার করুন বিকল্পের অধীনে আলোচনা করা ডিফল্ট পোর্ট পরিবর্তন করতে পারবেন।

এনভায়রনমেন্ট ভেরিয়েবল সঠিকভাবে কনফিগার করা থাকলে, Firebase Admin SDK অটোমেটিক Eventarc এমুলেটরে ইভেন্ট পাঠায়। পরিবর্তে, Eventarc এমুলেটর Cloud Functions এমুলেটরে কল ব্যাক করে যাতে যেকোনও রেজিস্টার করা হ্যান্ডলার ট্রিগার করা যায়।

হ্যান্ডলার এক্সিকিউশন সম্পর্কে বিস্তারিত জানতে আপনি Emulator Suite UI-এ ফাংশন লগ চেক করতে পারেন।

অন্যান্য পরিষেবার সাথে ইন্টার‌্যাকশন

ইমুলেটর সুইটে একাধিক ইমুলেটর থাকে, যা ক্রস-প্রোডাক্ট ইন্টার‍্যাকশন টেস্ট করতে সাহায্য করে।

Cloud Firestore

আপনার কাছে এমন ফাংশন থাকলে যা Firebase Admin SDK ব্যবহার করে Cloud Firestore-এ লেখে, তাহলে এই লেখাগুলি Cloud Firestore এমুলেটরে পাঠানো হবে যদি এটি চলছে। এইসব রাইটের মাধ্যমে আরও ফাংশন ট্রিগার করা হলে, সেগুলি Cloud Functions এমুলেটরে রান করা হবে।

Cloud Storage

আপনার কাছে এমন ফাংশন থাকলে যা Cloud Storage-এ লেখার জন্য Firebase Admin SDK (ভার্সন 9.7.0 বা তার বেশি) ব্যবহার করে, তাহলে এই লেখাগুলি Cloud Storage এমুলেটরে পাঠানো হবে যদি এটি চালু থাকে। এইসব রাইটের মাধ্যমে আরও ফাংশন ট্রিগার করা হলে, সেগুলি Cloud Functions এমুলেটরে রান করা হবে।

Firebase Authentication

আপনার কাছে এমন ফাংশন থাকলে যা Firebase Authentication-এ লেখার জন্য Firebase Admin SDK (ভার্সন 9.3.0 বা তার পরের) ব্যবহার করে, তাহলে এই লেখাগুলি Auth এমুলেটরে পাঠানো হবে যদি এটি চালু থাকে। এইসব রাইটের মাধ্যমে আরও ফাংশন ট্রিগার করা হলে, সেগুলি Cloud Functions এমুলেটরে রান করা হবে।

Firebase হোস্টিং

আপনি যদি Cloud Functions ব্যবহার করে Firebase Hosting-এর জন্য পরিবর্তনশীল কন্টেন্ট তৈরি করেন, তাহলে firebase emulators:start হোস্টিংয়ের জন্য প্রক্সি হিসেবে আপনার লোকাল HTTP ফাংশন ব্যবহার করে।

Firebase সতর্কতা

অন্তত একটি কাজ করে এমন Firebase সতর্কতা ট্রিগার অন্তর্ভুক্ত আছে এমন যেকোনও প্রোজেক্টে, এমুলেটর UI-তে একটি FireAlerts ট্যাব অন্তর্ভুক্ত থাকে। অ্যালার্ট ট্রিগার এমুলেট করতে:

  1. FireAlerts ট্যাব খুলুন। এই ট্যাবে একটি ড্রপডাউন দেখানো হয় যেখানে ট্রিগার যুক্ত অ্যালার্টের ধরনগুলি থাকে (যেমন, আপনার কাছে onNewFatalIssuePublished ট্রিগার থাকলে, crashlytics.newFatalIssue দেখানো হয়)।
  2. সতর্কতার ধরন বেছে নিন। ফর্মটি ডিফল্ট মান সহ অটো পপুলেট হয়, যা এডিট করা যেতে পারে। আপনি ইভেন্টের ফিল্ড এডিট করতে পারবেন (সতর্কতা ইভেন্ট থেকে পাওয়া অন্যান্য তথ্য হয় অনুমান করা, মক ভ্যালু অথবা র‍্যান্ডমভাবে তৈরি করা)।
  3. ফাংশন এমুলেটরে সিন্থেটিক সতর্কতা পাঠাতে সতর্কতা পাঠান বিকল্প বেছে নিন, Firebase কনসোলের সতর্কতা বিভাগে লগিং উপলভ্য (পাশাপাশি লগেও)।

পরবর্তী ধাপ

Firebase ইমুলেটর সুইট ব্যবহারের সম্পূর্ণ উদাহরণ দেখতে, টেস্টিং কুইকস্টার্ট স্যাম্পেল দেখুন।