Firebase Cloud Functions একটি পরিচালিত Node.js পরিবেশে কোড কার্যকর করার জন্য একটি সার্ভার-সাইড প্ল্যাটফর্ম, যা Firebase ইভেন্ট, HTTPS অনুরোধ এবং Google ক্লাউড পরিষেবাগুলিতে পরিবর্তনের প্রতি সাড়া দেয়। ঐতিহ্যবাহী ব্যাকএন্ডের বিপরীতে, ডেভেলপারকে সার্ভার কনফিগার করতে, ওয়েব সার্ভার ইনস্টল করতে বা স্কেলিং নিয়ে চিন্তা করতে হয় না — প্রতিটি ফাংশন একটি বিচ্ছিন্ন কন্টেইনারে চলে এবং স্বয়ংক্রিয়ভাবে প্রয়োজনীয় সংস্থান পায়। Google Firebase (2026) অনুসারে, প্ল্যাটফর্মটি প্রতিদিন 2 বিলিয়নেরও বেশি ফাংশন কল প্রক্রিয়া করে, লক্ষ লক্ষ মোবাইল অ্যাপ্লিকেশনের জন্য সার্ভারহীন আর্কিটেকচার প্রদান করে।
মূল বিষয়সমূহ
Firebase Cloud Functions হল একটি কম্পিউটিং প্ল্যাটফর্ম যা Google Cloud Functions (GCF)-এর উপর নির্মিত, Firebase ইকোসিস্টেমের জন্য অভিযোজিত। ফাংশনগুলি হল সাধারণ JavaScript বা TypeScript কোড যা একটি মডিউল থেকে রপ্তানি করা হয় এবং একটি নির্দিষ্ট ইভেন্ট প্রকারের জন্য নিবন্ধিত হয়। যখন কোনো ইভেন্ট ঘটে (উদাহরণস্বরূপ, একজন ব্যবহারকারী নিবন্ধন করে বা একটি ফাইল আপলোড করে), Firebase Cloud Functions সংশ্লিষ্ট কোড চালায়, তাকে ইভেন্টের প্রসঙ্গ প্রদান করে।
Cloud Functions-এর আর্কিটেকচার একক দায়িত্ব নীতি অনুসরণ করে: একটি ফাংশন একটি ইভেন্ট প্রকার পরিচালনা করে এবং একটি পারমাণবিক অপারেশন সম্পাদন করে। উদাহরণস্বরূপ, sendWelcomeEmail ফাংশনটি Firebase Authentication-এ নতুন ব্যবহারকারী তৈরি হলে ট্রিগার হয় এবং একটি স্বাগতম ইমেল পাঠায়। এই বিচ্ছিন্নতা ডিবাগিং, পরীক্ষণ এবং বিভিন্ন প্রকল্পে ফাংশন পুনরায় ব্যবহার করা সহজ করে।
প্রতিটি ফাংশন একটি অস্থায়ী জীবনচক্র সহ একটি বিচ্ছিন্ন কন্টেইনারে চলে। সর্বাধিক কার্যকর করার সময় ডিফল্টরূপে 60 সেকেন্ড (HTTPS ফাংশন — 9 মিনিট)। যদি কোনো ফাংশন টাইমআউটের মধ্যে সম্পূর্ণ না হয়, তবে অনুরোধটি 500 ত্রুটি সহ ব্যর্থ হয়। দীর্ঘমেয়াদী অপারেশনের জন্য, পুনরায় চেষ্টা সহ Cloud Tasks বা Pub/Sub ব্যবহার করুন। কন্টেইনারগুলি পরবর্তী কলের জন্য পুনরায় ব্যবহার করা যেতে পারে (keep-alive), যা প্রথম কলের পরে কোল্ড স্টার্টে লেটেন্সি হ্রাস করে।
Firebase Cloud Functions একাধিক Node.js সংস্করণ সমর্থন করে: 18, 20 এবং 22 (নতুন প্রকল্পের জন্য সুপারিশকৃত)। সংস্করণটি package.json ফাইলের engines ফিল্ডে নির্দিষ্ট করা হয়। Firebase CLI নির্দিষ্ট সংস্করণের ভিত্তিতে স্বয়ংক্রিয়ভাবে রানটাইম পরিবেশ কনফিগার করে। গুরুত্বপূর্ণ: Firebase Cloud Functions ইচ্ছামত Docker কন্টেইনার চালানো সমর্থন করে না — পরিবেশটি Google Cloud Functions দ্বারা কঠোরভাবে নির্ধারিত।
নতুন প্রকল্পের জন্য, Node.js 22 সুপারিশ করা হয়, কারণ এতে সর্বশেষ V8 অপ্টিমাইজেশন, উন্নত ESM মডিউল সমর্থন এবং প্ল্যাটফর্ম স্তরে WebSocket সমর্থন অন্তর্ভুক্ত রয়েছে। যদি কোনো প্রকল্প নির্দিষ্ট Node সংস্করণের জন্য নির্মিত নির্ভরতা ব্যবহার করে (যেমন, নেটিভ C++ মডিউল), তবে সামঞ্জস্যতা পৃথকভাবে পরীক্ষা করা উচিত — সমস্ত নেটিভ মডিউল GCF পরিবেশে কম্পাইল হয় না।
Firebase Cloud Functions হল Google Cloud Functions-এর উপর একটি মোড়ক যাতে প্রি-ইনস্টল করা Firebase SDK এবং Firebase পরিষেবাগুলির সাথে একীকরণ রয়েছে। ডেভেলপার firebase-functions SDK ব্যবহার করে কোড লেখে, যা সমস্ত Firebase পরিষেবার জন্য টাইপ করা ট্রিগার প্রদান করে। Google Cloud Functions একটি নিম্ন-স্তরের প্ল্যাটফর্ম যেখানে ট্রিগারগুলি Eventarc বা Pub/Sub-এর মাধ্যমে স্পষ্টভাবে কনফিগার করা হয়।
মূল পার্থক্য: Firebase Cloud Functions-এ, একটি ট্রিগার functions.firestore.document('path').onWrite()-এর মাধ্যমে ঘোষণামূলকভাবে নিবন্ধিত হয়, যখন Google Cloud Functions-এ এটি ইভেন্ট অ্যাট্রিবিউট ফিল্টারিং সহ Eventarc-এর মাধ্যমে কনফিগার করা হয়। Firebase Cloud Functions প্রকল্পের পরিষেবা অ্যাকাউন্টের credentials সহ স্বয়ংক্রিয়ভাবে আরম্ভ করা Admin SDK-এর সাথেও আসে, যা অতিরিক্ত সেটআপ ছাড়াই সমস্ত Firebase পরিষেবাগুলিতে সম্পূর্ণ অ্যাক্সেস প্রদান করে।
Firebase Cloud Functions 8টি বিভাগের ট্রিগার সমর্থন করে, প্রতিটি একটি নির্দিষ্ট Firebase বা Google Cloud পরিষেবার সাথে সম্পর্কিত। ট্রিগার হল একটি শর্ত যা পূরণ হলে স্বয়ংক্রিয়ভাবে একটি ফাংশন আহ্বান করে। ডেভেলপার সরাসরি ফাংশনের জীবনচক্র পরিচালনা করেন না: Firebase CLI Google Cloud Eventarc-এ ট্রিগার নিবন্ধন করে, এবং ক্লাউড প্ল্যাটফর্ম ইভেন্ট ঘটলে ফাংশন চালায়।
সবচেয়ে জনপ্রিয় ট্রিগারগুলি হল Firestore ট্রিগার: onWrite, onCreate, onUpdate, onDelete। এগুলি Firestore সংগ্রহে ডকুমেন্ট পরিবর্তন হলে সক্রিয় হয়। ফাংশনটি পরিবর্তনের আগে এবং পরে ডকুমেন্টের স্ন্যাপশট পায়, যা মান তুলনা করতে এবং শুধুমাত্র নির্দিষ্ট পরিবর্তনের প্রতি সাড়া দিতে দেয়। উদাহরণস্বরূপ, যখন একটি অর্ডারের স্থিতি “বিচারাধীন” থেকে “প্রেরিত”-এ পরিবর্তিত হয়, তখন ব্যবহারকারীকে একটি পুশ বিজ্ঞপ্তি পাঠানো যেতে পারে।
Authentication ট্রিগার (onCreate, onDelete) ব্যবহারকারী অ্যাকাউন্ট তৈরি বা মুছে ফেলা হলে সক্রিয় হয়। এগুলি ব্যবহারকারী ডেটা আরম্ভ করার জন্য ব্যবহৃত হয়: Firestore-এ ব্যবহারকারী ডকুমেন্ট তৈরি করা, স্বাগতম ইমেল পাঠানো, বিশ্লেষণে লেখা। মনে রাখবেন: ফাংশন ব্যবহারকারী তৈরি বাতিল করতে পারে না — এটি অ্যাকাউন্ট ইতিমধ্যে তৈরি হওয়ার পরে কার্যকর হয়। প্রি-ভ্যালিডেশনের জন্য, Identity Platform-এ উপলব্ধ Blocking Functions ব্যবহার করুন।
| ট্রিগার বিভাগ | ইভেন্ট | ব্যবহারের উদাহরণ |
|---|---|---|
| Firestore | onWrite, onCreate, onUpdate, onDelete | লাইক যোগ করলে লাইক কাউন্টার আপডেট করা |
| Authentication | onCreate, onDelete | নিবন্ধনে ব্যবহারকারী প্রোফাইল তৈরি করা |
| Realtime DB | onWrite, onCreate, onUpdate, onDelete | চ্যাট বার্তা মডারেশন |
| Storage | onFinalize, onArchive, onDelete | ছবি আপলোডের পর থাম্বনেইল জেনারেট করা |
| Pub/Sub | onPublish | Cloud Scheduler-এর মাধ্যমে নির্ধারিত কার্যকরীকরণ (cron) |
| HTTPS | onRequest | বহিরাগত পরিষেবার জন্য REST API এন্ডপয়েন্ট |
HTTPS ফাংশন (onRequest) HTTP-এর মাধ্যমে অ্যাক্সেসযোগ্য সম্পূর্ণ REST API এন্ডপয়েন্ট তৈরি করার অনুমতি দেয়। ইভেন্ট-চালিত ট্রিগারের বিপরীতে, HTTPS ফাংশন https://{region}-{project}.cloudfunctions.net/{functionName} ফর্মের URL-এর মাধ্যমে আহ্বান করা হয়। যদি এন্ডপয়েন্টটি ব্রাউজার বা মোবাইল অ্যাপ্লিকেশন থেকে আহ্বান করা হয় তবে CORS সঠিকভাবে কনফিগার করা গুরুত্বপূর্ণ। Firebase SDK স্বয়ংক্রিয়ভাবে CORS হেডার অন্তর্ভুক্ত করে না — এগুলি মিডলওয়্যারের মাধ্যমে ম্যানুয়ালি যোগ করতে হবে।
মোবাইল ক্লায়েন্ট (Android, iOS)-এর জন্য, CORS প্রয়োজন নেই কারণ নেটিভ HTTP ক্লায়েন্টগুলি ক্রস-অরিজিন নীতি দ্বারা সীমাবদ্ধ নয়। CORS শুধুমাত্র ওয়েব অনুরোধের জন্য প্রাসঙ্গিক। যদি আপনার HTTPS ফাংশন অ্যাপ এবং ওয়েব উভয় থেকে আহ্বান করা হয়, তাহলে ইউনিভার্সাল CORS হ্যান্ডলিং যোগ করুন: ডেভেলপমেন্টের জন্য res.set('Access-Control-Allow-Origin', '*') বা প্রোডাকশনের জন্য অনুমোদিত ডোমেনের তালিকা।
পর্যায়ক্রমিক কার্যকরীকরণ (cron কাজ) জন্য, Cloud Scheduler এবং Pub/Sub-এর সংমিশ্রণ ব্যবহার করুন। Cloud Scheduler একটি শিডিউলে Pub/Sub টপিকে একটি বার্তা পাঠায়, এবং Cloud Functions-এর onPublish ট্রিগার সেই বার্তাটি প্রক্রিয়া করে। Firebase CLI সরাসরি cron সিনট্যাক্স সমর্থন করে না — শিডিউল Google Cloud কনসোল বা Terraform-এর মাধ্যমে unix-cron ফর্ম্যাটে কনফিগার করা হয়: 0 3 * * * (প্রতিদিন 3:00 এ)।
উদাহরণ কাজ: দৈনিক নিউজলেটার, পুরানো ডেটা পরিষ্কার করা, রিপোর্ট জেনারেট করা, বাহ্যিক API-এর সাথে সিঙ্ক্রোনাইজেশন। গুরুত্বপূর্ণ: Cloud Scheduler একটি প্রদত্ত Google Cloud পরিষেবা (প্রতি কাজ প্রতি মাসে প্রায় $2)। প্রতিটি সক্রিয়করণ একটি পৃথক ফাংশন কল হিসাবে গণনা করা হয় এবং মানক Cloud Functions হারে বিল করা হয়।
Cloud Functions ডেভেলপমেন্ট Firebase CLI-এর মাধ্যমে প্রকল্প আরম্ভ করার মাধ্যমে শুরু হয়: firebase init functions। এই কমান্ডটি index.js (বা index.ts) টেমপ্লেট, package.json ফাইল এবং TypeScript কনফিগারেশন (যদি নির্বাচিত হয়) সহ একটি functions/ ডিরেক্টরি তৈরি করে। আরম্ভ করার পর, শুধু একটি ফাংশন লিখুন, এটি মডিউল থেকে রপ্তানি করুন এবং ডিপ্লয় করতে firebase deploy --only functions চালান।
প্রতিটি ফাংশন উপযুক্ত ট্রিগার পদ্ধতি কল করে নিবন্ধিত হয়। HTTPS ফাংশনের উদাহরণ: exports.helloWorld = functions.https.onRequest((req, res) => { res.send(“Hello!”); })। Firebase Functions একটি অ্যাসিঙ্ক্রোনাস মডেল ব্যবহার করে: ইভেন্ট-চালিত ট্রিগার (নন-HTTPS)-এর জন্য, ফাংশনটিকে একটি Promise ফেরত দিতে হবে। কন্টেইনার শেষ করার আগে Firebase Promise সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে। যদি Promise ফেরত না দেওয়া হয়, তবে অ্যাসিঙ্ক্রোনাস অপারেশন শেষ হওয়ার আগেই ফাংশনটি শেষ হয়ে যেতে পারে।
স্থানীয় ডেভেলপমেন্ট Firebase Emulator Suite-এর মাধ্যমে করা হয়, যাতে একটি Cloud Functions এমুলেটর অন্তর্ভুক্ত রয়েছে। firebase emulators:start কমান্ডটি http://localhost:5001-এ অ্যাক্সেসযোগ্য ফাংশন সহ একটি স্থানীয় সার্ভার শুরু করে। এমুলেটর কোড পরিবর্তনের সময় হট রিলোড সমর্থন করে এবং উৎপাদন পরিবেশ থেকে সম্পূর্ণ বিচ্ছিন্ন, যা বাস্তব ডেটার ঝুঁকি ছাড়াই পরীক্ষার অনুমতি দেয়।
নির্ভরতা Cloud Functions-এর জন্য package.json-এর মাধ্যমে পরিচালিত হয়। Firebase শুধুমাত্র উৎপাদন নির্ভরতা (dependencies, devDependencies নয়) ইনস্টল করে। ফাংশন প্যাকেজের আকার কোল্ড স্টার্ট সময়কে প্রভাবিত করে: নির্ভরতার সংখ্যা কমানোর সুপারিশ করা হয়। Firebase Admin SDK-এর জন্য firebase-admin নির্ভরতা প্রি-ইনস্টল করা আছে — এটি ম্যানুয়ালি যোগ করার প্রয়োজন নেই।
গোপনীয় ডেটা (API কী, টোকেন) ফাংশন কোডে সংরক্ষণ করা উচিত নয়। কনফিগারেশন সংরক্ষণের জন্য functions.config() ব্যবহার করুন: firebase functions:config:set stripe.key=“sk_...”। মানগুলি এনক্রিপ্ট করা হয় এবং functions.config().stripe.key-এর মাধ্যমে রানটাইমে উপলব্ধ। বড় সিরিয়ালাইজড কনফিগারেশনের জন্য, Google Cloud Secret Manager ব্যবহার করুন।
লগিং Cloud Functions-এ console.log, console.warn এবং console.error-এর মাধ্যমে করা হয়। সমস্ত লগ স্বয়ংক্রিয়ভাবে Google Cloud Logging-এ সংগ্রহ করা হয় এবং Firebase কনসোলে (Functions > Logs) উপলব্ধ। কাঠামোগত লগিংয়ের জন্য, winston বা pino লাইব্রেরি ব্যবহার করুন, যা JSON ফর্ম্যাটিং এবং লগ স্তর সমর্থন করে।
ত্রুটি পরিচালনা নির্ভরযোগ্যতার জন্য অত্যন্ত গুরুত্বপূর্ণ: Promise-এ একটি অনিয়ন্ত্রিত ব্যতিক্রম ফাংশনটিকে ত্রুটি সহ শেষ করে, তারপরে Firebase স্বয়ংক্রিয়ভাবে এক্সপোনেনশিয়াল ব্যাকঅফ সহ পুনরায় চেষ্টা করে। পুনরায় চেষ্টার সংখ্যা কনফিগারযোগ্য: 0 থেকে অসীম পর্যন্ত। ইভেন্ট-চালিত ট্রিগারের জন্য, অস্থায়ী বাহ্যিক পরিষেবা ব্যর্থতার সময়ও প্রতিটি ইভেন্ট প্রক্রিয়াকরণ নিশ্চিত করতে পুনরায় চেষ্টা সক্ষম করার সুপারিশ করা হয়।
কোল্ড স্টার্ট (cold start) হল নিষ্ক্রিয়তার সময়ের পরে ফাংশনের প্রথম আহ্বানে বিলম্ব, যখন কোড সহ কন্টেইনারটি আবার লোড এবং আরম্ভ করা হয়। Firebase ডকুমেন্টেশন (2026) অনুসারে, কোল্ড স্টার্ট প্যাকেজের আকার, নির্ভরতার সংখ্যা এবং অঞ্চলের উপর নির্ভর করে 200 মিলিসেকেন্ড থেকে 2 সেকেন্ড পর্যন্ত সময় নেয়। ব্যবহারকারী ইন্টারফেসের জন্য, 1 সেকেন্ডের বেশি বিলম্ব লক্ষণীয় এবং ব্যবহারকারীর অভিজ্ঞতাকে প্রভাবিত করতে পারে।
কোল্ড স্টার্ট কমানোর উপায়: নির্ভরতা কমান, CommonJS-এ কম্পাইল করা TypeScript ব্যবহার করুন, ফাংশন প্যাকেজের আকার হ্রাস করুন, সক্রিয় ইনস্ট্যান্সের ন্যূনতম সংখ্যা নির্ধারণ করুন। Firebase Cloud Functions v2 (দ্বিতীয় প্রজন্ম) minInstances সেট করার অনুমতি দেয় — সর্বদা অনুরোধ প্রক্রিয়াকরণের জন্য প্রস্তুত উষ্ণ কন্টেইনারের ন্যূনতম সংখ্যা। কন্টেইনার উষ্ণ রাখার জন্য নিষ্ক্রিয় সময়ের জন্য চার্জ প্রযোজ্য।
স্কেলিং Cloud Functions-এ স্বয়ংক্রিয়ভাবে ঘটে: অনুরোধের পরিমাণ বাড়লে, Firebase নতুন কন্টেইনার তৈরি করে। ডিফল্টরূপে, সমান্তরাল ইনস্ট্যান্সের সর্বাধিক সংখ্যা 3000 (Google Cloud প্রকল্প কোটা)। প্রতিটি ইনস্ট্যান্স একসাথে একটি অনুরোধ পরিচালনা করে। যদি একটি ফাংশন দ্রুত হয় (100 মিলিসেকেন্ডের কম), একটি ইনস্ট্যান্স প্রতি সেকেন্ডে 10টি অনুরোধ পর্যন্ত পরিচালনা করতে পারে, যা প্রতি প্রকল্পে প্রতি সেকেন্ডে 30,000 অনুরোধ পর্যন্ত পিক থ্রুপুট প্রদান করে।
minInstances হল একটি প্যারামিটার যা নির্দিষ্ট সংখ্যক কন্টেইনার সংরক্ষণ করে এবং সেগুলিকে উষ্ণ রাখে। এটি গুরুত্বপূর্ণ HTTPS ফাংশনের জন্য সুপারিশ করা হয় যেখানে কোল্ড স্টার্ট লেটেন্সি অগ্রহণযোগ্য। উদাহরণস্বরূপ, একটি প্রমাণীকরণ এন্ডপয়েন্টের জন্য, minInstances: 1 সেট করুন। maxInstances সমান্তরাল ইনস্ট্যান্সের সর্বাধিক সংখ্যা সীমাবদ্ধ করে, যা হঠাৎ ট্রাফিক স্পাইকের সময় অনিয়ন্ত্রিত খরচ বৃদ্ধি রোধে কার্যকর।
কনফিগারেশন কোডে করা হয়: functions.runWith({ minInstances: 1, maxInstances: 10 })। গুরুত্বপূর্ণ: minInstances খরচ বাড়ায় কারণ কন্টেইনারগুলি ক্রমাগত চলতে থাকে। পরীক্ষামূলক প্রকল্পের জন্য, minInstances নিষ্ক্রিয় করা উচিত। উৎপাদনের জন্য, সমস্ত পাবলিক HTTPS ফাংশনের জন্য minInstances এবং ইভেন্ট-চালিত ট্রিগারের জন্য 0 সুপারিশ করা হয় যেখানে 1 সেকেন্ডের বিলম্ব গুরুত্বপূর্ণ নয়।
ডিপ্লয়মেন্ট অঞ্চল শেষ ব্যবহারকারীদের জন্য লেটেন্সি এবং আউটগোয়িং ট্রাফিকের খরচ প্রভাবিত করে। Firebase Cloud Functions 30+ Google Cloud অঞ্চলে উপলব্ধ। মোবাইল অ্যাপ্লিকেশনের জন্য, আপনার লক্ষ্য দর্শকের নিকটতম অঞ্চল নির্বাচন করুন: আমেরিকার জন্য us-central1, ইউরোপের জন্য europe-west1, এশিয়ার জন্য asia-east2। ফাংশন পুনরায় ডিপ্লয় না করে অঞ্চল পরিবর্তন করা যায় না।
অঞ্চল পরিবর্তন কোডে region প্যারামিটারের মাধ্যমে করা হয়: functions.region('europe-west1')। একটি ফাইলের সমস্ত ফাংশনের বিভিন্ন অঞ্চল থাকতে পারে। বিশ্বব্যাপী প্রকল্পের জন্য, একাধিক অঞ্চলে ফাংশন ডিপ্লয় করার এবং ট্রাফিক বিতরণের জন্য Cloud Load Balancing ব্যবহার করার সুপারিশ করা হয়, যদিও বেশিরভাগ মোবাইল অ্যাপ্লিকেশনের জন্য সঠিকভাবে নির্বাচিত হলে একটি অঞ্চল যথেষ্ট।
আসুন TypeScript-এ Cloud Functions-এর ব্যবহারিক উদাহরণ দেখি। কোডটি ES মডিউল সিনট্যাক্স সহ Firebase Functions SDK v2 (দ্বিতীয় প্রজন্ম) ব্যবহার করে। উদাহরণগুলির মধ্যে ব্যবহারকারী তৈরি ইভেন্ট পরিচালনা, ছবি আপলোডে থাম্বনেইল জেনারেট করা এবং REST API-এর জন্য একটি সাধারণ HTTPS এন্ডপয়েন্ট অন্তর্ভুক্ত রয়েছে। সমস্ত ফাংশন অ্যাসিঙ্ক্রোনাস এবং সঠিক কন্টেইনার সমাপ্তির জন্য Promise ফেরত দেয়।
চালানোর আগে, নিশ্চিত করুন যে Firebase CLI সংস্করণ 13+ এ আপডেট করা হয়েছে: npm install -g firebase-tools। ফাংশন v2-এর জন্য Blaze মূল্য পরিকল্পনা প্রয়োজন। আরম্ভ করা: TypeScript নির্বাচিত সহ firebase init functions।
প্রথম উদাহরণ — যখন একজন নতুন ব্যবহারকারী নিবন্ধন করে তখন Firestore-এ একটি ডকুমেন্ট তৈরি করা। ফাংশনটি auth.user().onCreate ইভেন্ট দ্বারা ট্রিগার হয় এবং users/{uid} সংগ্রহে একটি মৌলিক প্রোফাইল লেখে। এটি নিশ্চিত করে যে প্রতিটি নিবন্ধিত ব্যবহারকারীর প্রয়োজনীয় ফিল্ড সহ একটি ডকুমেন্ট রয়েছে।
import * as functions from "firebase-functions"
import * as admin from "firebase-admin"
admin.initializeApp()
export const createUserProfile = functions.auth
.user()
.onCreate(async (user) => {
const profile = {
email: user.email,
displayName: user.displayName ?? "User",
createdAt: admin.firestore.Timestamp.now(),
role: "free",
avatarUrl: null,
}
await admin.firestore()
.collection("users")
.doc(user.uid)
.set(profile)
console.log(`Profile created for ${user.uid}`)
})
createUserProfile ফাংশনটি অ্যাসিঙ্ক্রোনাস — এটি একটি Promise ফেরত দেয় যা Firebase সমাপ্তির আগে অপেক্ষা করে। যদি Firestore-এ লেখা ব্যর্থ হয় (উদাহরণস্বরূপ, অপর্যাপ্ত অনুমতির কারণে), ফাংশনটি স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা হবে (যদি পুনরায় চেষ্টা সক্ষম থাকে)। “free” মান সহ role ফিল্ডটি resource.data.role-কে প্রয়োজনীয় অ্যাক্সেস স্তরের সাথে তুলনা করে সরাসরি Firestore Security Rules-এ বিনামূল্যের পরিকল্পনার সীমাবদ্ধতা প্রয়োগ করার অনুমতি দেয়।
দ্বিতীয় উদাহরণ — একটি ছবি আপলোড হওয়ার পরে স্বয়ংক্রিয়ভাবে থাম্বনেইল জেনারেট করার জন্য একটি Storage ট্রিগার। ফাংশনটি 200×200 পিক্সেলের একটি হ্রাসকৃত কপি তৈরি করে এবং thumb_ উপসর্গ সহ মূল ফাইলের পাথে এটি সংরক্ষণ করে। ছবি প্রক্রিয়াকরণ sharp লাইব্রেরি ব্যবহার করে, যা সমস্ত সাধারণ ফর্ম্যাট সমর্থন করে এবং সিস্টেম নির্ভরতা ছাড়াই Node.js পরিবেশে কাজ করে।
import * as path from "path"
import * as os from "os"
import * as sharp from "sharp"
export const generateThumbnail = functions.storage
.object()
.onFinalize(async (object) => {
if (!object.contentType?.startsWith("image/")) return
const filePath = object.name!
const thumbPath = filePath.replace(
/(\.\w+)$/, "_thumb$1"
)
const bucket = admin.storage().bucket()
const tempDir = os.tmpdir()
const tempFile = path.join(tempDir, path.basename(filePath))
await bucket.file(filePath).download({ destination: tempFile })
await sharp(tempFile)
.resize(200, 200, { fit: "cover" })
.toFile(tempFile.replace(/(\.\w+)$/, "_thumb$1"))
await bucket.upload(tempFile.replace(
/(\.\w+)$/, "_thumb$1"
), { destination: thumbPath })
})
generateThumbnail ফাংশনটি অবজেক্টের Content-Type পরীক্ষা করে এবং নন-ইমেজ উপেক্ষা করে, যা সম্পদ সংরক্ষণ করে। sharp ব্যবহার করতে, নির্ভরতাটি package.json-এ যোগ করতে হবে। থাম্বনেইল fit: “cover” প্যারামিটার দিয়ে তৈরি করা হয়, যা ছবিটিকে কেন্দ্র থেকে 200×200 পিক্সেল বর্গে ক্রপ করে। তৈরি হওয়ার পরে, থাম্বনেইলটি পরিবর্তিত নাম সহ একই বাকেটে ফিরিয়ে আপলোড করা হয়।
তৃতীয় উদাহরণ — একটি HTTPS ফাংশন যা সার্ভার স্থিতি পরীক্ষার জন্য একটি REST API এন্ডপয়েন্ট প্রয়োগ করে। ফাংশনটি একটি GET অনুরোধ গ্রহণ করে এবং প্রকল্পের সাথে সংযুক্ত Firebase পরিষেবাগুলির অবস্থা সম্পর্কে JSON ফেরত দেয়। এই এন্ডপয়েন্টটি মনিটরিং এবং বাহ্যিক সিস্টেমের জন্য দরকারী যা ডেটা পাঠানোর আগে ব্যাকএন্ডের প্রাপ্যতা যাচাই করতে হবে।
import * as express from "express"
const app = express.Router()
app.get("/status", async (req, res) => {
try {
const db = admin.firestore()
await db.collection("_health").doc("check").get()
res.json({ status: "ok", timestamp: Date.now() })
} catch (error) {
res.status(503).json({ status: "error", message: error })
}
})
export const api = functions.https.onRequest(app)
api ফাংশনটি রাউটিংয়ের জন্য express Router ব্যবহার করে, যা একটি ফাংশনে একাধিক এন্ডপয়েন্ট তৈরি করার সময় সুবিধাজনক। হেলথ চেক _health সংগ্রহে Firestore-এ লেখে, যা একসাথে Firestore-এর প্রাপ্যতা যাচাই করার অনুমতি দেয়। উৎপাদনের জন্য, পাবলিক এন্ডপয়েন্টের অপব্যবহার রোধ করতে API কী বা Firebase Auth টোকেনের মাধ্যমে অনুরোধ প্রমাণীকরণ যোগ করার সুপারিশ করা হয়।
Cloud Functions সাধারণত এমন কাজের জন্য ব্যবহৃত হয় যা ক্লায়েন্টে করা সম্ভব বা উচিত নয়: পুশ বিজ্ঞপ্তি পাঠানো, আপলোড করা ছবির পূর্বরূপ জেনারেট করা, বাহ্যিক পেমেন্ট সিস্টেমের সাথে একীকরণ, বিষয়বস্তু মডারেশন, Firebase এবং তৃতীয়-পক্ষের পরিষেবাগুলির মধ্যে ডেটা সিঙ্ক্রোনাইজেশন। সার্ভারহীন মডেল এই কাজগুলিকে সাশ্রয়ী করে তোলে: আপনি শুধুমাত্র প্রকৃত কোড নির্বাহের সময়ের জন্য অর্থ প্রদান করেন।
পেমেন্ট সিস্টেম ইন্টিগ্রেশন ইন-অ্যাপ কেনাকাটা সহ অ্যাপগুলির জন্য একটি সাধারণ দৃশ্যকল্প। Cloud Functions পেমেন্ট প্রদানকারী (Stripe, PayPal) থেকে একটি ওয়েবহুক গ্রহণ করে, অনুরোধের স্বাক্ষর যাচাই করে, Firestore-এ সাবস্ক্রিপশন স্থিতি আপডেট করে এবং ব্যবহারকারীকে একটি নিশ্চিতকরণ পাঠায়। সমস্ত কোড ক্লায়েন্টে ডেটা টেম্পারিংয়ের ঝুঁকি ছাড়াই সার্ভারে চলে। Stripe ডকুমেন্টেশন (2026) অনুসারে, ওয়েবহুক প্রক্রিয়াকরণে 500 মিলিসেকেন্ডের কম সময় লাগে।
স্মার্ট কন্টেন্ট মডারেশন Google Cloud Vision API-এর মাধ্যমে আপলোড করা ছবি স্বয়ংক্রিয়ভাবে পরীক্ষা করতে Cloud Function Storage ট্রিগার ব্যবহার করে। ফাংশনটি অনিরাপদ বিষয়বস্তু (সহিংসতা, প্রাপ্তবয়স্ক বিষয়বস্তু) সনাক্ত করতে Vision API-তে ছবি পাঠায় এবং, যদি থ্রেশহোল্ড অতিক্রম করা হয়, ফাইলটি মুছে ফেলে এবং প্রশাসককে জানায়। এই দৃশ্যকল্পটি ব্যবহারকারী গ্যালারী সহ UGC অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ।
ডেটা এগ্রিগেশন — Firebase Realtime Database কাউন্টারের প্রতিস্থাপন হিসাবে Cloud Functions। ক্লায়েন্টে কাউন্টার পড়া এবং লেখার (যা রেস কন্ডিশনের দিকে নিয়ে যায়) পরিবর্তে, সমষ্টিগত ফিল্ডের পারমাণবিক আপডেটের জন্য Firestore onWrite ট্রিগার ব্যবহার করুন। উদাহরণস্বরূপ, একটি ফাংশন /posts/{postId}/likes/{userId} উপ-সংগ্রহে ডকুমেন্ট যোগ বা মুছে ফেলার সময় পোস্ট লাইকের সংখ্যা গণনা করে এবং প্যারেন্ট ডকুমেন্টে likesCount ফিল্ড আপডেট করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
সর্বাধিক কার্যকর করার সময় প্রকারের উপর নির্ভর করে: HTTPS ফাংশন — 9 মিনিট, ইভেন্ট-চালিত ট্রিগার — 60 সেকেন্ড (v2: 60 মিনিট পর্যন্ত)। দীর্ঘমেয়াদী অপারেশনের জন্য, অ্যাসিঙ্ক্রোনাস প্রক্রিয়াকরণ সহ Cloud Tasks বা Pub/Sub ব্যবহার করুন। টাইমআউট কোডে runWith({ timeoutSeconds: 120 })-এর মাধ্যমে কনফিগার করা হয়।
Firebase Emulator Suite ব্যবহার করুন: firebase emulators:start --only functions। এমুলেটর হট রিলোড সমর্থন সহ পোর্ট 5001-এ স্থানীয়ভাবে ফাংশন চালায়। Firestore এবং Auth ট্রিগারের জন্য, এমুলেটর বাস্তব পরিষেবাগুলি প্রতিস্থাপন করে, যা উৎপাদন ডেটার ঝুঁকি ছাড়াই দৃশ্যকল্প পরীক্ষার অনুমতি দেয়।
দ্বিতীয় প্রজন্ম Google Cloud Run এবং Eventarc ব্যবহার করে, যা দীর্ঘ টাইমআউট (60 মিনিট পর্যন্ত), একটি ইনস্ট্যান্স দ্বারা সমবর্তী অনুরোধ প্রক্রিয়াকরণ এবং Google Cloud পরিষেবাগুলির সাথে উন্নত একীকরণ প্রদান করে। প্রথম প্রজন্ম Google Cloud Functions ব্যবহার করে এবং ইভেন্ট-চালিত ফাংশনের জন্য 60 সেকেন্ডে সীমাবদ্ধ। Firebase নতুন প্রকল্প দ্বিতীয় প্রজন্মের সাথে শুরু করার সুপারিশ করে।
Firebase Cloud Functions আনুষ্ঠানিকভাবে শুধুমাত্র Node.js (JavaScript এবং TypeScript) সমর্থন করে। Python-এর জন্য, Python-এর জন্য Firebase Admin SDK সহ সরাসরি Google Cloud Functions ব্যবহার করুন। Firebase Admin SDK Python কিছু Firebase-নির্দিষ্ট ট্রিগার বাদে সমস্ত অপারেশন সমর্থন করে যা শুধুমাত্র Node.js-এর মাধ্যমে উপলব্ধ।
প্রমাণিত অ্যাক্সেস-এর জন্য, Authorization হেডারে Firebase ID টোকেন যাচাই করুন: admin.auth().verifyIdToken(token)। সার্ভার-টু-সার্ভার ইন্টিগ্রেশন-এর জন্য, পরিষেবা অ্যাকাউন্ট বা API কী সহ Firebase Admin SDK ব্যবহার করুন। রেট লিমিটিং সহ পাবলিক এন্ডপয়েন্টের জন্য, Cloud Armor বা মিডলওয়্যারের মাধ্যমে রেট লিমিটিং ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন