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

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

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

Firebase Local Emulator Suite একটি একক Firebase প্রকল্পের জন্য পণ্য অনুকরণ করে।

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

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

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

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

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

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

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

ডেমো

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

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

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

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

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

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

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

যদি আপনার প্রোটোটাইপ এবং পরীক্ষামূলক ক্রিয়াকলাপগুলি কলযোগ্য ব্যাকএন্ড ফাংশন জড়িত থাকে, Cloud Functions for 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().useFunctionsEmulator(origin: "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 ফাংশন নিম্নলিখিত 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 এমুলেটর Eventarc ট্রিগার সমর্থন করার জন্য Eventarc এমুলেটরের সাথে জোড়া।

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

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

AUDIENCE=মানুষ

AUDIENCE=দেব মানুষ AUDIENCE=স্থানীয় মানুষ

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

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

Cloud Functions এমুলেটরে গোপনীয়তা এবং প্রমাণপত্রাদি

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

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

Cloud Functions পরীক্ষা করার জন্য অন্য কোন সরঞ্জাম বিদ্যমান?

Cloud Functions এমুলেটর অন্যান্য প্রোটোটাইপ এবং পরীক্ষার সরঞ্জাম দ্বারা পরিপূরক:

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

আপনি ক্লাউড ফাংশন শেল এবং ক্লাউড ফাংশন টেস্ট SDK সম্পর্কে ইন্টারেক্টিভভাবে টেস্ট ফাংশন এবং ক্লাউড ফাংশনগুলির ইউনিট টেস্টিং সম্পর্কে আরও জানতে পারেন৷

কিভাবে Cloud Functions এমুলেটর উৎপাদন থেকে আলাদা

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

ক্লাউড আইএএম

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

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

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

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

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

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

সচেতন থাকুন যে Cloud Functions বিকাশের জন্য আপনার স্থানীয় পরিবেশ Google উত্পাদন পরিবেশ থেকে আলাদা হতে পারে:

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

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

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

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

এরপর কি?