Cloud Functions এমুলেটরের সাথে আপনার অ্যাপ কানেক্ট করুন

Cloud Functions এমুলেটরের সাথে আপনার অ্যাপ কানেক্ট করার আগে, আপনি সামগ্রিক Firebase Local Emulator Suite ওয়ার্কফ্লো বুঝেছেন কিনা এবং Local Emulator Suite ইনস্টল ও কনফিগার করেছেন কিনা এবং এর CLI কমান্ড পর্যালোচনা করেছেন কিনা তা নিশ্চিত করুন।

একটি Firebase প্রোজেক্ট বেছে নিন

Firebase Local Emulator Suite একটি Firebase প্রোজেক্টের জন্য প্রোডাক্ট এমুলেট করে।

ব্যবহার করার জন্য প্রোজেক্ট বেছে নিতে, এমুলেটর শুরু করার আগে, আপনার ওয়ার্কিং ডিরেক্টরিতে CLI রান firebase use করুন। অথবা, আপনি প্রতিটি এমুলেটর কমান্ডে --project ফ্ল্যাগ পাস করতে পারেন।

Local Emulator Suite আসল Firebase প্রোজেক্ট এবং ডেমো প্রোজেক্টের এমুলেশন সাপোর্ট করে।

প্রোজেক্টের ধরন ফিচার এমুলেটরের সাথে ব্যবহার করুন
রিয়েল

আসল Firebase প্রোজেক্ট হল এমন একটি প্রোজেক্ট যা আপনি তৈরি ও কনফিগার করেছেন (সম্ভবত Firebase কনসোলের মাধ্যমে)।

আসল প্রোজেক্টে লাইভ রিসোর্স থাকে, যেমন ডেটাবেস ইনস্ট্যান্স, স্টোরেজ বাকেট, ফাংশন বা সেই Firebase প্রোজেক্টের জন্য আপনার সেট-আপ করা অন্য কোনও রিসোর্স।

আসল Firebase প্রোজেক্ট নিয়ে কাজ করার সময়, আপনি কাজ করে এমন যেকোনও বা সব প্রোডাক্টের জন্য এমুলেটর চালাতে পারবেন।

আপনি এমুলেট করছেন না এমন যেকোনও প্রোডাক্টের জন্য, আপনার অ্যাপ এবং কোড লাইভ রিসোর্সের (ডেটাবেস ইনস্ট্যান্স, স্টোরেজ বাকেট, ফাংশন ইত্যাদি) সাথে ইন্টার‍্যাক্ট করবে।

নমুনা

ডেমো Firebase প্রোজেক্টে কোনও আসল Firebase কনফিগারেশন এবং লাইভ রিসোর্স থাকে না। এইসব প্রোজেক্ট সাধারণত কোডল্যাব বা অন্যান্য টিউটোরিয়ালের মাধ্যমে অ্যাক্সেস করা হয়।

ডেমো প্রোজেক্টের প্রোজেক্ট আইডিতে demo- প্রিফিক্স থাকে।

ডেমো Firebase প্রোজেক্টের সাথে কাজ করার সময়, আপনার অ্যাপ ও কোড শুধুমাত্র এমুলেটরের সাথে ইন্টার‍্যাক্ট করে। আপনার অ্যাপ যদি এমন কোনও রিসোর্সের সাথে ইন্টার‍্যাক্ট করার চেষ্টা করে যার জন্য এমুলেটর চলছে না, তাহলে সেই কোড কাজ করবে না।

আমরা সাজেস্ট করি যে যেখানেই সম্ভব ডেমো প্রোজেক্ট ব্যবহার করুন। সুবিধার মধ্যে এইসব অন্তর্ভুক্ত আছে:

  • সহজ সেট-আপ, কারণ আপনি Firebase প্রোজেক্ট তৈরি না করেই এমুলেটর চালাতে পারবেন
  • আরও শক্তিশালী নিরাপত্তা, কারণ আপনার কোড যদি ভুলবশত নন-ইমুলেটেড (প্রোডাকশন) রিসোর্সকে ইনভোক করে, তাহলে ডেটা পরিবর্তন, ব্যবহার এবং বিলিংয়ের কোনও সম্ভাবনা থাকে না
  • অফলাইনে আরও ভাল সহায়তা, কারণ আপনার SDK কনফিগারেশন ডাউনলোড করার জন্য ইন্টারনেট অ্যাক্সেস করার প্রয়োজন নেই।

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

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

আপনার প্রোটোটাইপ এবং টেস্ট অ্যাক্টিভিটিতে কল করা যায় এমন ব্যাকএন্ড ফাংশন থাকলে, 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-এ ফাংশন লগ চেক করতে পারেন।

লোকাল টেস্টিং এনভায়রনমেন্ট কনফিগার করা

আপনার ফাংশন dotenv-ভিত্তিক এনভায়রনমেন্ট কনফিগারেশন-এর উপর নির্ভর করলে, আপনি লোকাল টেস্টিং এনভায়রনমেন্টে সেই আচরণ এমুলেট করতে পারবেন।

লোকাল Cloud Functions এমুলেটর ব্যবহার করার সময়, আপনি .env.local ফাইল সেট-আপ করে আপনার প্রোজেক্টের জন্য এনভায়রনমেন্ট ভেরিয়েবল ওভাররাইড করতে পারবেন। .env.local-এর কন্টেন্ট .env এবং প্রোজেক্ট-নির্দিষ্ট .env ফাইলের চেয়ে বেশি অগ্রাধিকার পায়।

যেমন, কোনও প্রোজেক্টে এই তিনটি ফাইল থাকতে পারে, যেগুলিতে ডেভেলপমেন্ট ও লোকাল টেস্টিংয়ের জন্য সামান্য আলাদা ভ্যালু থাকে:

.env .env.dev .env.local

PLANET=Earth

AUDIENCE=Humans

AUDIENCE=Dev Humans AUDIENCE=Local Humans

লোকাল কন্টেক্সটে শুরু করা হলে, এমুলেটর এনভায়রনমেন্ট ভেরিয়েবল লোড করে, যেমন দেখানো হয়েছে:

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

Cloud Functions এমুলেটরে গোপন তথ্য ও ক্রেডেনশিয়াল

Cloud Functions এমুলেটর, সংবেদনশীল কনফিগারেশন তথ্য স্টোর ও অ্যাক্সেস করতে সিক্রেট ব্যবহার করার সুবিধা দেয়। ডিফল্ট হিসেবে, এমুলেটর অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করে আপনার প্রোডাকশন সিক্রেট অ্যাক্সেস করার চেষ্টা করে। CI এনভায়রনমেন্টের মতো কিছু পরিস্থিতিতে, অনুমতির উপর বিধিনিষেধ থাকার কারণে এমুলেটর হয়ত গোপন ভ্যালু অ্যাক্সেস করতে পারবে না।

এনভায়রনমেন্ট ভেরিয়েবেলের জন্য Cloud Functions এমুলেটর সাপোর্টের মতো, আপনি .secret.local ফাইল সেট-আপ করে সিক্রেট ভ্যালু ওভাররাইড করতে পারবেন। এর ফলে, আপনি সহজেই লোকালি আপনার ফাংশন পরীক্ষা করতে পারবেন, বিশেষ করে আপনার কাছে সিক্রেট ভ্যালুর অ্যাক্সেস না থাকলে।

Cloud Functions পরীক্ষা করার জন্য আর কী কী টুল আছে?

Cloud Functions এমুলেটর অন্যান্য প্রোটোটাইপ এবং টেস্ট টুলের মাধ্যমে পরিপূরক করা হয়:

  • Cloud Functions শেল, যা ইন্টার‍্যাক্টিভ, ইটারেটিভ ফাংশন প্রোটোটাইপিং ও ডেভেলপমেন্টের সুবিধা দেয়। শেলটি ডেভেলপমেন্টের জন্য REPL-স্টাইল ইন্টারফেস সহ Cloud Functions এমুলেটর ব্যবহার করে। Cloud Firestore বা Realtime Database এমুলেটরের সাথে কোনও ইন্টিগ্রেশন প্রদান করা হয় না। শেল ব্যবহার করে, আপনি ডেটা মক করেন এবং প্রোডাক্টের সাথে ইন্টার‍্যাকশন সিমুলেট করার জন্য ফাংশন কল করেন যা Local Emulator Suite বর্তমানে সাপোর্ট করে না: Analytics, Remote Config এবং Crashlytics.
  • Cloud Functions-এর জন্য Firebase Test SDK, ফাংশন ডেভেলপমেন্টের জন্য mocha ফ্রেমওয়ার্ক সহ Node.js। কার্যত, Cloud Functions টেস্ট SDK, Cloud Functions শেলের উপরে অটোমেশন প্রদান করে।

আপনি Cloud Functions শেল ও Cloud Functions Test SDK সম্পর্কে আরও জানতে পারবেন ইন্টার‍্যাক্টিভভাবে ফাংশন টেস্ট করুন এবং Cloud Functions-এর ইউনিট টেস্টিং থেকে।

Cloud Functions এমুলেটর কীভাবে প্রোডাকশন থেকে আলাদা

বেশিরভাগ ব্যবহারের ক্ষেত্রে Cloud Functions এমুলেটর প্রোডাকশন এনভায়রনমেন্টের খুব কাছাকাছি। Node রানটাইমের মধ্যে সবকিছু যাতে প্রোডাকশনের যতটা সম্ভব কাছাকাছি থাকে তা নিশ্চিত করার জন্য আমরা ব্যাপক কাজ করেছি। তবে, এমুলেটর সম্পূর্ণ কন্টেনারাইজড প্রোডাকশন এনভায়রনমেন্টের অনুকরণ করে না, তাই আপনার ফাংশন কোড বাস্তবসম্মতভাবে এক্সিকিউট হলেও, আপনার এনভায়রনমেন্টের অন্যান্য দিক (যেমন, লোকাল ফাইল, ফাংশন ক্র্যাশ করার পরে আচরণ ইত্যাদি) আলাদা হবে।

Cloud IAM

Firebase Emulator Suite, রান করার জন্য IAM-সম্পর্কিত কোনও আচরণ রেপ্লিকেট বা সম্মান করার চেষ্টা করে না। এমুলেটর Firebase নিরাপত্তা নিয়ম মেনে চলে, তবে যেসব পরিস্থিতিতে সাধারণত IAM ব্যবহার করা হয়, যেমন Cloud Functions-এর জন্য সার্ভিস অ্যাকাউন্ট ও তার অনুমতি সেট করা, সেইসব ক্ষেত্রে এমুলেটর কনফিগার করা যায় না এবং আপনার ডেভেলপার মেশিনে গ্লোবালি উপলভ্য অ্যাকাউন্ট ব্যবহার করবে, যা সরাসরি লোকাল স্ক্রিপ্ট রান করার মতো।

মেমরি ও প্রসেসর সংক্রান্ত বিধিনিষেধ

এমুলেটর আপনার ফাংশনের জন্য মেমরি বা প্রসেসর সংক্রান্ত বিধিনিষেধ প্রয়োগ করে না। তবে, এমুলেটর timeoutSeconds রানটাইম আর্গুমেন্টের মাধ্যমে টাইমিং আউট ফাংশন সাপোর্ট করে।

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

লোকাল ও প্রোডাকশন এনভায়রনমেন্টের মধ্যে পার্থক্যের জন্য পরিকল্পনা করা

যেহেতু এমুলেটর আপনার লোকাল মেশিনে চলে, তাই এটি অ্যাপ্লিকেশন এবং বিল্ট-ইন প্রোগ্রাম ও ইউটিলিটির জন্য আপনার লোকাল এনভায়রনমেন্টের উপর নির্ভর করে।

মনে রাখবেন যে Cloud Functions ডেভেলপমেন্টের জন্য আপনার লোকাল এনভায়রনমেন্ট Google প্রোডাকশন এনভায়রনমেন্টের থেকে আলাদা হতে পারে:

  • প্রোডাকশন এনভায়রনমেন্ট সিমুলেট করার জন্য আপনি লোকালি যেসব অ্যাপ্লিকেশন ইনস্টল করেন (যেমন, এই টিউটোরিয়াল থেকে ImageMagick) সেগুলি প্রোডাকশনের থেকে আলাদাভাবে কাজ করতে পারে, বিশেষ করে আপনার যদি অন্য কোনও ভার্সন প্রয়োজন হয় অথবা আপনি যদি Linux ছাড়া অন্য কোনও এনভায়রনমেন্টে ডেভেলপ করেন। আপনার ফাংশন ডেপ্লয় করার পাশাপাশি, অনুপস্থিত প্রোগ্রামের নিজস্ব বাইনারি কপি ডেপ্লয় করার কথা বিবেচনা করুন।

  • একইভাবে, বিল্ট-ইন ইউটিলিটি (যেমন, ls, mkdir-এর মতো শেল কমান্ড) প্রোডাকশনে উপলভ্য ভার্সনের থেকে আলাদা হতে পারে, বিশেষ করে আপনি যদি নন-Linux এনভায়রনমেন্টে (যেমন, macOS) ডেভেলপ করেন। আপনি এই সমস্যাটি সমাধান করতে পারেন নেটিভ কমান্ডের জন্য Node-অনলি বিকল্প ব্যবহার করে, অথবা আপনার ডিপ্লয়মেন্টের সাথে বান্ডেল করার জন্য Linux বাইনারি তৈরি করে।

পুনরায় চেষ্টা করা হচ্ছে

ব্যর্থ হলে Cloud Functions এমুলেটর ফাংশন আবার চেষ্টা করার সুবিধা দেয় না।

এরপর কী করতে হবে?