আপনি Firebase CLI কমান্ড ব্যবহার করে অথবা আপনার ফাংশনের সোর্স কোডে রানটাইম অপশন সেট করার মাধ্যমে ফাংশন স্থাপন, মুছে ফেলা এবং পরিবর্তন করতে পারেন।
ফাংশন স্থাপন করুন
ফাংশনগুলো ডিপ্লয় করতে, এই Firebase CLI কমান্ডটি চালান:
firebase deploy --only functions
ডিফল্টরূপে, Firebase CLI আপনার সোর্সের ভেতরের সমস্ত ফাংশন একই সাথে ডিপ্লয় করে। যদি আপনার প্রজেক্টে ৫টির বেশি ফাংশন থাকে, তাহলে আমরা আপনাকে নির্দিষ্ট ফাংশনের নামসহ --only ফ্ল্যাগটি ব্যবহার করার পরামর্শ দিই, যাতে শুধুমাত্র আপনার এডিট করা ফাংশনগুলোই ডিপ্লয় করা যায়। এভাবে নির্দিষ্ট ফাংশন ডিপ্লয় করলে ডিপ্লয়মেন্ট প্রক্রিয়া দ্রুত হয় এবং আপনাকে ডিপ্লয়মেন্ট কোটার সম্মুখীন হওয়া থেকে বাঁচায়। উদাহরণস্বরূপ:
firebase deploy --only functions:addMessage,functions:makeUppercase
বিপুল সংখ্যক ফাংশন ডেপ্লয় করার সময়, আপনি স্ট্যান্ডার্ড কোটা অতিক্রম করতে পারেন এবং HTTP 429 বা 500 এরর মেসেজ পেতে পারেন। এর সমাধান করতে, ফাংশনগুলোকে ১০টি বা তার কমের গ্রুপে ডেপ্লয় করুন।
উপলব্ধ কমান্ডগুলোর সম্পূর্ণ তালিকার জন্য Firebase সিএলআই রেফারেন্স দেখুন।
ডিফল্টরূপে, Firebase CLI সোর্স কোডের জন্য functions/ ফোল্ডারে অনুসন্ধান করে। আপনি চাইলে ফাংশনগুলোকে কোডবেস বা একাধিক ফাইল সেটে সাজাতে পারেন।
মুছে ফেলার ফাংশন
আপনি পূর্বে স্থাপন করা ফাংশনগুলি নিম্নলিখিত উপায়ে মুছে ফেলতে পারেন:
- 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 আপনার সোর্স কোড পার্স করে এবং ফাইল থেকে মুছে ফেলা যেকোনো ফাংশনকে প্রোডাকশন থেকে সরিয়ে দেয়।
একটি ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করুন
আপনি যদি প্রোডাকশন ট্র্যাফিক পরিচালনা করে এমন ফাংশনগুলির অঞ্চল বা ট্রিগারের নাম পরিবর্তন করেন, তাহলে পরিবর্তনের সময় ইভেন্ট হারিয়ে যাওয়া এড়াতে এই বিভাগের ধাপগুলি অনুসরণ করুন। এই ধাপগুলি অনুসরণ করার আগে, প্রথমে নিশ্চিত করুন যে আপনার ফাংশনটি আইডম্পোটেন্ট (idempotent ), কারণ পরিবর্তনের সময় আপনার ফাংশনের নতুন এবং পুরানো উভয় সংস্করণই একই সাথে চালু থাকবে।
একটি ফাংশনের নাম পরিবর্তন করুন
একটি ফাংশনের নাম পরিবর্তন করতে, আপনার সোর্সে ফাংশনটির একটি নতুন নামযুক্ত সংস্করণ তৈরি করুন এবং তারপরে দুটি পৃথক ডিপ্লয়মেন্ট কমান্ড চালান। প্রথম কমান্ডটি নতুন নামের ফাংশনটি ডিপ্লয় করে, এবং দ্বিতীয় কমান্ডটি পূর্বে ডিপ্লয় করা সংস্করণটি সরিয়ে দেয়। উদাহরণস্বরূপ, যদি আপনার webhook নামে একটি Node.js ফাংশন থাকে যা আপনি webhookNew তে পরিবর্তন করতে চান, তাহলে কোডটি নিম্নরূপভাবে সংশোধন করুন:
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookNew = functions.https.onRequest((req, res) => {
res.send("Hello");
});
এরপর নতুন ফাংশনটি ডিপ্লয় করতে নিম্নলিখিত কমান্ডগুলো চালান:
# Deploy new function called webhookNew firebase deploy --only functions:webhookNew # Wait until deployment is done; now both webhookNew and webhook are running # Delete webhook firebase functions:delete webhook
একটি ফাংশনের অঞ্চল বা অঞ্চলসমূহ পরিবর্তন করুন
আপনি যদি প্রোডাকশন ট্র্যাফিক পরিচালনা করে এমন কোনো ফাংশনের জন্য নির্দিষ্ট অঞ্চলগুলি পরিবর্তন করেন, তাহলে ক্রমানুসারে এই পদক্ষেপগুলি সম্পাদন করে ইভেন্ট লস প্রতিরোধ করতে পারেন:
- ফাংশনটির নাম পরিবর্তন করুন এবং প্রয়োজন অনুযায়ী এর অঞ্চল বা অঞ্চলগুলো পরিবর্তন করুন।
- পুনঃনামকৃত ফাংশনটি ডিপ্লয় করুন, যার ফলে উভয় অঞ্চলের সেটেই সাময়িকভাবে একই কোড রান হবে।
- পূর্ববর্তী ফাংশনটি মুছে ফেলুন।
উদাহরণস্বরূপ, যদি আপনার webhook নামে একটি ফাংশন থাকে যা বর্তমানে us-central1 এর ডিফল্ট ফাংশন অঞ্চলে রয়েছে এবং আপনি এটিকে asia-northeast1 এ স্থানান্তর করতে চান, তাহলে আপনাকে প্রথমে ফাংশনটির নাম পরিবর্তন করতে এবং অঞ্চলটি সংশোধন করতে আপনার সোর্স কোড পরিবর্তন করতে হবে।
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions
.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookAsia = functions
.region('asia-northeast1')
.https.onRequest((req, res) => {
res.send("Hello");
});
তারপর এটি চালিয়ে স্থাপন করুন:
firebase deploy --only functions:webhookAsia
এখন দুটি অভিন্ন ফাংশন চালু আছে: webhook চলছে us-central1 এ, এবং webhookAsia চলছে asia-northeast1 এ।
তারপর, webhook মুছে ফেলুন:
firebase functions:delete webhook
এখন কেবল একটিই ফাংশন আছে - webhookAsia , যেটি asia-northeast1 এ চলছে।
একটি ফাংশনের ট্রিগার টাইপ পরিবর্তন করুন
সময়ের সাথে সাথে আপনি যখন আপনার Cloud Functions for Firebase ডেপ্লয়মেন্ট উন্নত করবেন, তখন বিভিন্ন কারণে আপনার একটি ফাংশনের ট্রিগার টাইপ পরিবর্তন করার প্রয়োজন হতে পারে। উদাহরণস্বরূপ, আপনি এক ধরনের Firebase Realtime Database বা Cloud Firestore ইভেন্ট থেকে অন্য ধরনের ইভেন্টে পরিবর্তন করতে চাইতে পারেন।
শুধুমাত্র সোর্স কোড পরিবর্তন করে এবং firebase deploy চালিয়ে কোনো ফাংশনের ইভেন্ট টাইপ পরিবর্তন করা সম্ভব নয়। ত্রুটি এড়াতে, এই পদ্ধতি অনুসরণ করে একটি ফাংশনের ট্রিগার টাইপ পরিবর্তন করুন:
- কাঙ্ক্ষিত ট্রিগার টাইপসহ একটি নতুন ফাংশন অন্তর্ভুক্ত করতে সোর্স কোডটি পরিবর্তন করুন।
- ফাংশনটি ডিপ্লয় করুন, যার ফলে পুরোনো এবং নতুন উভয় ফাংশনই সাময়িকভাবে চালু হবে।
- Firebase CLI ব্যবহার করে প্রোডাকশন থেকে পুরোনো ফাংশনটি সুস্পষ্টভাবে মুছে ফেলুন।
উদাহরণস্বরূপ, যদি আপনার objectChanged নামের একটি Node.js ফাংশন থাকে যার ইভেন্ট টাইপটি পুরোনো onChange , এবং আপনি সেটিকে onFinalize এ পরিবর্তন করতে চান, তাহলে প্রথমে ফাংশনটির নাম পরিবর্তন করুন এবং সেটিকে সম্পাদনা করে onFinalize ইভেন্ট টাইপটি যুক্ত করুন।
// before
const functions = require('firebase-functions/v1');
exports.objectChanged = functions.storage.object().onChange((object) => {
return console.log('File name is: ', object.name);
});
// after
const functions = require('firebase-functions/v1');
exports.objectFinalized = functions.storage.object().onFinalize((object) => {
return console.log('File name is: ', object.name);
});
তারপর পুরানো ফাংশনটি মুছে ফেলার আগে, নতুন ফাংশনটি তৈরি করতে নিম্নলিখিত কমান্ডগুলি চালান:
# Create new function objectFinalized firebase deploy --only functions:objectFinalized # Wait until deployment is done; now both objectChanged and objectFinalized are running # Delete objectChanged firebase functions:delete objectChanged
রানটাইম বিকল্পগুলি সেট করুন
Cloud Functions for Firebase আপনাকে Node.js রানটাইম ভার্সন, প্রতিটি ফাংশনের জন্য টাইমআউট, মেমরি বরাদ্দ এবং সর্বনিম্ন/সর্বোচ্চ ফাংশন ইনস্ট্যান্সের মতো রানটাইম অপশনগুলো নির্বাচন করার সুযোগ দেয়।
একটি উত্তম অনুশীলন হিসেবে, এই অপশনগুলো (Node.js সংস্করণ ছাড়া) ফাংশন কোডের ভেতরে একটি কনফিগারেশন অবজেক্টে সেট করা উচিত। এই RuntimeOptions অবজেক্টটিই আপনার ফাংশনের রানটাইম অপশনগুলোর মূল উৎস, এবং এটি অন্য যেকোনো পদ্ধতিতে (যেমন Google Cloud কনসোল বা gcloud CLI-এর মাধ্যমে) সেট করা অপশনগুলোকে ওভাররাইড করবে।
যদি আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে গুগল ক্লাউড কনসোল বা gcloud CLI-এর মাধ্যমে ম্যানুয়ালি রানটাইম অপশন সেট করা অন্তর্ভুক্ত থাকে এবং আপনি না চান যে প্রতিটি ডিপ্লয়ের সময় এই মানগুলি ওভাররাইড হয়ে যাক, তাহলে preserveExternalChanges অপশনটি true তে সেট করুন। এই অপশনটি true তে সেট করা থাকলে, Firebase আপনার কোডে সেট করা রানটাইম অপশনগুলিকে আপনার ফাংশনের বর্তমানে-ডিপ্লয় করা সংস্করণের সেটিংসের সাথে নিম্নলিখিত অগ্রাধিকার অনুসারে মার্জ করে:
- ফাংশন কোডে একটি অপশন সেট করা আছে: বাহ্যিক পরিবর্তনসমূহকে অগ্রাহ্য করা।
- ফাংশন কোডে অপশনটি
RESET_VALUEতে সেট করা আছে: বাহ্যিক পরিবর্তনগুলোকে ডিফল্ট মান দিয়ে ওভাররাইড করার জন্য। - ফাংশন কোডে অপশনটি সেট করা নেই, কিন্তু বর্তমানে ডেপ্লয় করা ফাংশনে সেট করা আছে: ডেপ্লয় করা ফাংশনে নির্দিষ্ট করা অপশনটি ব্যবহার করুন।
বেশিরভাগ ক্ষেত্রে preserveExternalChanges: true অপশনটি ব্যবহার করার পরামর্শ দেওয়া হয় না , কারণ সেক্ষেত্রে আপনার ফাংশনগুলোর রানটাইম অপশনের জন্য আপনার কোড আর তথ্যের সম্পূর্ণ উৎস থাকবে না। যদি আপনি এটি ব্যবহার করেন, তবে কোনো ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে Google Cloud কনসোল অথবা gcloud CLI ব্যবহার করুন।
Node.js সংস্করণ সেট করুন
ক্লাউড ফাংশনের জন্য Firebase এসডিকে (Firebase SDK for Cloud Functions ) একাধিক নোড.জেএস (Node.js) রানটাইম বেছে নেওয়ার সুযোগ দেয়। আপনি একটি প্রোজেক্টের সমস্ত ফাংশন শুধুমাত্র এই সমর্থিত নোড.জেএস সংস্করণগুলির মধ্যে যেকোনো একটির সাথে সঙ্গতিপূর্ণ রানটাইম এনভায়রনমেন্টে চালানোর জন্য নির্বাচন করতে পারেন:
- নোড.জেএস ২২
- নোড.জেএস ২০
- নোড.জেএস ১৮ (অপ্রচলিত)
Node.js-এর এই সংস্করণগুলির চলমান সমর্থন সংক্রান্ত গুরুত্বপূর্ণ তথ্যের জন্য সমর্থন সময়সূচী দেখুন।
Node.js সংস্করণ সেট করতে:
ইনিশিয়ালাইজেশনের সময় আপনার functions/ ডিরেক্টরিতে তৈরি হওয়া package.json ফাইলের engines ফিল্ডে আপনি ভার্সনটি সেট করতে পারেন। উদাহরণস্বরূপ, শুধুমাত্র ভার্সন ২০ ব্যবহার করতে, package.json এর এই লাইনটি এডিট করুন:
"engines": {"node": "22"}
যদি আপনি ইয়ার্ন (Yarn) প্যাকেজ ম্যানেজার ব্যবহার করেন অথবা engines ফিল্ডের জন্য আপনার অন্য কোনো নির্দিষ্ট প্রয়োজনীয়তা থাকে, তাহলে আপনি এর পরিবর্তে firebase.json এ Cloud Functions জন্য Firebase SDK for Cloud Functions)-এর রানটাইম সেট করতে পারেন:
{
"functions": {
"runtime": "nodejs22"
}
}
package.json এ আপনি আলাদাভাবে সেট করা যেকোনো মান বা পরিসরের চেয়ে firebase.json এ সেট করা মানটিকেই CLI অগ্রাধিকার দেয়।
আপনার Node.js রানটাইম আপগ্রেড করুন
আপনার Node.js রানটাইম আপগ্রেড করতে:
- আপনার প্রজেক্টটি ব্লেজ প্রাইসিং প্ল্যানের অন্তর্ভুক্ত আছে কিনা, তা নিশ্চিত করুন।
- নিশ্চিত করুন যে আপনি Firebase CLI v11.18.0 বা তার পরবর্তী সংস্করণ ব্যবহার করছেন।
- ইনিশিয়ালাইজেশনের সময় আপনার
functions/ডিরেক্টরিতে তৈরি হওয়াpackage.jsonফাইলেরenginesভ্যালুটি পরিবর্তন করুন। উদাহরণস্বরূপ, আপনি যদি ভার্সন ১৬ থেকে ভার্সন ১৮-এ আপগ্রেড করেন, তাহলে এন্ট্রিটি দেখতে এইরকম হবে:"engines": {"node": "18"} - ঐচ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তনগুলি পরীক্ষা করে দেখুন।
- সমস্ত ফাংশন পুনরায় স্থাপন করুন।
একটি Node.js মডিউল সিস্টেম বেছে নিন
Node.js-এর ডিফল্ট মডিউল সিস্টেম হলো CommonJS (CJS), কিন্তু Node.js-এর বর্তমান সংস্করণগুলো ECMAScript মডিউল (ESM)-কেও সমর্থন করে। Cloud Functions উভয়কেই সমর্থন করে।
ডিফল্টরূপে, আপনার ফাংশনগুলো CommonJS ব্যবহার করে। তার মানে ইম্পোর্ট এবং এক্সপোর্টগুলো দেখতে এইরকম:
const functions = require("firebase-functions/v1");
exports.helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));
এর পরিবর্তে ESM ব্যবহার করতে, আপনার package.json ফাইলে "type": "module" ফিল্ডটি সেট করুন:
{
...
"type": "module",
...
}
একবার এটি সেট করে নিলে, ESM import এবং export সিনট্যাক্স ব্যবহার করুন:
import functions from "firebase-functions/v1";
export const helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));
উভয় মডিউল সিস্টেমই সম্পূর্ণরূপে সমর্থিত। আপনি আপনার প্রোজেক্টের জন্য সবচেয়ে উপযুক্তটি বেছে নিতে পারেন। মডিউল সম্পর্কে আরও জানতে Node.js ডকুমেন্টেশন দেখুন।
স্কেলিং আচরণ নিয়ন্ত্রণ করুন
ডিফল্টরূপে, Cloud Functions for Firebase আগত অনুরোধের সংখ্যার উপর ভিত্তি করে চলমান ইনস্ট্যান্সের সংখ্যা পরিবর্তন করে, এবং ট্র্যাফিক কমে গেলে ইনস্ট্যান্সের সংখ্যা শূন্য পর্যন্ত কমিয়ে আনতে পারে। তবে, যদি আপনার অ্যাপের ল্যাটেন্সি কমানোর প্রয়োজন হয় এবং আপনি কোল্ড স্টার্টের সংখ্যা সীমিত করতে চান, তাহলে অনুরোধ পরিবেশনের জন্য প্রস্তুত ও ওয়ার্ম রাখার জন্য ন্যূনতম সংখ্যক কন্টেইনার ইনস্ট্যান্স নির্দিষ্ট করে দিয়ে আপনি এই ডিফল্ট আচরণটি পরিবর্তন করতে পারেন।
একইভাবে, আগত অনুরোধের প্রতিক্রিয়ায় ইনস্ট্যান্সের স্কেলিং সীমিত করতে আপনি একটি সর্বোচ্চ সংখ্যা নির্ধারণ করতে পারেন। আপনার খরচ নিয়ন্ত্রণ করতে অথবা ডেটাবেসের মতো কোনো সহায়ক পরিষেবার সাথে সংযোগের সংখ্যা সীমিত করতে এই সেটিংটি ব্যবহার করুন।
ঠান্ডা অবস্থায় ইঞ্জিন চালু করার সংখ্যা কমান।
সোর্স কোডে কোনো ফাংশনের জন্য ন্যূনতম সংখ্যক ইনস্ট্যান্স সেট করতে, runWith মেথডটি ব্যবহার করুন। এই মেথডটি RuntimeOptions ইন্টারফেস অনুযায়ী একটি JSON অবজেক্ট গ্রহণ করে, যা minInstances এর মান নির্ধারণ করে। উদাহরণস্বরূপ, এই ফাংশনটি `keep warm`-এর জন্য ন্যূনতম ৫টি ইনস্ট্যান্স সেট করে:
exports.getAutocompleteResponse = functions
.runWith({
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
})
.https.onCall((data, context) => {
// Autocomplete a user's search term
});
minInstances এর মান নির্ধারণ করার সময় কিছু বিষয় বিবেচনা করতে হবে:
- যদি Cloud Functions for Firebase আপনার অ্যাপকে আপনার
minInstancesসেটিংয়ের চেয়ে বেশি স্কেল করে, তাহলে সেই সীমার উপরের প্রতিটি ইনস্ট্যান্সের জন্য একটি কোল্ড স্টার্ট হবে। - যেসব অ্যাপে ট্র্যাফিক হঠাৎ বেড়ে যায় বা হঠাৎ হঠাৎ বৃদ্ধি পায়, সেগুলোর উপর কোল্ড স্টার্টের প্রভাব সবচেয়ে মারাত্মক। যদি আপনার অ্যাপে ট্র্যাফিক হঠাৎ বেড়ে যায় এবং আপনি
minInstancesমান এত বেশি রাখেন যে প্রতিবার ট্র্যাফিক বাড়ার সাথে সাথে কোল্ড স্টার্ট কমে যায়, তাহলে আপনি ল্যাটেন্সি উল্লেখযোগ্যভাবে হ্রাস পেতে দেখবেন। যেসব অ্যাপে ট্র্যাফিক স্থির থাকে, সেগুলোর ক্ষেত্রে কোল্ড স্টার্ট পারফরম্যান্সকে মারাত্মকভাবে প্রভাবিত করার সম্ভাবনা কম। প্রোডাকশন এনভায়রনমেন্টের জন্য ন্যূনতম ইনস্ট্যান্স সেট করা যুক্তিযুক্ত হতে পারে, কিন্তু টেস্টিং এনভায়রনমেন্টে এটি সাধারণত এড়িয়ে চলা উচিত। আপনার টেস্ট প্রজেক্টে স্কেল টু জিরো করতে এবং একই সাথে প্রোডাকশন প্রজেক্টে কোল্ড স্টার্ট কমাতে, আপনি
FIREBASE_CONFIGএনভায়রনমেন্ট ভেরিয়েবলের উপর ভিত্তি করেminInstancesসেট করতে পারেন:// Get Firebase project id from `FIREBASE_CONFIG` environment variable const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId; exports.renderProfilePage = functions .runWith({ // Keep 5 instances warm for this latency-critical function // in production only. Default to 0 for test projects. minInstances: envProjectId === "my-production-project" ? 5 : 0, }) .https.onRequest((req, res) => { // render some html });
একটি ফাংশনের ইনস্ট্যান্সের সর্বোচ্চ সংখ্যা সীমিত করুন।
ফাংশন সোর্স কোডে সর্বোচ্চ ইনস্ট্যান্স সংখ্যা নির্ধারণ করতে, ` runWith মেথডটি ব্যবহার করুন। এই মেথডটি RuntimeOptions ইন্টারফেস অনুযায়ী একটি JSON অবজেক্ট গ্রহণ করে, যা maxInstances জন্য মান নির্ধারণ করে। উদাহরণস্বরূপ, এই ফাংশনটি একটি কাল্পনিক লিগ্যাসি ডেটাবেসকে অতিরিক্ত চাপে না ফেলার জন্য ১০০টি ইনস্ট্যান্সের একটি সীমা নির্ধারণ করে:
exports.mirrorOrdersToLegacyDatabase = functions
.runWith({
// Legacy database only supports 100 simultaneous connections
maxInstances: 100,
})
.firestore.document("orders/{orderId}")
.onWrite((change, context) => {
// Connect to legacy database
});
যদি কোনো HTTP ফাংশনকে maxInstances সীমা পর্যন্ত স্কেল আপ করা হয়, তাহলে নতুন অনুরোধগুলি ৩০ সেকেন্ডের জন্য সারিবদ্ধ করা হয় এবং ততক্ষণে কোনো ইনস্ট্যান্স উপলব্ধ না থাকলে 429 Too Many Requests প্রতিক্রিয়া কোড দিয়ে প্রত্যাখ্যান করা হয়।
সর্বোচ্চ ইনস্ট্যান্স সেটিংস ব্যবহারের সর্বোত্তম পদ্ধতি সম্পর্কে আরও জানতে, maxInstances ব্যবহারের এই সর্বোত্তম পদ্ধতিগুলো দেখুন।
একটি পরিষেবা অ্যাকাউন্ট সেট করুন
প্রথম প্রজন্মের ফাংশনগুলির জন্য ডিফল্ট সার্ভিস অ্যাকাউন্ট, PROJECT_ID @ appspot.gserviceaccount.com (যার নাম ‘অ্যাপ ইঞ্জিন ডিফল্ট সার্ভিস অ্যাকাউন্ট ’), এর বিস্তৃত অনুমতি রয়েছে যা আপনাকে অন্যান্য ফায়ারবেস এবং গুগল ক্লাউড পরিষেবাগুলির সাথে যোগাযোগ করতে সক্ষম করে।
আপনি হয়তো ডিফল্ট সার্ভিস অ্যাকাউন্টটি ওভাররাইড করে কোনো ফাংশনকে শুধুমাত্র প্রয়োজনীয় রিসোর্সের মধ্যে সীমাবদ্ধ রাখতে চাইতে পারেন। একটি কাস্টম সার্ভিস অ্যাকাউন্ট তৈরি করে এবং .runWith() মেথড ব্যবহার করে সেটিকে উপযুক্ত ফাংশনে অ্যাসাইন করার মাধ্যমে আপনি এটি করতে পারেন। এই মেথডটি কনফিগারেশন অপশনসহ একটি অবজেক্ট গ্রহণ করে, যার মধ্যে serviceAccount প্রপার্টিটিও অন্তর্ভুক্ত থাকে।
const functions = require("firebase-functions/v1");
exports.helloWorld = functions
.runWith({
// 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"
})
.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
টাইমআউট এবং মেমরি বরাদ্দ সেট করুন
কিছু ক্ষেত্রে, আপনার ফাংশনগুলির জন্য দীর্ঘ টাইমআউট মান বা বেশি পরিমাণে মেমরি বরাদ্দের মতো বিশেষ প্রয়োজন থাকতে পারে। আপনি এই মানগুলি Google Cloud Console-এ অথবা ফাংশনের সোর্স কোডে (শুধুমাত্র Firebase-এর জন্য) সেট করতে পারেন।
ফাংশনের সোর্স কোডে মেমরি অ্যালোকেশন এবং টাইমআউট সেট করতে, Firebase SDK for Cloud Functions 2.0.0-এ প্রবর্তিত runWith প্যারামিটারটি ব্যবহার করুন। এই রানটাইম অপশনটি RuntimeOptions ইন্টারফেস অনুযায়ী একটি JSON অবজেক্ট গ্রহণ করে, যা timeoutSeconds এবং memory জন্য মান নির্ধারণ করে। উদাহরণস্বরূপ, এই স্টোরেজ ফাংশনটি 1GB মেমরি ব্যবহার করে এবং 300 সেকেন্ড পরে টাইমআউট হয়ে যায়:
exports.convertLargeFile = functions
.runWith({
// Ensure the function has enough memory and time
// to process large files
timeoutSeconds: 300,
memory: "1GB",
})
.storage.object()
.onFinalize((object) => {
// Do some complicated things that take a lot of memory and time
});
timeoutSeconds এর সর্বোচ্চ মান হলো 540 , বা ৯ মিনিট। একটি ফাংশনকে যে পরিমাণ মেমরি বরাদ্দ করা হয়, তা সেই ফাংশনের জন্য বরাদ্দকৃত সিপিইউ-এর সমানুপাতিক, যেমনটি memory জন্য বৈধ মানগুলির এই তালিকায় বিস্তারিতভাবে উল্লেখ করা হয়েছে:
-
128MB— ২০০ মেগাহার্টজ -
256MB— ৪০০ মেগাহার্টজ -
512MB— ৮০০ মেগাহার্টজ -
1GB— ১.৪ গিগাহার্টজ -
2GB— ২.৪ গিগাহার্টজ -
4GB— ৪.৮ গিগাহার্টজ -
8GB— ৪.৮ গিগাহার্টজ
Google Cloud কনসোলে মেমরি বরাদ্দ এবং টাইমআউট সেট করতে:
- Google Cloud কনসোলে বাম দিকের মেনু থেকে Cloud Functions নির্বাচন করুন।
- ফাংশন তালিকা থেকে কোনো ফাংশনের নামের উপর ক্লিক করে সেটি নির্বাচন করুন।
- উপরের মেনুতে থাকা এডিট আইকনে ক্লিক করুন।
- ‘Memory allocated’ লেবেলযুক্ত ড্রপ-ডাউন মেনু থেকে একটি মেমরি বরাদ্দ নির্বাচন করুন।
- উন্নত বিকল্পগুলি দেখতে 'More'-এ ক্লিক করুন এবং 'Timeout ' টেক্সট বক্সে সেকেন্ডের সংখ্যা লিখুন।
- ফাংশনটি আপডেট করতে সেভ-এ ক্লিক করুন।