আপনি Firebase CLI কমান্ড ব্যবহার করে অথবা আপনার ফাংশন সোর্স কোডে রানটাইম বিকল্প সেট করে ফাংশন স্থাপন, মুছে ফেলতে এবং পরিবর্তন করতে পারেন।
ফাংশন স্থাপন করুন
ফাংশন স্থাপন করতে, এই Firebase CLI কমান্ডটি চালান:
firebase deploy --only functions
ডিফল্টরূপে, Firebase CLI আপনার সোর্সের ভিতরে থাকা সমস্ত ফাংশন একই সময়ে স্থাপন করে। যদি আপনার প্রোজেক্টে ৫টির বেশি ফাংশন থাকে, তাহলে আমরা আপনাকে --only
ফ্ল্যাগ ব্যবহার করে নির্দিষ্ট ফাংশনের নাম ব্যবহার করার পরামর্শ দিচ্ছি যাতে আপনি শুধুমাত্র আপনার সম্পাদনা করা ফাংশনগুলি স্থাপন করতে পারেন। এইভাবে নির্দিষ্ট ফাংশন স্থাপন করলে স্থাপন প্রক্রিয়া দ্রুত হয় এবং স্থাপনার কোটায় দৌড়ানো এড়াতে সাহায্য করে। উদাহরণস্বরূপ:
firebase deploy --only functions:addMessage,functions:makeUppercase
প্রচুর সংখ্যক ফাংশন স্থাপন করার সময়, আপনি স্ট্যান্ডার্ড কোটা অতিক্রম করতে পারেন এবং HTTP 429 বা 500 ত্রুটি বার্তা পেতে পারেন। এটি সমাধানের জন্য, 10 বা তার কম সংখ্যক গ্রুপে ফাংশন স্থাপন করুন।
উপলব্ধ কমান্ডের সম্পূর্ণ তালিকার জন্য 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-তে স্পষ্ট ফাংশন মুছে ফেলা একাধিক আর্গুমেন্টের পাশাপাশি ফাংশন গ্রুপগুলিকে সমর্থন করে এবং আপনাকে একটি নির্দিষ্ট অঞ্চলে চলমান একটি ফাংশন নির্দিষ্ট করার অনুমতি দেয়। এছাড়াও, আপনি নিশ্চিতকরণ প্রম্পট ওভাররাইড করতে পারেন।
# Delete all functions that match the specified name in all regions. firebase functions:delete myFunction
# Delete a specified function running in a specific region. firebase functions:delete myFunction --region us-east-1
# Delete more than one function firebase functions:delete myFunction myOtherFunction
# Delete a specified functions group. firebase functions:delete groupA
# Bypass the confirmation prompt. firebase functions:delete myFunction --force
ইমপ্লিসিট ফাংশন ডিলিটেশনের মাধ্যমে, firebase deploy
আপনার সোর্স পার্স করে এবং ফাইল থেকে মুছে ফেলা যেকোনো ফাংশন প্রোডাকশন থেকে সরিয়ে দেয়।
একটি ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করুন
যদি আপনি এমন ফাংশনের নাম পরিবর্তন করেন বা পরিবর্তন করেন যা প্রোডাকশন ট্র্যাফিক পরিচালনা করে, তাহলে পরিবর্তনের সময় ইভেন্ট হারানো এড়াতে এই বিভাগের ধাপগুলি অনুসরণ করুন। এই ধাপগুলি অনুসরণ করার আগে, প্রথমে নিশ্চিত করুন যে আপনার ফাংশনটি অক্ষম , কারণ পরিবর্তনের সময় আপনার ফাংশনের নতুন সংস্করণ এবং পুরাতন সংস্করণ উভয়ই একই সময়ে চলবে।
একটি ফাংশনের নাম পরিবর্তন করুন
একটি ফাংশনের নাম পরিবর্তন করতে, আপনার সোর্সে ফাংশনের একটি নতুন নাম পরিবর্তন করা সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক ডিপ্লয়মেন্ট কমান্ড চালান। প্রথম কমান্ডটি নতুন নামকরণ করা ফাংশনটি স্থাপন করে এবং দ্বিতীয় কমান্ডটি পূর্বে স্থাপন করা সংস্করণটি সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনার একটি HTTP-ট্রিগারযুক্ত ওয়েবহুক থাকে যা আপনি পুনরায় নামকরণ করতে চান, তাহলে কোডটি নিম্নরূপ সংশোধন করুন:
নোড.জেএস
// 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");
});
পাইথন
# 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 -triggered ফাংশন থাকে যা বর্তমানে us-central1
এর ডিফল্ট ফাংশন অঞ্চলে থাকে এবং আপনি এটিকে asia-northeast1
এ স্থানান্তর করতে চান, তাহলে আপনাকে প্রথমে ফাংশনটির নাম পরিবর্তন করতে এবং অঞ্চলটি সংশোধন করতে আপনার সোর্স কোডটি পরিবর্তন করতে হবে।
নোড.জেএস
// before
exports.firestoreTrigger = onDocumentCreated(
"my-collection/{docId}",
(event) => {},
);
// after
exports.firestoreTriggerAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
আপডেট করা কোডে অঞ্চলের সাথে সঠিক ইভেন্ট ফিল্টার (এই ক্ষেত্রে document
) উল্লেখ করা উচিত। আরও তথ্যের জন্য Cloud Functions অবস্থান দেখুন।
পাইথন
# 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
এখন দুটি অভিন্ন ফাংশন চলছে: us-central1
এ firestoreTrigger
চলছে, এবং asia-northeast1
এ firestoreTriggerAsia
চলছে।
তারপর, firestoreTrigger
মুছে ফেলুন:
firebase functions:delete firestoreTrigger
এখন শুধুমাত্র একটি ফাংশন আছে - firestoreTriggerAsia
, যা asia-northeast1
তে চলছে।
একটি ফাংশনের ট্রিগারের ধরণ পরিবর্তন করুন
সময়ের সাথে সাথে Cloud Functions for Firebase তৈরি করার সময়, বিভিন্ন কারণে আপনাকে একটি ফাংশনের ট্রিগার টাইপ পরিবর্তন করতে হতে পারে। উদাহরণস্বরূপ, আপনি এক ধরণের Firebase Realtime Database বা Cloud Firestore ইভেন্ট থেকে অন্য ধরণের পরিবর্তন করতে চাইতে পারেন।
শুধুমাত্র সোর্স কোড পরিবর্তন করে এবং firebase deploy
চালিয়ে কোনও ফাংশনের ইভেন্ট টাইপ পরিবর্তন করা সম্ভব নয়। ত্রুটি এড়াতে, এই পদ্ধতির মাধ্যমে একটি ফাংশনের ট্রিগার টাইপ পরিবর্তন করুন:
- পছন্দসই ট্রিগার টাইপ সহ একটি নতুন ফাংশন অন্তর্ভুক্ত করতে সোর্স কোডটি পরিবর্তন করুন।
- ফাংশনটি স্থাপন করুন, যার ফলে অস্থায়ীভাবে পুরানো এবং নতুন উভয় ফাংশনই চালু হবে।
- Firebase CLI ব্যবহার করে প্রোডাকশন থেকে পুরাতন ফাংশনটি স্পষ্টভাবে মুছে ফেলুন।
উদাহরণস্বরূপ, যদি আপনার এমন একটি ফাংশন থাকে যা কোনও অবজেক্ট মুছে ফেলার সময় ট্রিগার হয়, কিন্তু তারপরে আপনি অবজেক্ট ভার্সনিং সক্ষম করেন এবং পরিবর্তে আর্কাইভ ইভেন্টে সাবস্ক্রাইব করতে চান, তাহলে প্রথমে ফাংশনটির নাম পরিবর্তন করুন এবং নতুন ট্রিগার টাইপ পেতে এটি সম্পাদনা করুন।
নোড.জেএস
// before
const {onObjectDeleted} = require("firebase-functions/v2/storage");
exports.objectDeleted = onObjectDeleted((event) => {
// ...
});
// after
const {onObjectArchived} = require("firebase-functions/v2/storage");
exports.objectArchived = onObjectArchived((event) => {
// ...
});
পাইথন
# 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 console অথবা gcloud CLI এর মাধ্যমে রানটাইম অপশন ম্যানুয়ালি সেট করা থাকে এবং আপনি চান না যে প্রতিটি ডিপ্লোয়ে এই মানগুলি ওভাররাইড করা হোক, তাহলে preserveExternalChanges
অপশনটি true
এ সেট করুন। এই অপশনটি true
এ সেট করার মাধ্যমে, Firebase আপনার কোডে সেট করা রানটাইম অপশনগুলিকে আপনার ফাংশনের বর্তমানে-ডিপ্লোয় করা ভার্সনের সেটিংসের সাথে নিম্নলিখিত অগ্রাধিকারের সাথে মার্জ করে:
- বিকল্পটি ফাংশন কোডে সেট করা আছে: বাহ্যিক পরিবর্তনগুলিকে ওভাররাইড করুন।
- ফাংশন কোডে বিকল্পটি
RESET_VALUE
তে সেট করা আছে: ডিফল্ট মান দিয়ে বাহ্যিক পরিবর্তনগুলিকে ওভাররাইড করুন। - অপশনটি ফাংশন কোডে সেট করা নেই, তবে বর্তমানে ডিপ্লয়মেন্ট ফাংশনে সেট করা আছে: ডিপ্লয়মেন্ট ফাংশনে নির্দিষ্ট বিকল্পটি ব্যবহার করুন।
বেশিরভাগ পরিস্থিতিতে preserveExternalChanges: true
বিকল্পটি ব্যবহার করার পরামর্শ দেওয়া হয় না কারণ আপনার কোডটি আর আপনার ফাংশনের রানটাইম বিকল্পগুলির জন্য সত্যের সম্পূর্ণ উৎস হবে না। যদি আপনি এটি ব্যবহার করেন, তাহলে Google Cloud কনসোলটি পরীক্ষা করুন অথবা ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে gcloud CLI ব্যবহার করুন।
Node.js ভার্সন সেট করুন
Cloud Functions জন্য Firebase SDK Node.js রানটাইমের একটি নির্বাচনের অনুমতি দেয়। আপনি এই সমর্থিত Node.js সংস্করণগুলির একটির সাথে সম্পর্কিত রানটাইম পরিবেশে একচেটিয়াভাবে একটি প্রকল্পের সমস্ত ফাংশন চালানোর জন্য বেছে নিতে পারেন:
- নোড.জেএস ২২
- নোড.জেএস ২০
- Node.js 18 (অবঞ্চিত)
Node.js সংস্করণ ১৪ এবং ১৬ ২০২৫ সালের গোড়ার দিকে বন্ধ করে দেওয়া হয়েছিল। এই সংস্করণগুলির সাথে স্থাপনা অক্ষম করা হয়েছে। Node.js এর এই সংস্করণগুলির জন্য চলমান সহায়তা সম্পর্কিত গুরুত্বপূর্ণ তথ্যের জন্য সহায়তা সময়সূচী দেখুন।
Node.js সংস্করণ সেট করতে:
আপনি package.json
ফাইলের engines
ফিল্ডে সংস্করণটি সেট করতে পারেন যা initialization এর সময় আপনার functions/
ডিরেক্টরিতে তৈরি করা হয়েছিল। উদাহরণস্বরূপ, শুধুমাত্র সংস্করণ 20 ব্যবহার করতে, package.json
এ এই লাইনটি সম্পাদনা করুন:
"engines": {"node": "20"}
আপনি যদি Yarn প্যাকেজ ম্যানেজার ব্যবহার করেন অথবা engines
ফিল্ডের জন্য অন্যান্য নির্দিষ্ট প্রয়োজনীয়তা থাকে, তাহলে আপনি firebase.json
এ Firebase SDK for Cloud Functions এর রানটাইম সেট করতে পারেন:
{
"functions": {
"runtime": "nodejs20" // or nodejs22
}
}
CLI package.json
এ আলাদাভাবে সেট করা যেকোনো মান বা পরিসরের পরিবর্তে firebase.json
এ সেট করা মান ব্যবহার করে।
আপনার Node.js রানটাইম আপগ্রেড করুন
আপনার Node.js রানটাইম আপগ্রেড করতে:
- নিশ্চিত করুন যে আপনার প্রকল্পটি ব্লেজ মূল্য পরিকল্পনায় রয়েছে।
- নিশ্চিত করুন যে আপনি Firebase CLI v11.18.0 বা তার পরবর্তী সংস্করণ ব্যবহার করছেন।
- আপনার
functions/
ডিরেক্টরিতে ইনিশিয়ালাইজেশনের সময় তৈরি করাpackage.json
ফাইলেengines
মান পরিবর্তন করুন। উদাহরণস্বরূপ, যদি আপনি 18 সংস্করণ থেকে 20 সংস্করণে আপগ্রেড করেন, তাহলে এন্ট্রিটি এইরকম দেখাবে:"engines": {"node": "20"}
- ঐচ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা করুন।
- সমস্ত ফাংশন পুনরায় স্থাপন করুন।
একটি Node.js মডিউল সিস্টেম বেছে নিন
Node.js-এর ডিফল্ট মডিউল সিস্টেম হল CommonJS (CJS), কিন্তু বর্তমান Node.js সংস্করণগুলি ECMAScript মডিউল (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 ডকুমেন্টেশনে আরও জানুন।
পাইথন সংস্করণ সেট করুন
Firebase SDK for Cloud Functions ভার্সন ১২.০.০ এবং উচ্চতর ভার্সনগুলি Python রানটাইম নির্বাচন করার অনুমতি দেয়। firebase.json
এ রানটাইম ভার্সনটি দেখানো পদ্ধতিতে সেট করুন:
{
"functions": {
"runtime": "python310" // or python311
}
}
স্কেলিং আচরণ নিয়ন্ত্রণ করুন
ডিফল্টরূপে, Cloud Functions for Firebase ইনকামিং রিকোয়েস্টের সংখ্যার উপর ভিত্তি করে চলমান ইনস্ট্যান্সের সংখ্যা নির্ধারণ করে, যা ট্রাফিক কমে যাওয়ার সময় শূন্য ইনস্ট্যান্সে নামিয়ে আনা সম্ভব। তবে, যদি আপনার অ্যাপের লেটেন্সি কমানোর প্রয়োজন হয় এবং আপনি কোল্ড স্টার্টের সংখ্যা সীমিত করতে চান, তাহলে উষ্ণ রাখার জন্য এবং অনুরোধগুলি পরিবেশন করার জন্য প্রস্তুত রাখার জন্য ন্যূনতম সংখ্যক কন্টেইনার ইনস্ট্যান্স নির্দিষ্ট করে আপনি এই ডিফল্ট আচরণ পরিবর্তন করতে পারেন।
একইভাবে, আপনি আগত অনুরোধের প্রতিক্রিয়ায় ইনস্ট্যান্সের স্কেলিং সীমাবদ্ধ করার জন্য সর্বোচ্চ সংখ্যা নির্ধারণ করতে পারেন। আপনার খরচ নিয়ন্ত্রণ করার জন্য বা ডাটাবেসের মতো ব্যাকিং পরিষেবার সাথে সংযোগের সংখ্যা সীমিত করার জন্য এই সেটিংটি ব্যবহার করুন।
এই সেটিংসগুলি পার-ইনস্ট্যান্স কনকারেন্সি সেটিং (দ্বিতীয় প্রজন্মে নতুন) এর সাথে একসাথে ব্যবহার করে, আপনি আপনার ফাংশনগুলির জন্য স্কেলিং আচরণ নিয়ন্ত্রণ এবং টিউন করতে পারেন। আপনার অ্যাপ্লিকেশন এবং ফাংশনের প্রকৃতি নির্ধারণ করবে কোন সেটিংস সবচেয়ে সাশ্রয়ী এবং এর ফলে সেরা কর্মক্ষমতা আসবে।
কম ট্র্যাফিক সহ কিছু অ্যাপের জন্য, মাল্টি-কনকারেন্সি ছাড়াই কম CPU বিকল্পটি সর্বোত্তম। অন্যদের জন্য যেখানে কোল্ড স্টার্ট একটি গুরুত্বপূর্ণ সমস্যা, উচ্চ কনকারেন্সি এবং সর্বনিম্ন ইনস্ট্যান্স সেট করার অর্থ হল ট্র্যাফিকের বড় স্পাইকগুলি পরিচালনা করার জন্য ইনস্ট্যান্সের একটি সেট সর্বদা উষ্ণ রাখা হয়।
ছোট আকারের অ্যাপগুলির জন্য যারা খুব কম ট্র্যাফিক পায়, উচ্চ কনকারেন্সি সহ কম সর্বোচ্চ ইনস্ট্যান্স সেট করার অর্থ হল অ্যাপটি অতিরিক্ত খরচ ছাড়াই ট্র্যাফিকের বিস্ফোরণ পরিচালনা করতে পারে। তবে, মনে রাখবেন যে যখন সর্বাধিক ইনস্ট্যান্স খুব কম সেট করা হয়, তখন সর্বোচ্চ সীমা পৌঁছে গেলে অনুরোধগুলি বাদ দেওয়া হতে পারে।
সমসাময়িক অনুরোধগুলিকে অনুমতি দিন
Cloud Functions for Firebase এ, প্রতিটি ইনস্ট্যান্স একবারে একটি করে অনুরোধ পরিচালনা করতে পারত, তাই স্কেলিং আচরণ শুধুমাত্র সর্বনিম্ন এবং সর্বোচ্চ ইনস্ট্যান্স সেটিংসের সাথে সেট করা হয়েছিল। ইনস্ট্যান্সের সংখ্যা নিয়ন্ত্রণ করার পাশাপাশি, Cloud Functions for Firebase (দ্বিতীয় প্রজন্ম) এ আপনি concurrency
বিকল্পের সাহায্যে প্রতিটি ইনস্ট্যান্স একই সময়ে কতগুলি অনুরোধ পরিবেশন করতে পারে তা নিয়ন্ত্রণ করতে পারেন। concurrency-এর ডিফল্ট মান হল 80, তবে আপনি এটি 1 থেকে 1000 এর মধ্যে যেকোনো পূর্ণসংখ্যায় সেট করতে পারেন।
উচ্চতর কনকারেন্সি সেটিংস সহ ফাংশনগুলি কোল্ড স্টার্টিং ছাড়াই ট্র্যাফিকের স্পাইক শোষণ করতে পারে কারণ প্রতিটি ইনস্ট্যান্সের কিছু হেডরুম থাকতে পারে। যদি একটি ইনস্ট্যান্স ৫০টি পর্যন্ত একযোগে অনুরোধ পরিচালনা করার জন্য কনফিগার করা থাকে কিন্তু বর্তমানে মাত্র ২৫টি পরিচালনা করছে, তাহলে এটি কোল্ড স্টার্টের জন্য নতুন ইনস্ট্যান্সের প্রয়োজন ছাড়াই অতিরিক্ত ২৫টি অনুরোধ পরিচালনা করতে পারে। বিপরীতে, মাত্র ১টি কনকারেন্সি সেটিং সহ, অনুরোধের এই স্পাইক ২৫টি কোল্ড স্টার্টের দিকে নিয়ে যেতে পারে।
এই সরলীকৃত দৃশ্যকল্পটি কনকারেন্সির সম্ভাব্য দক্ষতা লাভ প্রদর্শন করে। বাস্তবে, কনকারেন্সির সাথে দক্ষতা অপ্টিমাইজ করার এবং কোল্ড স্টার্ট কমানোর জন্য স্কেলিং আচরণ আরও জটিল। Cloud Functions for Firebase কনকারেন্সি Cloud Run দ্বারা চালিত হয় এবং Cloud Run কন্টেইনার ইনস্ট্যান্স অটোস্কেলিংয়ের নিয়ম অনুসরণ করে।
Cloud Functions for Firebase এ উচ্চতর কনকারেন্সি সেটিংস নিয়ে পরীক্ষা করার সময়, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:
- উচ্চতর কনকারেন্সি সেটিংসের জন্য সর্বোত্তম কর্মক্ষমতার জন্য উচ্চতর CPU এবং RAM প্রয়োজন হতে পারে যতক্ষণ না পর্যন্ত একটি ব্যবহারিক সীমায় পৌঁছায়। উদাহরণস্বরূপ, একটি ফাংশন যা ভারী ছবি বা ভিডিও প্রক্রিয়াকরণ করে, তার CPU এবং RAM সেটিংস সর্বাধিক করা হলেও, 1000টি সমসাময়িক অনুরোধ পরিচালনা করার জন্য সংস্থানের অভাব হতে পারে।
- যেহেতু Cloud Functions for Firebase Cloud Run দ্বারা চালিত, তাই আপনি concurrency অপ্টিমাইজ করার জন্য Google Cloud নির্দেশিকাও দেখতে পারেন।
- উৎপাদনে মাল্টিকনকারেন্সিতে স্যুইচ করার আগে একটি পরীক্ষামূলক পরিবেশে মাল্টিকনকারেন্সি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করে নিন।
ন্যূনতম সংখ্যক বার উষ্ণ রাখুন
সোর্স কোডে আপনি একটি ফাংশনের জন্য সর্বনিম্ন ৫টি ইনস্ট্যান্স সেট করতে পারেন। উদাহরণস্বরূপ, এই ফাংশনটি উষ্ণ রাখার জন্য সর্বনিম্ন ৫টি ইনস্ট্যান্স সেট করে:
নোড.জেএস
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
}
);
পাইথন
@https_fn.on_call(min_instances=5)
def get_autocomplete_response(event: https_fn.CallableRequest) -> https_fn.Response:
ন্যূনতম ইনস্ট্যান্স মান নির্ধারণ করার সময় এখানে কিছু বিষয় বিবেচনা করতে হবে:
- যদি Cloud Functions for Firebase আপনার অ্যাপটিকে আপনার সেটিং-এর উপরে স্কেল করে, তাহলে সেই থ্রেশহোল্ডের উপরে প্রতিটি ইনস্ট্যান্সের জন্য আপনি একটি কোল্ড স্টার্ট অনুভব করবেন।
- স্পাইকি ট্র্যাফিকযুক্ত অ্যাপগুলিতে কোল্ড স্টার্ট সবচেয়ে বেশি প্রভাব ফেলে। যদি আপনার অ্যাপে স্পাইকি ট্র্যাফিক থাকে এবং আপনি এমন একটি মান যথেষ্ট বেশি সেট করেন যাতে প্রতিটি ট্র্যাফিক বৃদ্ধির সাথে কোল্ড স্টার্ট হ্রাস পায়, তাহলে আপনি উল্লেখযোগ্যভাবে হ্রাসপ্রাপ্ত ল্যাটেন্সি দেখতে পাবেন। ক্রমাগত ট্র্যাফিকযুক্ত অ্যাপগুলির ক্ষেত্রে, কোল্ড স্টার্টগুলি কার্যক্ষমতাকে গুরুতরভাবে প্রভাবিত করার সম্ভাবনা কম।
উৎপাদন পরিবেশের জন্য ন্যূনতম ইনস্ট্যান্স সেট করা যুক্তিসঙ্গত হতে পারে, তবে সাধারণত পরীক্ষার পরিবেশে এটি এড়ানো উচিত। আপনার পরীক্ষা প্রকল্পে শূন্যে স্কেল করতে কিন্তু আপনার উৎপাদন প্রকল্পে কোল্ড স্টার্ট কমাতে, আপনি আপনার প্যারামিটারাইজড কনফিগারেশনে একটি ন্যূনতম ইনস্ট্যান্স মান সেট করতে পারেন:
নোড.জেএস
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.`); } );
পাইথন
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.")
একটি ফাংশনের জন্য সর্বাধিক সংখ্যার উদাহরণ সীমিত করুন
আপনি ফাংশন সোর্স কোডে সর্বাধিক ইনস্ট্যান্সের জন্য একটি মান সেট করতে পারেন। উদাহরণস্বরূপ, এই ফাংশনটি একটি কাল্পনিক লিগ্যাসি ডাটাবেসকে ওভারলোড না করার জন্য 100 টি ইনস্ট্যান্সের সীমা নির্ধারণ করে:
নোড.জেএস
const { onMessagePublished } = require("firebase-functions/v2/pubsub");
exports.mirrorevents = onMessagePublished(
{ topic: "topic-name", maxInstances: 100 },
(event) => {
// Connect to legacy database
}
);
পাইথন
@pubsub_fn.on_message_published(topic="topic-name", max_instances=100)
def mirrorevents(event: pubsub_fn.CloudEvent):
# Connect to legacy database
যদি কোনও HTTP ফাংশন সর্বোচ্চ ইনস্ট্যান্স সীমা পর্যন্ত স্কেল করা হয়, তাহলে নতুন অনুরোধগুলি 30 সেকেন্ডের জন্য সারিবদ্ধ করা হয় এবং তারপর 429 Too Many Requests
এর প্রতিক্রিয়া কোড দিয়ে প্রত্যাখ্যান করা হয় যদি ততক্ষণে কোনও ইনস্ট্যান্স উপলব্ধ না থাকে।
সর্বাধিক ইন্সট্যান্স সেটিংস ব্যবহারের সর্বোত্তম অনুশীলন সম্পর্কে আরও জানতে, সর্বাধিক ইন্সট্যান্স সেট করার জন্য এই সর্বোত্তম অনুশীলনগুলি দেখুন।
একটি পরিষেবা অ্যাকাউন্ট সেট করুন
ফাংশনগুলির জন্য ডিফল্ট পরিষেবা অ্যাকাউন্টগুলিতে আপনাকে অন্যান্য Firebase এবং Google ক্লাউড পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেওয়ার জন্য বিস্তৃত অনুমতি রয়েছে:
- দ্বিতীয় প্রজন্মের ফাংশন: PROJECT_NUMBER -compute@developer.gserviceaccount.com (নামকরণ করা হয়েছে Compute Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট )
- প্রথম প্রজন্মের ফাংশন: PROJECT_ID @ appspot.gserviceaccount.com ( অ্যাপ ইঞ্জিন ডিফল্ট পরিষেবা অ্যাকাউন্ট নামে পরিচিত)
আপনি ডিফল্ট পরিষেবা অ্যাকাউন্টটি ওভাররাইড করতে এবং প্রয়োজনীয় সংস্থানগুলির মধ্যে একটি ফাংশন সীমাবদ্ধ করতে চাইতে পারেন। আপনি একটি কাস্টম পরিষেবা অ্যাকাউন্ট তৈরি করে এবং 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) সেট করতে পারেন।
ফাংশন সোর্স কোডে মেমোরি অ্যালোকেশন এবং টাইমআউট সেট করতে, আপনার ফাংশন চালানোর জন্য ভার্চুয়াল মেশিনটি কাস্টমাইজ করতে মেমোরি এবং টাইমআউট সেকেন্ডের জন্য গ্লোবাল বিকল্পগুলি ব্যবহার করুন। উদাহরণস্বরূপ, এই Cloud Storage ফাংশনটি 1GiB মেমোরি ব্যবহার করে এবং 300 সেকেন্ড পরে টাইমআউট করে:
নোড.জেএস
exports.convertLargeFile = onObjectFinalized({
timeoutSeconds: 300,
memory: "1GiB",
}, (event) => {
// Do some complicated things that take a lot of memory and time
});
পাইথন
@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.
টাইমআউট সেকেন্ডের সর্বোচ্চ মান হল 540
, অথবা 9 মিনিট।
Google Cloud কনসোলে মেমরি বরাদ্দ এবং সময়সীমা সেট করতে:
- Google Cloud কনসোলে বাম মেনু থেকে Cloud Functions for Firebase নির্বাচন করুন।
- ফাংশন তালিকা থেকে একটি ফাংশনের নামের উপর ক্লিক করে সেটি নির্বাচন করুন।
- উপরের মেনুতে সম্পাদনা আইকনে ক্লিক করুন।
- মেমোরি অ্যালোকেশন লেবেলযুক্ত ড্রপ-ডাউন মেনু থেকে একটি মেমোরি অ্যালোকেশন নির্বাচন করুন।
- উন্নত বিকল্পগুলি প্রদর্শন করতে আরও ক্লিক করুন, এবং টাইমআউট টেক্সট বক্সে কয়েক সেকেন্ড লিখুন।
- ফাংশনটি আপডেট করতে সংরক্ষণ করুন এ ক্লিক করুন।
CPU ডিফল্ট ওভাররাইড করুন
২ গিগাবাইট পর্যন্ত মেমোরি বরাদ্দ করা হলে, Cloud Functions for Firebase (দ্বিতীয় জেনারেশন) এর প্রতিটি ফাংশন ডিফল্টভাবে একটি সিপিইউতে পরিণত হয় এবং তারপর ৪ এবং ৮ গিগাবাইটের জন্য ২ টি সিপিইউতে বৃদ্ধি পায়। মনে রাখবেন যে এটি প্রথম জেনারেশনের ডিফল্ট আচরণ থেকে উল্লেখযোগ্যভাবে আলাদা , যা নিম্ন-মেমোরি ফাংশনগুলির জন্য সামান্য বেশি খরচের দিকে পরিচালিত করতে পারে, যেমনটি নিম্নলিখিত টেবিলে প্রকাশ করা হয়েছে:
RAM বরাদ্দ করা হয়েছে | ভার্সন ১ ডিফল্ট সিপিইউ (ভগ্নাংশ) | সংস্করণ ২ ডিফল্ট সিপিইউ | প্রতি মিলিসেকেন্ডে দাম বৃদ্ধি |
---|---|---|---|
১২৮ এমবি | ১/১২ | ১ | ১০.৫x |
২৫৬ এমবি | ১/৬ | ১ | ৫.৩x |
৫১২ এমবি | ১/৩ | ১ | ২.৭x |
১ জিবি | ১২/৭ | ১ | ১.৬x |
২ জিবি | ১ | ১ | ১x |
৪ জিবি | ২ | ২ | ১x |
৮ জিবি | ২ | ২ | ১x |
১৬ জিবি | প্রযোজ্য নয় | ৪ | প্রযোজ্য নয় |
যদি আপনি আপনার দ্বিতীয় জেনার ফাংশনের জন্য প্রথম জেনার আচরণ পছন্দ করেন, তাহলে প্রথম জেনার ডিফল্টকে একটি বিশ্বব্যাপী বিকল্প হিসেবে সেট করুন:
নোড.জেএস
// Turn off Firebase defaults
setGlobalOptions({ cpu: 'gcf_gen1' });
পাইথন
# Use 1st gen behavior
set_global_options(cpu="gcf_gen1")
CPU-নিবিড় ফাংশনের জন্য, 2nd gen অতিরিক্ত CPU কনফিগার করার নমনীয়তা প্রদান করে। আপনি প্রতি-ফাংশন ভিত্তিতে CPU বুস্ট করতে পারেন যেমন দেখানো হয়েছে:
নোড.জেএস
// Boost CPU in a function:
export const analyzeImage = onObjectFinalized({ cpu: 2 }, (event) => {
// computer vision goes here
});
পাইথন
# Boost CPU in a function:
@storage_fn.on_object_finalized(cpu=2)
def analyze_image(event: storage_fn.CloudEvent):
# computer vision goes here