ফাংশন ম্যানেজ করা (১ম জেনারেশন)

আপনি 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/ ফোল্ডারে খোঁজে। আপনি চাইলে, কোডবেস বা একাধিক ফাইলের সেটে ফাংশন সাজাতে পারেন।

ফাংশন মোছা

আপনি এইসব উপায়ে আগে ডিপ্লয় করা ফাংশন মুছে দিতে পারবেন:

  • functions:delete-এর সাথে Firebase CLI-তে স্পষ্টভাবে
  • 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 আপনার সোর্স পার্স করে এবং ফাইল থেকে সরিয়ে দেওয়া হয়েছে এমন যেকোনও ফাংশন প্রোডাকশন থেকে সরিয়ে দেয়।

ফাংশনের নাম, অঞ্চল বা ট্রিগার পরিবর্তন করা

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

ফাংশনের নাম পরিবর্তন করা

ফাংশনের নাম পরিবর্তন করতে, আপনার সোর্সে ফাংশনের একটি নতুন নাম পরিবর্তন করা ভার্সন তৈরি করুন এবং তারপরে দুটি আলাদা আলাদা ডিপ্লয়মেন্ট কমান্ড চালান। প্রথম কমান্ডটি নতুন নামযুক্ত ফাংশনটি ডেপ্লয় করে এবং দ্বিতীয় কমান্ডটি আগে ডেপ্লয় করা ভার্সনটি সরিয়ে দেয়। যেমন, আপনার কাছে 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

ফাংশনের অঞ্চল বা একাধিক অঞ্চল পরিবর্তন করা

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

  1. ফাংশনের নাম পরিবর্তন করুন এবং পছন্দমতো সেটির অঞ্চল বা অঞ্চলগুলি পরিবর্তন করুন।
  2. নাম পরিবর্তন করা ফাংশনটি ডিপ্লয় করুন, এর ফলে সাময়িকভাবে দুটি সেট অঞ্চলেই একই কোড রান করবে।
  3. আগের ফাংশনটি মুছে দিন।

যেমন, আপনার যদি 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 রান করানোর মাধ্যমে কোনও ফাংশনের ইভেন্টের ধরন পরিবর্তন করা সম্ভব নয়। সমস্যা এড়াতে, এই পদ্ধতি অনুসরণ করে কোনও ফাংশনের ট্রিগার টাইপ পরিবর্তন করুন:

  1. কাঙ্ক্ষিত ট্রিগার টাইপ সহ নতুন ফাংশন যোগ করতে সোর্স কোড পরিবর্তন করুন।
  2. ফাংশনটি ডেপ্লয় করুন, এর ফলে পুরনো ও নতুন, দুটি ফাংশনই সাময়িকভাবে রান করবে।
  3. 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) ব্যবহার করে সেট করা বিকল্পকে ওভাররাইড করবে।

আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে যদি Google Cloud কনসোল বা gcloud CLI ব্যবহার করে রানটাইম বিকল্প ম্যানুয়ালি সেট করা হয় এবং আপনি না চান যে প্রতিটি ডিপ্লয়মেন্টে এইসব ভ্যালু ওভাররাইড করা হোক, তাহলে preserveExternalChanges বিকল্পটি true হিসেবে সেট করুন। এই বিকল্পটি true হিসেবে সেট করা থাকলে, Firebase আপনার কোডে সেট করা রানটাইম বিকল্পের সাথে আপনার ফাংশনের বর্তমানে ডিপ্লয় করা ভার্সনের সেটিংস নিচের অগ্রাধিকার অনুযায়ী মার্জ করে:

  1. ফাংশন কোডে বিকল্প সেট করা আছে: এক্সটার্নাল পরিবর্তন ওভাররাইড করুন।
  2. ফাংশন কোডে বিকল্পটি RESET_VALUE হিসেবে সেট করা আছে: ডিফল্ট ভ্যালু দিয়ে এক্সটার্নাল পরিবর্তন ওভাররাইড করুন।
  3. ফাংশন কোডে বিকল্প সেট করা নেই, কিন্তু বর্তমানে ডিপ্লয় করা ফাংশনে সেট করা আছে: ডিপ্লয় করা ফাংশনে উল্লেখ করা বিকল্প ব্যবহার করুন।

বেশিরভাগ পরিস্থিতির জন্য preserveExternalChanges: true বিকল্প ব্যবহার করার সুপারিশ করা হয় না কারণ আপনার ফাংশনের রানটাইম বিকল্পের জন্য আপনার কোড আর সম্পূর্ণ সোর্স অফ ট্রুথ থাকবে না। আপনি এটি ব্যবহার করলে, Google Cloud কনসোল চেক করুন অথবা কোনও ফাংশনের সম্পূর্ণ কনফিগারেশন দেখতে gcloud CLI ব্যবহার করুন।

Node.js ভার্সন সেট করা

Firebase-এর জন্য SDK Cloud Functions, Node.js রানটাইম বেছে নেওয়ার অনুমতি দেয়। আপনি কোনও প্রজেক্টের সমস্ত ফাংশন শুধুমাত্র রানটাইম এনভায়রনমেন্টে চালানোর বিকল্প বেছে নিতে পারেন, যা এইসব কাজ করে এমন Node.js ভার্সনের মধ্যে একটির সাথে সম্পর্কিত:

  • Node.js 22
  • Node.js 20
  • Node.js 18 (বন্ধ করে দেওয়া হয়েছে)

Node.js-এর এই ভার্সনগুলির জন্য চলমান সহায়তা সংক্রান্ত গুরুত্বপূর্ণ তথ্য পেতে সহায়তা শিডিউল দেখুন।

Node.js ভার্সন সেট করতে:

ইনিশিয়ালাইজেশনের সময় আপনার functions/ ডিরেক্টরিতে তৈরি হওয়া package.json ফাইলের engines ফিল্ডে আপনি ভার্সন সেট করতে পারবেন। যেমন, শুধুমাত্র ভার্সন ২০ ব্যবহার করতে, package.json-এ এই লাইনটি এডিট করুন:

  "engines": {"node": "22"}

আপনি Yarn প্যাকেজ ম্যানেজার ব্যবহার করলে অথবা engines ফিল্ডের জন্য অন্য কোনও নির্দিষ্ট প্রয়োজনীয়তা থাকলে, আপনি Cloud Functions-এর জন্য Firebase SDK-এর রানটাইম firebase.json-এ সেট করতে পারেন:

  {
    "functions": {
      "runtime": "nodejs22"
    }
  }

CLI, package.json-এ আলাদাভাবে সেট করা যেকোনও ভ্যালু বা রেঞ্জের পরিবর্তে firebase.json-এ সেট করা ভ্যালু ব্যবহার করে।

আপনার Node.js রানটাইম আপগ্রেড করা

আপনার Node.js রানটাইম আপগ্রেড করতে:

  1. আপনার প্রোজেক্ট Blaze প্রাইসিং প্ল্যানে আছে কিনা তা ভাল করে দেখে নিন।
  2. আপনি Firebase CLI v11.18.0 বা এর পরের যেকোনও ভার্সন ব্যবহার করছেন কিনা তা ভালোভাবে দেখে নিন।
  3. ইনিশিয়ালাইজেশনের সময় আপনার functions/ ডিরেক্টরিতে তৈরি হওয়া package.json ফাইলে engines ভ্যালু পরিবর্তন করুন। যেমন, আপনি যদি ভার্সন ১৬ থেকে ভার্সন ১৮-এ আপগ্রেড করেন, তাহলে এন্ট্রিটি এইরকম দেখতে হবে: "engines": {"node": "18"}
  4. ঐচ্ছিকভাবে, Firebase Local Emulator Suite ব্যবহার করে আপনার পরিবর্তন পরীক্ষা করুন।
  5. সব ফাংশন আবার ডেপ্লয় করুন।

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-এর ভ্যালু নির্ধারণ করে। যেমন, এই ফাংশনটি গরম রাখার জন্য ন্যূনতম ৫টি ইনস্ট্যান্স সেট করে:

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 (App Engine ডিফল্ট পরিষেবা অ্যাকাউন্ট নামে পরিচিত), আপনাকে অন্যান্য Firebase ও Google Cloud পরিষেবার সাথে ইন্টার‍্যাক্ট করার অনুমতি দেওয়ার জন্য এতে অনুমতির একটি বিস্তৃত সেট আছে।

আপনি ডিফল্ট পরিষেবা অ্যাকাউন্ট ওভাররাইড করতে এবং কোনও ফাংশনকে ঠিক প্রয়োজনীয় রিসোর্সে সীমাবদ্ধ করতে চাইতে পারেন। আপনি কাস্টম পরিষেবা অ্যাকাউন্ট তৈরি করে এবং .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-এর ভ্যালু নির্ধারণ করে। যেমন, এই স্টোরেজ ফাংশন ১ জিবি মেমরি ব্যবহার করে এবং ৩০০ সেকেন্ড পরে টাইম-আউট হয়ে যায়:

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 বা ৯ মিনিট। ফাংশনকে দেওয়া মেমরির পরিমাণ, ফাংশনের জন্য বরাদ্দ করা CPU-এর সাথে সম্পর্কিত যা memory-এর জন্য বৈধ ভ্যালুর এই তালিকায় বিস্তারিতভাবে দেওয়া আছে:

  • 128MB — 200MHz
  • 256MB — 400MHz
  • 512MB — 800MHz
  • 1GB — ১.৪ GHz
  • 2GB — ২.৪ GHz
  • 4GB — ৪.৮ GHz
  • 8GB — ৪.৮ GHz

Google Cloud কনসোলে মেমরি অ্যালোকেশন ও টাইম-আউট সেট করতে:

  1. Google Cloud কনসোলে, বাঁদিকের মেনু থেকে Cloud Functions বেছে নিন।
  2. ফাংশনের তালিকায় সেটির নামে ক্লিক করে একটি ফাংশন বেছে নিন।
  3. উপরের মেনুতে এডিট করুন আইকনে ক্লিক করুন।
  4. অ্যালোকেট করা মেমরি লেবেলযুক্ত ড্রপডাউন মেনু থেকে মেমরি অ্যালোকেশন বেছে নিন।
  5. উন্নত বিকল্প দেখতে আরও বিকল্পে ক্লিক করুন এবং টাইম-আউট টেক্সট বক্সে সেকেন্ডের সংখ্যা লিখুন।
  6. ফাংশন আপডেট করতে সেভ করুন বিকল্পে ক্লিক করুন।