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

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

একটি ফায়ারবেস প্রজেক্ট বেছে নিন

Firebase Local Emulator Suite একটিমাত্র ফায়ারবেস প্রোজেক্টের প্রোডাক্টগুলোকে এমুলেট করে।

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

Local Emulator Suite বাস্তব ফায়ারবেস প্রজেক্ট এবং ডেমো প্রজেক্টের এমুলেশন সমর্থন করে।

প্রকল্পের ধরণ বৈশিষ্ট্য এমুলেটরের সাথে ব্যবহার করুন
বাস্তব

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

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

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

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

ডেমো

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

ডেমো প্রজেক্টগুলোর আইডির শুরুতে demo- উপসর্গটি থাকে।

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

আমরা আপনাকে যথাসম্ভব ডেমো প্রজেক্ট ব্যবহার করার পরামর্শ দিই। এর সুবিধাগুলোর মধ্যে রয়েছে:

  • সেটআপ করা সহজ, কারণ কোনো 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);
সুইফট
Functions.functions().useEmulator(withHost: "localhost", port: 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 এমুলেটর
  • ফায়ারবেস অ্যালার্ট এমুলেটর

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

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

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

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

ইভেন্টআর্ক এমুলেটর চালু থাকলে, Cloud Functions রানটাইম বর্তমান প্রসেসে EVENTARC_EMULATOR এনভায়রনমেন্ট ভেরিয়েবলটিকে localhost:9299 এ সেট করে। EVENTARC_EMULATOR এনভায়রনমেন্ট ভেরিয়েবলটি সেট করা থাকলে Firebase Admin SDK স্বয়ংক্রিয়ভাবে ইভেন্টআর্ক এমুলেটরের সাথে সংযুক্ত হয়। 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
গ্রহ=পৃথিবী

দর্শক = মানুষ

দর্শক = ডেভ মানুষ দর্শক = স্থানীয় মানুষ

স্থানীয় প্রেক্ষাপটে চালু করা হলে, এমুলেটরটি দেখানো অনুযায়ী এনভায়রনমেন্ট ভেরিয়েবলগুলো লোড করে:

  $ 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 এমুলেটরটির পাশাপাশি অন্যান্য প্রোটোটাইপ এবং পরীক্ষার সরঞ্জামও রয়েছে:

  • ক্লাউড ফাংশনস শেল, যা ইন্টারেক্টিভ ও পুনরাবৃত্তিমূলক ফাংশন প্রোটোটাইপিং এবং ডেভেলপমেন্টের সুযোগ দেয়। এই শেলটি ডেভেলপমেন্টের জন্য একটি REPL-স্টাইলের ইন্টারফেসসহ ক্লাউড ফাংশনস এমুলেটর ব্যবহার করে। Cloud Firestore বা Realtime Database এমুলেটরের সাথে কোনো ইন্টিগ্রেশন প্রদান করা হয় না। এই শেল ব্যবহার করে, আপনি ডেটা মক করতে এবং ফাংশন কল সম্পাদন করতে পারেন, যা Local Emulator Suite বর্তমানে সমর্থন করে না এমন প্রোডাক্টগুলোর সাথে ইন্টারঅ্যাকশন অনুকরণ করে: যেমন অ্যানালিটিক্স, রিমোট কনফিগ এবং ক্র্যাশলিটিক্স।
  • ক্লাউড ফাংশনস-এর জন্য ফায়ারবেস টেস্ট এসডিকে হলো ফাংশন ডেভেলপমেন্টের জন্য মোকা ফ্রেমওয়ার্কসহ একটি নোড.জেএস ভিত্তিক টুল। প্রকৃতপক্ষে, ক্লাউড ফাংশনস টেস্ট এসডিকে ক্লাউড ফাংশনস শেলের উপরে অটোমেশন প্রদান করে।

আপনি “Test functions interactively” এবং “Unit testing of Cloud Functions” থেকে Cloud Functions shell এবং Cloud Functions Test SDK সম্পর্কে আরও জানতে পারবেন।

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

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

ক্লাউড আইএএম

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

মেমরি এবং প্রসেসরের সীমাবদ্ধতা

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

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

স্থানীয় এবং উৎপাদন পরিবেশের পার্থক্যের জন্য পরিকল্পনা

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

মনে রাখবেন যে Cloud Functions ডেভেলপমেন্টের জন্য আপনার স্থানীয় পরিবেশ গুগলের প্রোডাকশন পরিবেশ থেকে ভিন্ন হতে পারে:

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

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

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

ক্লাউড ফাংশনস এমুলেটর ব্যর্থতার ক্ষেত্রে ফাংশন পুনরায় চেষ্টা করা সমর্থন করে না।

এরপর কী?