আপনি Firebase CLI কমান্ড ব্যবহার করে অথবা আপনার ফাংশন সোর্স কোডে রানটাইম বিকল্প সেট করে ফাংশন ডিপ্লয়, মুছে এবং পরিবর্তন করতে পারেন।
ফাংশন ডিপ্লয় করুন
ফাংশন ডিপ্লয় করতে, এই Firebase CLI কমান্ড রান করুন:
firebase deploy --only functions
ডিফল্ট হিসেবে, Firebase CLI আপনার সোর্সের মধ্যে থাকা সব ফাংশন
একই সময়ে ডেপ্লয় করে। আপনার প্রোজেক্টে ৫টির বেশি ফাংশন থাকলে,
আমরা সাজেস্ট করি যে আপনি নির্দিষ্ট ফাংশনের নামের সাথে --only ফ্ল্যাগ ব্যবহার করুন
যাতে শুধুমাত্র আপনার এডিট করা
ফাংশনগুলিই ডিপ্লয় করা যায়। এইভাবে নির্দিষ্ট ফাংশন ডিপ্লয় করা
ডিপ্লয়মেন্ট প্রসেসের গতি বাড়ায় এবং ডিপ্লয়মেন্ট কোটা সংক্রান্ত সমস্যা
এড়াতে সাহায্য করে। যেমন:
firebase deploy --only functions:addMessage,functions:makeUppercase
অনেক বেশি সংখ্যক ফাংশন ডিপ্লয় করার সময়, আপনি স্ট্যান্ডার্ড কোটা অতিক্রম করতে পারেন এবং HTTP 429 বা 500 ত্রুটি মেসেজ পেতে পারেন। এই সমস্যার সমাধান করতে, ১০ বা তার কম সংখ্যার গ্রুপে ফাংশন ডিপ্লয় করুন।
উপলভ্য কমান্ডের সম্পূর্ণ তালিকা দেখতে Firebase CLI রেফারেন্স দেখুন।
ডিফল্ট হিসেবে, Firebase CLI, সোর্স কোডের জন্য functions/ ফোল্ডারে
খোঁজে। আপনি চাইলে, কোডবেস বা ফাইলের একাধিক সেটে
ফাংশন সাজাতে পারেন।
ডেপ্লয়মেন্ট আর্টিফ্যাক্ট ক্লিন-আপ করুন
ফাংশন ডিপ্লয়মেন্টের অংশ হিসেবে, কন্টেনার ইমেজ তৈরি করা হয় এবং Artifact Registry-এ স্টোর করা হয়। আপনার ডিপ্লয় করা ফাংশন রান করার জন্য এইসব ছবির প্রয়োজন নেই; Cloud Functions প্রাথমিক ডিপ্লয়মেন্টের সময় ছবির একটি কপি ফেচ করে রেখে দেয়, তবে রানটাইমে ফাংশন কাজ করার জন্য স্টোর করা আর্টিফ্যাক্টের প্রয়োজন নেই।
এই কন্টেনার ইমেজগুলি প্রায়শই ছোট হলেও, সময়ের সাথে সাথে সেগুলি জমা হতে পারে এবং আপনার স্টোরেজ খরচে অবদান রাখতে পারে। আপনি যদি তৈরি করা আর্টিফ্যাক্ট পরীক্ষা করার বা কন্টেনার ভালনারেবিলিটি স্ক্যান চালানোর পরিকল্পনা করেন, তাহলে আপনি সেগুলি কিছু সময়ের জন্য রেখে দিতে চাইতে পারেন।
স্টোরেজের খরচ ম্যানেজ করতে সাহায্য করার জন্য, Firebase CLI 14.0.0 এবং তার পরবর্তী ভার্সন আপনাকে প্রতিটি ফাংশন ডিপ্লয়মেন্টের পরে ডিপ্লয়মেন্ট আর্টিফ্যাক্ট স্টোর করে এমন রিপোজিটরির জন্য Artifact Registry ক্লিনআপ নীতি কনফিগার করতে দেয়।
আপনি
functions:artifacts:setpolicy কমান্ড ব্যবহার করে ম্যানুয়ালি ক্লিন-আপ নীতি সেট-আপ বা এডিট করতে পারবেন:
firebase functions:artifacts:setpolicy
ডিফল্ট হিসেবে, এই কমান্ড ১ দিনের বেশি পুরনো কন্টেনার ইমেজ অটোমেটিক মুছে দেওয়ার জন্য Artifact Registry কনফিগার করে। এটি স্টোরেজ খরচ কমানো এবং সাম্প্রতিক বিল্ডের সম্ভাব্য পরিদর্শনের অনুমতি দেওয়ার মধ্যে একটি যুক্তিসঙ্গত ভারসাম্য প্রদান করে।
--days বিকল্প ব্যবহার করে আপনি ডেটা রাখার সময়সীমা কাস্টমাইজ করতে পারবেন:
firebase functions:artifacts:setpolicy --days 7 # Delete images older than 7 days
আপনি একাধিক অঞ্চলে ফাংশন ডিপ্লয় করলে, --location বিকল্প ব্যবহার করে নির্দিষ্ট লোকেশনের জন্য
ক্লিন-আপ নীতি সেট-আপ করতে পারবেন:
$ firebase functions:artifacts:setpolicy --location europe-west1
আর্টিফ্যাক্ট ক্লিন-আপ থেকে অপ্ট-আউট করুন
আপনি যদি ম্যানুয়ালি ছবি ক্লিন-আপ ম্যানেজ করতে চান অথবা কোনও ছবি মুছে ফেলতে না চান, তাহলে ক্লিন-আপ নীতি থেকে সম্পূর্ণভাবে অপ্ট-আউট করতে পারেন:
$ firebase functions:artifacts:setpolicy --none
এই কমান্ড Firebase CLI-এর সেট-আপ করা যেকোনও বিদ্যমান ক্লিনআপ নীতি সরিয়ে দেয় এবং ফাংশন ডিপ্লয়মেন্টের পরে Firebase-কে ক্লিনআপ নীতি সেট-আপ করা থেকে আটকায়।
ফাংশন মুছুন
আপনি এইসব উপায়ে আগে ডিপ্লয় করা ফাংশন মুছে ফেলতে পারবেন:
- Firebase CLI-তে
functions:delete-এর সাথে স্পষ্টভাবে - Google Cloud কনসোলে স্পষ্টভাবে।
- ডিপ্লয় করার আগে সোর্স থেকে ফাংশন সরিয়ে দেওয়ার মাধ্যমে ইমপ্লিসিটলি।
প্রোডাকশন থেকে ফাংশন সরানোর আগে সব মুছে ফেলার অপারেশন আপনাকে কনফার্ম করতে বলে।
Firebase CLI-তে এক্সপ্লিসিট ফাংশন মুছে দেওয়ার সুবিধা একাধিক আর্গুমেন্ট এবং ফাংশন গ্রুপকে সাপোর্ট করে এবং আপনাকে নির্দিষ্ট অঞ্চলে চলা ফাংশন উল্লেখ করার অনুমতি দেয়। এছাড়াও, আপনি কনফার্মেশন প্রম্পট ওভাররাইড করতে পারবেন।
সব অঞ্চলে নির্দিষ্ট নামের সাথে মেলে এমন সব ফাংশন মুছে দেয়:
firebase functions:delete FUNCTION-1_NAME
ডিফল্ট নয় এমন অঞ্চলে চলা নির্দিষ্ট ফাংশন মুছে দেয়:
firebase functions:delete FUNCTION-1_NAME --region REGION_NAME
একাধিক ফাংশন মুছে দেয়:
firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME
নির্দিষ্ট ফাংশন গ্রুপ মুছে দেয়:
firebase functions:delete GROUP_NAME
কনফার্মেশন প্রম্পট বাইপাস করে:
firebase functions:delete FUNCTION-1_NAME --force
ইমপ্লিসিট ফাংশন মুছে দেওয়ার মাধ্যমে, firebase deploy আপনার সোর্স পার্স করে এবং
ফাইল থেকে মুছে দেওয়া হয়েছে এমন যেকোনও ফাংশন প্রোডাকশন থেকে সরিয়ে দেয়।
কোনও ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করা
আপনি যদি প্রোডাকশন ট্রাফিক ম্যানেজ করে এমন ফাংশনের জন্য অঞ্চল বা ট্রিগারের নাম পরিবর্তন করেন বা পরিবর্তন করেন, তাহলে পরিবর্তন করার সময় ইভেন্ট হারানো এড়াতে এই বিভাগের ধাপগুলি অনুসরণ করুন। এইসব ধাপ অনুসরণ করার আগে, প্রথমে নিশ্চিত করুন যে আপনার ফাংশনটি আইডেমপোটেন্ট, কারণ পরিবর্তন করার সময় আপনার ফাংশনের নতুন ও পুরনো ভার্সন একই সাথে রান করবে।
ফাংশনের নাম পরিবর্তন করা
কোনও ফাংশনের নাম পরিবর্তন করতে, আপনার সোর্সে ফাংশনের নাম পরিবর্তন করা নতুন ভার্সন তৈরি করুন এবং তারপর দুটি আলাদা ডিপ্লয়মেন্ট কমান্ড রান করুন। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশনটি ডিপ্লয় করে এবং দ্বিতীয় কমান্ডটি আগে ডিপ্লয় করা ভার্সনটি সরিয়ে দেয়। যেমন, আপনার যদি HTTP-ট্রিগার করা ওয়েব হুক থাকে এবং আপনি সেটির নাম পরিবর্তন করতে চান, তাহলে কোডটি এইভাবে সংশোধন করুন:
Node.js
// before
const {onRequest} = require('firebase-functions/v2/https');
exports.webhook = onRequest((req, res) => {
res.send("Hello");
});
// after
const {onRequest} = require('firebase-functions/v2/https');
exports.webhookNew = onRequest((req, res) => {
res.send("Hello");
});
Python
# before
from firebase_functions import https_fn
@https_fn.on_request()
def webhook(req: https_fn.Request) -> https_fn.Response:
return https_fn.Response("Hello world!")
# after
from firebase_functions import https_fn
@https_fn.on_request()
def webhook_new(req: https_fn.Request) -> https_fn.Response:
return https_fn.Response("Hello world!")
তারপর নতুন ফাংশন ডিপ্লয় করতে এই কমান্ডগুলি রান করুন:
# Deploy new function firebase deploy --only functions:webhookNew # Wait until deployment is done; now both functions are running # Delete webhook firebase functions:delete webhook
ফাংশনের অঞ্চল বা অঞ্চলগুলি পরিবর্তন করুন
আপনি যদি প্রোডাকশন ট্রাফিক ম্যানেজ করে এমন ফাংশনের জন্য নির্দিষ্ট করা অঞ্চল পরিবর্তন করেন, তাহলে আপনি এই ধাপগুলি ক্রমানুসারে অনুসরণ করে ইভেন্ট লস প্রতিরোধ করতে পারেন:
- ফাংশনের নাম পরিবর্তন করুন এবং আপনার পছন্দ অনুযায়ী এর অঞ্চল বা অঞ্চলগুলি পরিবর্তন করুন।
- নাম পরিবর্তন করা ফাংশন ডিপ্লয় করুন, যার ফলে সাময়িকভাবে দুই সেট অঞ্চলেই একই কোড রান করবে।
- আগের ফাংশনটি মুছে দিন।
যেমন, আপনার কাছে Cloud Firestore-ট্রিগার করা ফাংশন থাকলে
যা বর্তমানে us-central1-এ ডিপ্লয় করা আছে এবং আপনি এটি
asia-northeast1-এ মাইগ্রেট করতে চান, তাহলে আপনাকে প্রথমে ফাংশনের নাম পরিবর্তন করতে এবং অঞ্চলটি সংশোধন করতে আপনার সোর্স কোড পরিবর্তন করতে হবে।
Node.js
// before
exports.firestoreTrigger = onDocumentCreated(
"my-collection/{docId}",
(event) => {},
);
// after
exports.firestoreTriggerAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
আপডেট করা কোডে সঠিক ইভেন্ট ফিল্টার (এই ক্ষেত্রে
document) এবং অঞ্চল উল্লেখ করতে হবে। আরও তথ্যের জন্য
Cloud Functions লোকেশন দেখুন।
Python
# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
pass
# After
@firestore_fn.on_document_created("my-collection/{docId}",
region="asia-northeast1")
def firestore_trigger_asia(event):
pass
তারপর এটি রান করে ডিপ্লয় করুন:
firebase deploy --only functions:firestoreTriggerAsia
এখন দুটি অভিন্ন ফাংশন চলছে: firestoreTrigger চলছে
us-central1-এ এবং firestoreTriggerAsia চলছে asia-northeast1-এ।
তারপর, firestoreTrigger মুছুন:
firebase functions:delete firestoreTrigger
এখন শুধু একটি ফাংশন আছে - firestoreTriggerAsia, যা
asia-northeast1-এ চলছে।
ফাংশনের ট্রিগারের ধরন পরিবর্তন করা
সময়ের সাথে সাথে আপনার Cloud Functions for Firebase ডেপ্লয়মেন্ট ডেভেলপ করার সময়, বিভিন্ন কারণে আপনাকে কোনও ফাংশনের ট্রিগার টাইপ পরিবর্তন করতে হতে পারে। যেমন, আপনি হয়ত এক ধরনের Firebase Realtime Database বা Cloud Firestore ইভেন্ট থেকে অন্য ধরনের ইভেন্টে পরিবর্তন করতে চান।
শুধুমাত্র সোর্স কোড পরিবর্তন করে এবং firebase deploy রান করে কোনও ফাংশনের ইভেন্টের ধরন পরিবর্তন করা সম্ভব নয়। সমস্যা এড়াতে,
এই পদ্ধতি অনুসরণ করে ফাংশনের ট্রিগার টাইপ পরিবর্তন করুন:
- পছন্দসই ট্রিগার টাইপ সহ নতুন ফাংশন অন্তর্ভুক্ত করতে সোর্স কোড পরিবর্তন করুন।
- ফাংশনটি ডিপ্লয় করুন, যার ফলে সাময়িকভাবে পুরনো এবং নতুন উভয় ফাংশনই রান করবে।
- Firebase CLI ব্যবহার করে প্রোডাকশন থেকে পুরনো ফাংশনটি স্পষ্টভাবে মুছে দিন।
যেমন, কোনও অবজেক্ট মুছে দেওয়ার সময় ট্রিগার হওয়া কোনও ফাংশন থাকলে, কিন্তু আপনি অবজেক্ট ভার্সনিং চালু করে তার পরিবর্তে আর্কাইভ ইভেন্ট সাবস্ক্রাইব করতে চাইলে, প্রথমে ফাংশনের নাম পরিবর্তন করুন এবং নতুন ট্রিগার টাইপ পেতে এটি এডিট করুন।
Node.js
// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");
exports.objectDeleted = onObjectDeleted((event) => {
// ...
});
// after
const {onObjectArchived} = require("firebase-functions/v2/storage");
exports.objectArchived = onObjectArchived((event) => {
// ...
});
Python
# before
from firebase_functions import storage_fn
@storage_fn.on_object_deleted()
def object_deleted(event):
# ...
# after
from firebase_functions import storage_fn
@storage_fn.on_object_archived()
def object_archived(event):
# ...
তারপর পুরনো ফাংশন মুছে দেওয়ার আগে নতুন ফাংশন তৈরি করতে এই কমান্ড রান করুন:
# Create new function objectArchived firebase deploy --only functions:objectArchived # Wait until deployment is done; now both objectDeleted and objectArchived are running # Delete objectDeleted firebase functions:delete objectDeleted
রানটাইম সংক্রান্ত বিকল্প সেট করা
Cloud Functions for Firebase আপনাকে Node.js রানটাইম ভার্সন এবং প্রতি-ফাংশন টাইমআউট, মেমরি অ্যালোকেশন এবং সর্বনিম্ন/সর্বাধিক ফাংশন ইনস্ট্যান্সের মতো রানটাইম বিকল্প বেছে নিতে দেয়।
পেশাদার পদ্ধতি হিসেবে, এইসব বিকল্প (Node.js ভার্সন ছাড়া) ফাংশন কোডের মধ্যে
কনফিগারেশন অবজেক্টে সেট করা উচিত। এই
RuntimeOptions
অবজেক্ট হল আপনার ফাংশনের রানটাইম বিকল্পের জন্য সত্যের উৎস এবং এটি
অন্য কোনও পদ্ধতি (যেমন Google Cloud কনসোল বা gcloud CLI) ব্যবহার করে সেট করা বিকল্পগুলিকে
ওভাররাইড করবে।
আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে Google Cloud কনসোল বা gcloud CLI ব্যবহার করে রানটাইম বিকল্প ম্যানুয়ালি সেট করার প্রয়োজন হলে এবং আপনি প্রতিটি ডেপ্লয়মেন্টে এইসব ভ্যালু ওভাররাইড করতে না চাইলে, preserveExternalChanges বিকল্পটি true-এ সেট করুন। এই বিকল্প true-এ সেট করা থাকলে, Firebase আপনার কোডে সেট করা রানটাইম বিকল্পগুলি
আপনার ফাংশনের বর্তমানে-ডিপ্লয় করা ভার্সনের সেটিংসের সাথে নিম্নলিখিত অগ্রাধিকারের সাথে
মার্জ করে:
- ফাংশন কোডে বিকল্প সেট করা আছে: এক্সটার্নাল পরিবর্তন ওভাররাইড করুন।
- ফাংশন কোডে বিকল্পটি
RESET_VALUE-এ সেট করা আছে: ডিফল্ট ভ্যালু দিয়ে এক্সটার্নাল পরিবর্তন ওভাররাইড করুন। - ফাংশন কোডে বিকল্প সেট করা নেই, তবে বর্তমানে ডিপ্লয় করা ফাংশনে সেট করা আছে: ডিপ্লয় করা ফাংশনে নির্দিষ্ট করা বিকল্প ব্যবহার করুন।
বেশিরভাগ ক্ষেত্রে preserveExternalChanges: true বিকল্প ব্যবহার করার সাজেস্ট করা হয় না
কারণ আপনার ফাংশনের রানটাইম বিকল্পের জন্য আপনার কোড আর সম্পূর্ণ সোর্স অফ ট্রুথ
হবে না। আপনি যদি এটি ব্যবহার করেন, তাহলে Google Cloud কনসোল চেক করুন বা কোনও ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে
gcloud CLI ব্যবহার করুন।
Node.js ভার্সন সেট করুন
Firebase SDK for Cloud Functions-এর মাধ্যমে Node.js রানটাইম বেছে নেওয়া যায়। আপনি কোনও প্রোজেক্টের সব ফাংশন রানটাইম এনভায়রনমেন্টে চালানোর জন্য বেছে নিতে পারেন, যা এই সমর্থিত Node.js ভার্সনের মধ্যে একটির সাথে সম্পর্কিত:
- Node.js 22
- Node.js 20
- Node.js 18 (বন্ধ করা হয়েছে)
Node.js ভার্সন ১৪ ও ১৬ ২০২৫-এর শুরুতে বন্ধ করে দেওয়া হয়েছে। এইসব ভার্সন ডিপ্লয় করা বন্ধ করা আছে। Node.js-এর এইসব ভার্সনের জন্য চলমান সহায়তা সংক্রান্ত গুরুত্বপূর্ণ তথ্যের জন্য সহায়তার শিডিউল দেখুন।
Node.js ভার্সন সেট করতে:
আপনি package.json ফাইলের engines ফিল্ডে ভার্সন সেট করতে পারবেন,
যা আপনার functions/ ডিরেক্টরিতে ইনিশিয়ালাইজেশনের সময় তৈরি করা হয়েছে।
যেমন, শুধু ২০ ভার্সন ব্যবহার করতে, package.json-এ এই লাইনটি এডিট করুন:
"engines": {"node": "20"}
আপনি যদি Yarn প্যাকেজ ম্যানেজার ব্যবহার করেন বা engines ফিল্ডের জন্য অন্য কোনও নির্দিষ্ট প্রয়োজনীয়তা থাকে, তাহলে আপনি Firebase SDK-এর জন্য রানটাইম Cloud Functions-এ
firebase.json-এর পরিবর্তে সেট করতে পারেন:
{
"functions": {
"runtime": "nodejs20" // or nodejs22
}
}
CLI, firebase.json-এ সেট করা ভ্যালু ব্যবহার করে, package.json-এ আপনার আলাদাভাবে সেট করা কোনও ভ্যালু বা
রেঞ্জের তুলনায়।
আপনার Node.js রানটাইম আপগ্রেড করুন
আপনার Node.js রানটাইম আপগ্রেড করতে:
- আপনার প্রোজেক্ট Blaze প্রাইসিং প্ল্যানে আছে কিনা তা ভাল করে দেখে নিন।
- আপনি Firebase CLI v11.18.0 বা তার পরবর্তী ভার্সন ব্যবহার করছেন কিনা তা দেখে নিন।
- ইনিশিয়ালাইজেশনের সময় আপনার
functions/ডিরেক্টরিতে তৈরি হওয়াpackage.jsonফাইলেenginesভ্যালু পরিবর্তন করুন। যেমন, আপনি যদি ১৮ ভার্সন থেকে ২০ ভার্সনে আপগ্রেড করেন, তাহলে এন্ট্রিটি এইরকম দেখতে হবে:"engines": {"node": "20"} - ঐচ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা করুন।
- সব ফাংশন আবার ডিপ্লয় করুন।
Node.js মডিউল সিস্টেম বেছে নিন
Node.js-এ ডিফল্ট মডিউল সিস্টেম হল CommonJS (CJS), তবে বর্তমান Node.js ভার্সনে ECMAScript Modules (ESM)-ও কাজ করে। Cloud Functions-এ দুটিই কাজ করে।
ডিফল্ট হিসেবে, আপনার ফাংশন CommonJS ব্যবহার করে। এর অর্থ হল, ইমপোর্ট ও এক্সপোর্ট এইরকম দেখায়:
const {onRequest} = require("firebase-functions/https");
exports.helloWorld = onRequest(async (req, res) => res.send("Hello from Firebase!"));
পরিবর্তে ESM ব্যবহার করতে, আপনার package.json ফাইলে "type": "module" ফিল্ড সেট করুন
:
{
...
"type": "module",
...
}
আপনি এটি সেট করার পরে, ESM import এবং export সিনট্যাক্স ব্যবহার করুন:
import {onRequest} from "firebase-functions/https";
export const helloWorld = onRequest(async (req, res) => res.send("Hello from Firebase!"));
দুটি মডিউল সিস্টেমই সম্পূর্ণভাবে কাজ করে। আপনার প্রোজেক্টের জন্য যেটি সবচেয়ে উপযুক্ত সেটি বেছে নিতে পারেন। Node.js-এর মডিউল সংক্রান্ত ডকুমেন্টেশন থেকে আরও জানুন।
Python ভার্সন সেট করুন
Cloud Functions ভার্সন ১২.০.০ এবং তার পরবর্তী ভার্সনের জন্য Firebase SDK, Python রানটাইম বেছে নেওয়ার অনুমতি দেয়। firebase.json-এ রানটাইম ভার্সন সেট করুন, যেমন দেখানো হয়েছে:
{
"functions": {
"runtime": "python310" // or python311
}
}
স্কেলিং আচরণ নিয়ন্ত্রণ করুন
ডিফল্ট হিসেবে, Cloud Functions for Firebase ইনকামিং অনুরোধের সংখ্যার উপর ভিত্তি করে রানিং ইনস্ট্যান্সের সংখ্যা স্কেল করে, ট্রাফিক কমে গেলে সম্ভাব্যভাবে শূন্য ইনস্ট্যান্সে স্কেল ডাউন করে। তবে, আপনার অ্যাপের লেটেন্সি কম করার প্রয়োজন হলে এবং কোল্ড স্টার্টের সংখ্যা সীমিত করতে চাইলে, আপনি এই ডিফল্ট অ্যাকশন পরিবর্তন করতে পারবেন। এর জন্য আপনাকে কন্টেনার ইনস্ট্যান্সের ন্যূনতম সংখ্যা উল্লেখ করতে হবে, যাতে সেগুলি ওয়ার্ম থাকে এবং অনুরোধের উত্তর দেওয়ার জন্য প্রস্তুত থাকে।
একইভাবে, ইনকামিং অনুরোধের উত্তরে ইনস্ট্যান্সের স্কেলিং সীমিত করতে আপনি সর্বাধিক সংখ্যা সেট করতে পারেন। আপনার খরচ নিয়ন্ত্রণ করতে অথবা ডেটাবেসের মতো কোনও ব্যাকিং পরিষেবায় কানেকশনের সংখ্যা সীমিত করতে এই সেটিং ব্যবহার করুন।
প্রতি-ইনস্ট্যান্স কনকারেন্সি সেটিংয়ের (২য় জেনারেশনে নতুন) সাথে এইসব সেটিংস ব্যবহার করে, আপনি ফাংশনের জন্য স্কেলিং আচরণ নিয়ন্ত্রণ ও টিউন করতে পারবেন। আপনার অ্যাপ্লিকেশন ও ফাংশনের ধরন নির্ধারণ করবে যে কোন সেটিংস সবচেয়ে সাশ্রয়ী এবং সেরা পারফর্ম্যান্স প্রদান করবে।
কম ট্রাফিক সহ কিছু অ্যাপের জন্য, মাল্টি-কনকারেন্সি ছাড়া কম CPU বিকল্প উপযুক্ত। অন্যান্য ক্ষেত্রে যেখানে কোল্ড স্টার্ট একটি গুরুতর সমস্যা, সেখানে উচ্চ কনকারেন্সি এবং ন্যূনতম ইনস্ট্যান্স সেট করার অর্থ হল ট্রাফিকের বড় স্পাইকগুলি পরিচালনা করার জন্য ইনস্ট্যান্সের একটি সেট সর্বদা প্রস্তুত রাখা হয়।
ছোট-স্কেলের অ্যাপের ক্ষেত্রে, যেগুলি খুব কম ট্রাফিক পায়, সেগুলির জন্য উচ্চ কনকারেন্সি সহ কম সর্বাধিক ইনস্ট্যান্স সেট করার অর্থ হল অ্যাপটি অতিরিক্ত খরচ না করেই ট্রাফিকের আকস্মিক বৃদ্ধি সামলাতে পারে। তবে, মনে রাখবেন যে সর্বাধিক ইনস্ট্যান্সের সংখ্যা খুব কম সেট করা হলে, সর্বোচ্চ সীমায় পৌঁছে যাওয়ার পরে অনুরোধ ড্রপ করা হতে পারে।
একই সাথে একাধিক অনুরোধের অনুমতি দিন
Cloud Functions for Firebase (ফার্স্ট জেনারেশন)-এ, প্রতিটি ইনস্ট্যান্স একবারে একটি অনুরোধ ম্যানেজ করতে পারে, তাই
স্কেলিং আচরণ শুধুমাত্র ন্যূনতম এবং সর্বাধিক ইনস্ট্যান্স সেটিংসের মাধ্যমে সেট করা হয়েছিল।
ইনস্ট্যান্সের সংখ্যা নিয়ন্ত্রণ করার পাশাপাশি, Cloud Functions for Firebase (২য় জেনারেশন)-এ আপনি
concurrency বিকল্পের মাধ্যমে প্রতিটি ইনস্ট্যান্স একই সময়ে কতগুলি অনুরোধের উত্তর দিতে পারবে
তা নিয়ন্ত্রণ করতে পারবেন। কনকারেন্সির ডিফল্ট ভ্যালু হল ৮০, তবে আপনি
১ থেকে ১০০০-এর মধ্যে যেকোনও পূর্ণসংখ্যা সেট করতে পারবেন।
উচ্চ কনকারেন্সি সেটিংস সহ ফাংশনগুলি কোল্ড স্টার্ট ছাড়াই ট্রাফিকের স্পাইক শোষণ করতে পারে কারণ প্রতিটি ইনস্ট্যান্সে সম্ভবত কিছু হেডরুম থাকে। কোনও ইনস্ট্যান্স যদি একসাথে ৫০টি অনুরোধ সামলানোর জন্য কনফিগার করা থাকে, কিন্তু বর্তমানে মাত্র ২৫টি অনুরোধ সামলাচ্ছে, তাহলে এটি কোল্ড স্টার্টের জন্য নতুন ইনস্ট্যান্সের প্রয়োজন ছাড়াই ২৫টি অতিরিক্ত অনুরোধের স্পাইক সামলাতে পারে। এর বিপরীতে, কনকারেন্সি সেটিং মাত্র ১ হলে, অনুরোধের ওই স্পাইকের ফলে ২৫টি কোল্ড স্টার্ট হতে পারে।
এই সরলীকৃত দৃশ্যটি কনকারেন্সির সম্ভাব্য দক্ষতা বৃদ্ধির বিষয়টি প্রদর্শন করে। বাস্তবে, দক্ষতা অপ্টিমাইজ করতে এবং কনকারেন্সির সাথে কোল্ড স্টার্ট কমাতে স্কেলিং আচরণ আরও জটিল। Cloud Functions for Firebase ২য় জেনারেশনে কনকারেন্সি Cloud Run দ্বারা পরিচালিত হয় এবং Cloud Run-এর কন্টেনার ইনস্ট্যান্স অটোস্কেলিং সংক্রান্ত নিয়ম মেনে চলে।
Cloud Functions for Firebase (২য় জেনারেশন)-এ আরও বেশি কনকারেন্সি সেটিংস নিয়ে এক্সপেরিমেন্ট করার সময়, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:
- একসাথে করা যায় এমন টাস্কের বর্ধিত সেটিংসের জন্য, ব্যবহারিক সীমায় পৌঁছানো পর্যন্ত সর্বোত্তম পারফর্ম্যান্সের জন্য আরও বেশি CPU এবং RAM-এর প্রয়োজন হতে পারে। উদাহরণস্বরূপ, এমন একটি ফাংশন যা ভারী ইমেজ বা ভিডিও প্রসেস করে, সেটির CPU এবং RAM সেটিংস সর্বাধিক করা থাকলেও ১০০০টি সমবর্তী অনুরোধ পরিচালনা করার জন্য রিসোর্স নাও থাকতে পারে।
- Cloud Functions for Firebase (2nd gen) Cloud Run দ্বারা পরিচালিত হয়, তাই আপনি কনকারেন্সি অপ্টিমাইজ করার জন্য Google Cloud-এর নির্দেশিকাও দেখতে পারেন।
- প্রোডাকশনে মাল্টিকনকারেন্সিতে পরিবর্তন করার আগে টেস্ট এনভায়রনমেন্টে মাল্টিকনকারেন্সি ভালভাবে টেস্ট করে নিন।
ন্যূনতম সংখ্যক ইনস্ট্যান্স চালু রাখুন
আপনি সোর্স কোডে কোনও ফাংশনের জন্য ইনস্ট্যান্সের ন্যূনতম সংখ্যা সেট করতে পারেন। যেমন, এই ফাংশনটি ওয়ার্ম রাখার জন্য ন্যূনতম ৫টি ইনস্ট্যান্স সেট করে:
Node.js
const { onCall } = require("firebase-functions/v2/https");
exports.getAutocompleteResponse = onCall(
{
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
},
(event) => {
// Autocomplete user’s search term
}
);
Python
@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:
সর্বনিম্ন ইনস্ট্যান্স ভ্যালু সেট করার সময় এইসব বিষয় বিবেচনা করতে হবে:
- Cloud Functions for Firebase আপনার সেটিংয়ের উপরে আপনার অ্যাপ স্কেল করলে, আপনি সেই থ্রেশহোল্ডের উপরে প্রতিটি ইনস্ট্যান্সের জন্য কোল্ড স্টার্টের অভিজ্ঞতা পাবেন।
- কোল্ড স্টার্টের সবচেয়ে মারাত্মক প্রভাব পড়ে সেইসব অ্যাপের উপর যেগুলিতে ট্রাফিক স্পাইক হয়। আপনার অ্যাপে ট্রাফিক স্পাইক থাকলে এবং আপনি এমন একটি মান সেট করেন যা প্রতিটি ট্রাফিক বৃদ্ধির সাথে সাথে কোল্ড স্টার্ট কমিয়ে দেয়, তাহলে আপনি উল্লেখযোগ্যভাবে কম লেটেন্সি দেখতে পাবেন। যেসব অ্যাপে ক্রমাগত ট্রাফিক আসে, সেগুলির ক্ষেত্রে কোল্ড স্টার্ট পারফর্ম্যান্সকে মারাত্মকভাবে প্রভাবিত করে না।
প্রোডাকশন এনভায়রনমেন্টের জন্য ন্যূনতম ইনস্ট্যান্স সেট করা যুক্তিযুক্ত হতে পারে, তবে সাধারণত টেস্ট এনভায়রনমেন্টে এটি এড়ানো উচিত। আপনার টেস্ট প্রোজেক্টে স্কেল শূন্যে নামিয়ে আনতে, কিন্তু প্রোডাকশন প্রোজেক্টে কোল্ড স্টার্টের সংখ্যা কমাতে, আপনি প্যারামিটারাইজড কনফিগারেশনে ন্যূনতম ইনস্ট্যান্স ভ্যালু সেট করতে পারেন:
Node.js
const { onRequest } = require('firebase-functions/https'); const { defineInt, defineString } = require('firebase-functions/params'); // Define some parameters const minInstancesConfig = defineInt('HELLO_WORLD_MININSTANCES'); const welcomeMessage = defineString('WELCOME_MESSAGE'); // To use configured parameters inside the config for a function, provide them // directly. To use them at runtime, call .value() on them. export const helloWorld = onRequest( { minInstances: minInstancesConfig }, (req, res) => { res.send(`${welcomeMessage.value()}! I am a function.`); } );Python
MIN_INSTANCES = params.IntParam("HELLO_WORLD_MININSTANCES") WELCOME_MESSAGE = params.StringParam("WELCOME_MESSAGE") @https_fn.on_request(min_instances=MIN_INSTANCES.value()) def get_autocomplete_response(event: https_fn.Request) -> https_fn.Response: return https_fn.Response(f"{WELCOME_MESSAGE.value()} I'm a function.")
কোনও ফাংশনের জন্য ইনস্ট্যান্সের সর্বাধিক সংখ্যা সীমিত করুন
ফাংশন সোর্স কোডে আপনি সর্বাধিক ইনস্ট্যান্সের জন্য একটি ভ্যালু সেট করতে পারবেন। যেমন, এই ফাংশনটি ১০০টি ইনস্ট্যান্সের সীমা সেট করে যাতে একটি কাল্পনিক লিগ্যাসি ডেটাবেসকে অভিভূত না করে:
Node.js
const { onMessagePublished } = require("firebase-functions/v2/pubsub");
exports.mirrorevents = onMessagePublished(
{ topic: "topic-name", maxInstances: 100 },
(event) => {
// Connect to legacy database
}
);
Python
@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
# Connect to legacy database
কোনও HTTP ফাংশন সর্বাধিক ইনস্ট্যান্সের সীমা পর্যন্ত স্কেল আপ করা হলে, নতুন অনুরোধগুলি
৩০ সেকেন্ডের জন্য সারিবদ্ধ করা হয় এবং তারপরে
429 Too Many Requests রেসপন্স কোড সহ প্রত্যাখ্যান করা হয় যদি সেই সময়ের মধ্যে কোনও ইনস্ট্যান্স উপলভ্য না হয়।
সর্বাধিক ইনস্ট্যান্স সেটিংস ব্যবহার করার পেশাদার পদ্ধতি সম্পর্কে আরও জানতে, সর্বাধিক ইনস্ট্যান্স সেট করার পেশাদার পদ্ধতি দেখুন।
পরিষেবা অ্যাকাউন্ট সেট করা
ফাংশনের জন্য ডিফল্ট পরিষেবা অ্যাকাউন্টে অনুমতির একটি বিস্তৃত সেট রয়েছে যা আপনাকে অন্যান্য Firebase এবং Google Cloud পরিষেবার সাথে ইন্টার্যাক্ট করার অনুমতি দেয়:
- ২য় জেনারেশন ফাংশন: PROJECT_NUMBER-compute@developer.gserviceaccount.com (নাম Compute Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট)
- ফার্স্ট জেনারেশন ফাংশন: PROJECT_ID@
appspot.gserviceaccount.com (App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট নামে পরিচিত)
আপনি ডিফল্ট পরিষেবা অ্যাকাউন্ট ওভাররাইড করতে এবং কোনও ফাংশনকে ঠিক প্রয়োজনীয় রিসোর্সে সীমাবদ্ধ করতে চাইতে পারেন। আপনি একটি কাস্টম পরিষেবা অ্যাকাউন্ট তৈরি করে এবং serviceAccount কনফিগারেশন ভ্যালু ব্যবহার করে উপযুক্ত ফাংশনে এটি অ্যাসাইন করে এটি করতে পারেন:
const { onRequest } = require("firebase-functions/https");
exports.helloWorld = onRequest(
{
// This function doesn't access other Firebase project resources, so it uses a limited service account.
serviceAccount:
"my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
},
(request, response) => {
response.send("Hello from Firebase!");
},
);
আপনার সব ফাংশনের জন্য একই পরিষেবা অ্যাকাউন্ট সেট করতে চাইলে, আপনি setGlobalOptions ফাংশনের মাধ্যমে তা করতে পারবেন।
টাইম-আউট ও মেমরি অ্যালোকেশন সেট করা
কিছু ক্ষেত্রে, আপনার ফাংশনে দীর্ঘ টাইমআউট ভ্যালু বা মেমরির বড় বরাদ্দের জন্য বিশেষ প্রয়োজনীয়তা থাকতে পারে। আপনি এই মানগুলি হয় Google Cloud কনসোলে অথবা ফাংশন সোর্স কোডে (শুধুমাত্র Firebase) সেট করতে পারেন, এই সর্বাধিক সময়সীমার মধ্যে টাইমআউট মান ব্যবহার করে:
- HTTP এবং কল করা যায় এমন ফাংশন: ৩৬০০ সেকেন্ড (৬০ মিনিট)
- শিডিউল করা/টাস্ক কিউ ফাংশন: ১৮০০ সেকেন্ড (৩০ মিনিট)
- অন্যান্য ইভেন্ট-চালিত ফাংশন: ৫৪০ সেকেন্ড (৯ মিনিট)
ফাংশন সোর্স কোডে মেমরি অ্যালোকেশন ও টাইমআউট সেট করতে, মেমরি ও টাইমআউট সেকেন্ডের জন্য গ্লোবাল বিকল্প ব্যবহার করে আপনার ফাংশন রান করা ভার্চুয়াল মেশিন কাস্টমাইজ করুন। যেমন, এই Cloud Storage ফাংশন ১ জিবি মেমরি ব্যবহার করে এবং ৩০০ সেকেন্ড পরে টাইম-আউট হয়ে যায়:
Node.js
exports.convertLargeFile = onObjectFinalized({
timeoutSeconds: 300,
memory: "1GiB",
}, (event) => {
// Do some complicated things that take a lot of memory and time
});
Python
@storage_fn.on_object_finalized(timeout_sec=300, memory=options.MemoryOption.GB_1)
def convert_large_file(event: storage_fn.CloudEvent):
# Do some complicated things that take a lot of memory and time.
Google Cloud কনসোলে মেমরি অ্যালোকেশন ও টাইমআউট সেট করতে:
- Google Cloud কনসোলে, বাঁদিকের মেনু থেকে Cloud Functions for Firebase বেছে নিন।
- ফাংশনের তালিকায় কোনও ফাংশনের নামের উপর ক্লিক করে সেটি বেছে নিন।
- উপরের মেনুতে এডিট করুন আইকনে ক্লিক করুন।
- মেমরি অ্যালোকেশন লেবেলযুক্ত ড্রপ-ডাউন মেনু থেকে মেমরি অ্যালোকেশন বেছে নিন।
- উন্নত বিকল্পগুলি দেখতে আরও বিকল্পে ক্লিক করুন এবং টাইমআউট টেক্সট বক্সে সেকেন্ডের সংখ্যা লিখুন।
- ফাংশন আপডেট করতে সেভ করুন বিকল্পে ক্লিক করুন।
সিপিইউ ডিফল্ট ওভাররাইড করুন
২ জিবি পর্যন্ত মেমরি বরাদ্দ করা হয়েছে, Cloud Functions for Firebase (২য় জেনারেশন)-এর প্রতিটি ফাংশন ডিফল্ট হিসেবে একটি CPU-তে সেট করা থাকে এবং তারপর ৪ ও ৮ জিবির জন্য ২টি CPU-তে বাড়ানো হয়। মনে রাখবেন যে এটি ফার্স্ট জেনারেশনের ডিফল্ট অ্যাকশনের থেকে উল্লেখযোগ্যভাবে আলাদা, যার ফলে কম মেমরি ফাংশনের জন্য খরচ কিছুটা বেশি হতে পারে, যেমনটি নিম্নলিখিত সারণীতে দেখানো হয়েছে:
| RAM বরাদ্দ করা হয়েছে | ভার্সন ১ ডিফল্ট সিপিইউ (ভগ্নাংশ) | ভার্সন ২ ডিফল্ট সিপিইউ | প্রতি মিলি সেকেন্ডে দাম বৃদ্ধি |
|---|---|---|---|
| ১২৮ এমবি | ১/১২ | 1 | ১০.৫x |
| ২৫৬ এমবি | ১/৬ | 1 | ৫.৩x |
| ৫১২ এমবি | ১/৩ | 1 | ২.৭x |
| ১ জিবি | ৭/১২ | 1 | ১.৬x |
| ২ জিবি | 1 | 1 | ১x |
| ৪ জিবি | 2 | 2 | ১x |
| ৮ জিবি | 2 | 2 | ১x |
| ১৬ জিবি | n/a | 4 | n/a |
আপনি যদি ২য় জেনারেশন ফাংশনের জন্য ১ম জেনারেশন আচরণ পছন্দ করেন, তাহলে গ্লোবাল বিকল্প হিসেবে ১ম জেনারেশন ডিফল্ট সেট করুন:
Node.js
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
Python
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")
CPU-ইনটেনসিভ ফাংশনের জন্য, ২য় জেনারেশন অতিরিক্ত CPU কনফিগার করার সুবিধা প্রদান করে। আপনি দেখানো পদ্ধতি অনুযায়ী প্রতিটি ফাংশনের ভিত্তিতে সিপিইউ বুস্ট করতে পারবেন:
Node.js
// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
// computer vision goes here
});
Python
# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here