শুরু করুন: লিখুন, পরীক্ষা করুন এবং আপনার প্রথম ফাংশন স্থাপন করুন

Cloud Functions ব্যবহার শুরু করতে, এই টিউটোরিয়ালটি অনুসরণ করার চেষ্টা করুন, যা প্রয়োজনীয় সেটআপ কাজগুলো দিয়ে শুরু হয় এবং ধাপে ধাপে দুটি সম্পর্কিত ফাংশন তৈরি, পরীক্ষা ও স্থাপন করার পদ্ধতি দেখায়:

  • একটি "বার্তা যোগ করুন" ফাংশন, যা এমন একটি URL প্রদান করে যা একটি টেক্সট ভ্যালু গ্রহণ করে এবং সেটিকে Cloud Firestore লিখে রাখে।
  • একটি 'মেক আপারকেস' ফাংশন যা Cloud Firestore লেখার সময় সক্রিয় হয় এবং টেক্সটকে আপারকেসে রূপান্তর করে।

ফাংশনগুলো সহ সম্পূর্ণ নমুনা কোডটি নিচে দেওয়া হলো:

নোড.জেএস

// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/https");
const {onDocumentCreated} = require("firebase-functions/firestore");

// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await getFirestore()
      .collection("messages")
      .add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

পাইথন

# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()


@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
    """Take the text parameter passed to this HTTP endpoint and insert it into
    a new document in the messages collection."""
    # Grab the text parameter.
    original = req.args.get("text")
    if original is None:
        return https_fn.Response("No text parameter provided", status=400)

    firestore_client: google.cloud.firestore.Client = firestore.client()

    # Push the new message into Cloud Firestore using the Firebase Admin SDK.
    _, doc_ref = firestore_client.collection("messages").add({"original": original})

    # Send back a message that we've successfully written the message
    return https_fn.Response(f"Message with ID {doc_ref.id} added.")


@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

এই টিউটোরিয়াল সম্পর্কে

এই স্যাম্পলটির জন্য আমরা Cloud Firestore এবং HTTP-ট্রিগারড ফাংশন বেছে নিয়েছি, কারণ এই ব্যাকগ্রাউন্ড ট্রিগারগুলো Firebase Local Emulator Suite মাধ্যমে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করা যায়। এই টুলসেটটি Realtime Database , Cloud Storage , পাবসাব, অথ এবং HTTP কলযোগ্য ট্রিগারগুলোকেও সমর্থন করে। অন্যান্য ধরনের ব্যাকগ্রাউন্ড ট্রিগার, যেমন Remote Config এবং টেস্টল্যাব ট্রিগার, এই পৃষ্ঠায় বর্ণিত নয় এমন টুলসেট ব্যবহার করে ইন্টারেক্টিভভাবে পরীক্ষা করা যেতে পারে।

এই টিউটোরিয়ালের পরবর্তী অংশগুলোতে নমুনাটি বিল্ড, টেস্ট এবং ডিপ্লয় করার জন্য প্রয়োজনীয় ধাপগুলো বিস্তারিতভাবে বর্ণনা করা হয়েছে।

একটি ফায়ারবেস প্রজেক্ট তৈরি করুন

Firebase বা Cloud-এ নতুন

আপনি যদি Firebase বা Google Cloud এ নতুন হন, তাহলে এই ধাপগুলো অনুসরণ করুন।
আপনি যদি সম্পূর্ণ নতুন একটি Firebase প্রজেক্ট (এবং এর অন্তর্নিহিত Google Cloud প্রজেক্ট) তৈরি করতে চান, তাহলেও এই ধাপগুলো অনুসরণ করতে পারেন।

  1. Firebase কনসোলে সাইন ইন করুন।
  2. নতুন ফায়ারবেস প্রজেক্ট তৈরি করতে বাটনটিতে ক্লিক করুন।
  3. টেক্সট ফিল্ডে একটি প্রজেক্টের নাম লিখুন।

    আপনি যদি কোনো Google Cloud অর্গের অংশ হন, তাহলে আপনি ঐচ্ছিকভাবে বেছে নিতে পারেন কোন ফোল্ডারে আপনার প্রজেক্টটি তৈরি করবেন।

  4. অনুরোধ করা হলে, Firebase-এর শর্তাবলী পর্যালোচনা করে গ্রহণ করুন, তারপর ' চালিয়ে যান' (Continue ) বোতামে ক্লিক করুন।
  5. (ঐচ্ছিক) Firebase কনসোলে AI সহায়তা (যাকে "Gemini in Firebase" বলা হয়) সক্রিয় করুন, যা আপনাকে কাজ শুরু করতে এবং আপনার উন্নয়ন প্রক্রিয়াকে সুবিন্যস্ত করতে সাহায্য করতে পারে।
  6. (ঐচ্ছিক) আপনার প্রোজেক্টের জন্য Google Analytics সেট আপ করুন, যা নিম্নলিখিত ফায়ারবেস প্রোডাক্টগুলো ব্যবহারের ক্ষেত্রে সর্বোত্তম অভিজ্ঞতা প্রদান করে: Firebase A/B Testing , Cloud Messaging , Crashlytics , In-App Messaging এবং Remote Config ( পার্সোনালাইজেশন সহ)।

    একটি বিদ্যমান Google Analytics অ্যাকাউন্ট নির্বাচন করুন অথবা একটি নতুন অ্যাকাউন্ট তৈরি করুন। যদি আপনি একটি নতুন অ্যাকাউন্ট তৈরি করেন, তাহলে আপনার Analytics রিপোর্টিং লোকেশন নির্বাচন করুন, তারপর আপনার প্রোজেক্টের জন্য ডেটা শেয়ারিং সেটিংস এবং Google Analytics শর্তাবলী গ্রহণ করুন।

  7. প্রজেক্ট তৈরি করুন -এ ক্লিক করুন।

ফায়ারবেস আপনার প্রজেক্ট তৈরি করে, কিছু প্রাথমিক রিসোর্স সরবরাহ করে এবং গুরুত্বপূর্ণ এপিআইগুলো সক্রিয় করে। প্রক্রিয়াটি সম্পন্ন হলে, আপনাকে Firebase কনসোলে আপনার ফায়ারবেস প্রজেক্টের ওভারভিউ পৃষ্ঠায় নিয়ে যাওয়া হবে।

বিদ্যমান ক্লাউড প্রকল্প

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

  1. যে অ্যাকাউন্টটি দিয়ে আপনি বর্তমান Google Cloud প্রজেক্টে অ্যাক্সেস পান, সেটি দিয়ে Firebase কনসোলে সাইন ইন করুন।
  2. নতুন ফায়ারবেস প্রজেক্ট তৈরি করতে বাটনটিতে ক্লিক করুন।
  3. পেজের একদম নিচে, ‘Add Firebase to Google Cloud project’-এ ক্লিক করুন।
  4. টেক্সট ফিল্ডে বিদ্যমান প্রজেক্টটির নাম টাইপ করা শুরু করুন এবং তারপরে প্রদর্শিত তালিকা থেকে প্রজেক্টটি নির্বাচন করুন।
  5. প্রজেক্ট খুলুন -এ ক্লিক করুন।
  6. অনুরোধ করা হলে, Firebase-এর শর্তাবলী পর্যালোচনা করে গ্রহণ করুন, তারপর ' চালিয়ে যান' (Continue ) বোতামে ক্লিক করুন।
  7. (ঐচ্ছিক) Firebase কনসোলে AI সহায়তা (যাকে "Gemini in Firebase" বলা হয়) সক্রিয় করুন, যা আপনাকে কাজ শুরু করতে এবং আপনার উন্নয়ন প্রক্রিয়াকে সুবিন্যস্ত করতে সাহায্য করতে পারে।
  8. (ঐচ্ছিক) আপনার প্রোজেক্টের জন্য Google Analytics সেট আপ করুন, যা নিম্নলিখিত ফায়ারবেস প্রোডাক্টগুলো ব্যবহারের ক্ষেত্রে সর্বোত্তম অভিজ্ঞতা প্রদান করে: Firebase A/B Testing , Cloud Messaging , Crashlytics , In-App Messaging এবং Remote Config ( পার্সোনালাইজেশন সহ)।

    একটি বিদ্যমান Google Analytics অ্যাকাউন্ট নির্বাচন করুন অথবা একটি নতুন অ্যাকাউন্ট তৈরি করুন। যদি আপনি একটি নতুন অ্যাকাউন্ট তৈরি করেন, তাহলে আপনার Analytics রিপোর্টিং লোকেশন নির্বাচন করুন, তারপর আপনার প্রোজেক্টের জন্য ডেটা শেয়ারিং সেটিংস এবং Google Analytics শর্তাবলী গ্রহণ করুন।

  9. ফায়ারবেস যোগ করুন -এ ক্লিক করুন।

ফায়ারবেস আপনার বিদ্যমান প্রজেক্টে এটি যুক্ত করে । প্রক্রিয়াটি সম্পন্ন হলে, আপনাকে Firebase কনসোলে আপনার ফায়ারবেস প্রজেক্টের ওভারভিউ পেজে নিয়ে যাওয়া হবে।

আপনার পরিবেশ এবং Firebase CLI সেট আপ করুন।

নোড.জেএস

ফাংশন লেখার জন্য আপনার একটি Node.js এনভায়রনমেন্ট এবং Cloud Functions রানটাইমে ফাংশন ডিপ্লয় করার জন্য Firebase CLI প্রয়োজন হবে। Node.js এবং npm ইনস্টল করার জন্য Node Version Manager ব্যবহার করার পরামর্শ দেওয়া হয়।

একবার আপনার Node.js এবং npm ইনস্টল হয়ে গেলে, আপনার পছন্দের পদ্ধতিতে Firebase CLI ইনস্টল করুন । npm-এর মাধ্যমে CLI ইনস্টল করতে, ব্যবহার করুন:

npm install -g firebase-tools

এটি বিশ্বব্যাপী উপলব্ধ firebase কমান্ডটি ইনস্টল করে। যদি কমান্ডটি ব্যর্থ হয়, তাহলে আপনাকে npm পারমিশন পরিবর্তন করতে হতে পারে। firebase-tools এর সর্বশেষ সংস্করণে আপডেট করতে, একই কমান্ডটি পুনরায় চালান।

পাইথন

ফাংশন লেখার জন্য আপনার একটি পাইথন এনভায়রনমেন্ট এবং Cloud Functions রানটাইমে ফাংশনগুলো ডেপ্লয় করার জন্য ফায়ারবেস সিএলআই Firebase CLI) প্রয়োজন হবে। ডিপেন্ডেন্সিগুলো আলাদা রাখার জন্য আমরা venv ব্যবহারের পরামর্শ দিই। পাইথনের ৩.১০ থেকে ৩.১৩ ভার্সন পর্যন্ত সাপোর্টেড, যার মধ্যে ৩.১৩ হলো ডিফল্ট রানটাইম।

একবার আপনার পাইথন ইনস্টল হয়ে গেলে, আপনার পছন্দের পদ্ধতিতে Firebase সিএলআই ইনস্টল করুন

আপনার প্রকল্পটি শুরু করুন

যখন আপনি ক্লাউড ফাংশনের জন্য Firebase এসডিকে (Firebase SDK for Cloud Functions ইনিশিয়ালাইজ করেন, তখন আপনি ডিপেন্ডেন্সি এবং কিছু ন্যূনতম নমুনা কোড সহ একটি খালি প্রজেক্ট তৈরি করেন। আপনি যদি Node.js ব্যবহার করেন, তাহলে ফাংশন কম্পোজ করার জন্য আপনি TypeScript বা JavaScript বেছে নিতে পারেন। এই টিউটোরিয়ালের জন্য, আপনাকে Cloud Firestore ইনিশিয়ালাইজ করতে হবে।

আপনার প্রকল্পটি শুরু করতে:

  1. ব্রাউজারের মাধ্যমে লগ ইন করতে এবং Firebase CLI-কে প্রমাণীকরণ করতে firebase login চালান।
  2. আপনার ফায়ারবেস প্রজেক্ট ডিরেক্টরিতে যান।
  3. firebase init firestore চালান। এই টিউটোরিয়ালের জন্য, ফায়ারস্টোর রুলস এবং ইনডেক্স ফাইলের জন্য অনুরোধ করা হলে আপনি ডিফল্ট মানগুলো গ্রহণ করতে পারেন। আপনি যদি এই প্রজেক্টে এখনও Cloud Firestore ব্যবহার না করে থাকেন, তাহলে `Get started with Cloud Firestore অংশে বর্ণিত পদ্ধতি অনুযায়ী আপনাকে ফায়ারস্টোরের জন্য একটি স্টার্টিং মোড এবং লোকেশনও নির্বাচন করতে হবে।
  4. firebase init functions কমান্ডটি চালান। CLI আপনাকে একটি বিদ্যমান কোডবেস বেছে নিতে অথবা একটি নতুন কোডবেস শুরু করে তার নাম দিতে বলবে। যখন আপনি সবে শুরু করছেন, তখন ডিফল্ট অবস্থানে একটিমাত্র কোডবেসই যথেষ্ট; পরবর্তীতে, আপনার ইমপ্লিমেন্টেশন প্রসারিত হলে, আপনি ফাংশনগুলোকে একাধিক কোডবেসে সাজাতে চাইতে পারেন।
  5. ভাষা সমর্থনের জন্য CLI আপনাকে এই বিকল্পগুলো দেয়:

    • জাভাস্ক্রিপ্ট
    • টাইপস্ক্রিপ্ট
    • পাইথন

    এই টিউটোরিয়ালের জন্য জাভাস্ক্রিপ্ট অথবা পাইথন নির্বাচন করুন। টাইপস্ক্রিপ্টে কোড লেখার জন্য, “টাইপস্ক্রিপ্ট দিয়ে ফাংশন লিখুন” দেখুন।

  6. CLI আপনাকে ডিপেন্ডেন্সি ইনস্টল করার একটি অপশন দেয়। আপনি যদি অন্য কোনো উপায়ে ডিপেন্ডেন্সিগুলো পরিচালনা করতে চান, তবে এই অপশনটি প্রত্যাখ্যান করা নিরাপদ।

এই কমান্ডগুলো সফলভাবে সম্পন্ন হওয়ার পর, আপনার প্রোজেক্টের কাঠামোটি দেখতে এইরকম হবে:

নোড.জেএস

myproject
+- .firebaserc    # Hidden file that helps you quickly switch between
|                 # projects with `firebase use`
|
+- firebase.json  # Describes properties for your project
|
+- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # Main source file for your Cloud Functions code
      |
      +- node_modules/ # Directory where your dependencies (declared in
                        # package.json) are installed

Node.js-এর ক্ষেত্রে, ইনিশিয়ালাইজেশনের সময় তৈরি হওয়া package.json ফাইলটিতে একটি গুরুত্বপূর্ণ কী (key) থাকে: "engines": {"node": "18"} । এটি ফাংশন লেখা এবং ডেপ্লয় করার জন্য আপনার Node.js ভার্সন নির্দিষ্ট করে। আপনি অন্যান্য সমর্থিত ভার্সনও নির্বাচন করতে পারেন।

পাইথন

myproject
+- .firebaserc    # Hidden file that helps you quickly switch between
|                 # projects with `firebase use`
|
+- firebase.json  # Describes properties for your project
|
+- functions/     # Directory containing all your functions code
      |
      +- main.py      # Main source file for your Cloud Functions code
      |
      +- requirements.txt  #  List of the project's modules and packages 
      |
      +- venv/ # Directory where your dependencies are installed

প্রয়োজনীয় মডিউলগুলো ইম্পোর্ট করুন এবং অ্যাপটি চালু করুন।

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

নোড.জেএস

// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/https");
const {onDocumentCreated} = require("firebase-functions/firestore");

// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

initializeApp();

পাইথন

# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()

এই লাইনগুলো প্রয়োজনীয় মডিউলগুলো লোড করে এবং একটি admin অ্যাপ ইনস্ট্যান্স চালু করে, যেখান থেকে Cloud Firestore পরিবর্তন করা যায়। যেখানেই অ্যাডমিন এসডিকে সাপোর্ট পাওয়া যায়, যেমনটা FCM , Authentication এবং Firebase Realtime Database ক্ষেত্রে, সেখানেই এটি Cloud Functions ব্যবহার করে ফায়ারবেসকে ইন্টিগ্রেট করার একটি শক্তিশালী উপায় প্রদান করে।

আপনি যখন আপনার প্রজেক্ট শুরু করেন, তখন Firebase CLI স্বয়ংক্রিয়ভাবে Firebase Admin SDK এবং Firebase SDK for Cloud Functions মডিউলগুলো ইনস্টল করে। আপনার প্রজেক্টে তৃতীয় পক্ষের লাইব্রেরি যোগ করার বিষয়ে আরও তথ্যের জন্য, Handle Dependencies দেখুন।

"বার্তা যোগ করুন" ফাংশনটি যোগ করুন

'add message' ফাংশনটির জন্য, আপনার সোর্স ফাইলে এই লাইনগুলো যোগ করুন:

নোড.জেএস

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await getFirestore()
      .collection("messages")
      .add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

পাইথন

@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
    """Take the text parameter passed to this HTTP endpoint and insert it into
    a new document in the messages collection."""
    # Grab the text parameter.
    original = req.args.get("text")
    if original is None:
        return https_fn.Response("No text parameter provided", status=400)

    firestore_client: google.cloud.firestore.Client = firestore.client()

    # Push the new message into Cloud Firestore using the Firebase Admin SDK.
    _, doc_ref = firestore_client.collection("messages").add({"original": original})

    # Send back a message that we've successfully written the message
    return https_fn.Response(f"Message with ID {doc_ref.id} added.")

"add message" ফাংশনটি একটি HTTP এন্ডপয়েন্ট। এই এন্ডপয়েন্টে করা যেকোনো অনুরোধের ফলে প্রাপ্ত রিকোয়েস্ট এবং রেসপন্স অবজেক্টগুলো আপনার প্ল্যাটফর্মের রিকোয়েস্ট হ্যান্ডলারের ( onRequest() বা on_request ) কাছে পাঠানো হয়।

HTTP ফাংশনগুলো সিনক্রোনাস ( কলযোগ্য ফাংশনের মতো), তাই আপনার যত দ্রুত সম্ভব একটি প্রতিক্রিয়া পাঠানো উচিত এবং Cloud Firestore ব্যবহার করে কাজ স্থগিত রাখা উচিত। 'add message' HTTP ফাংশনটি HTTP এন্ডপয়েন্টে একটি টেক্সট ভ্যালু পাঠায় এবং এটিকে /messages/:documentId/original পাথের অধীনে ডাটাবেসে প্রবেশ করায়।

'make uppercase' ফাংশনটি যোগ করুন

'make uppercase' ফাংশনটির জন্য, আপনার সোর্স ফাইলে এই লাইনগুলো যোগ করুন:

নোড.জেএস

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

পাইথন

@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

Cloud Firestore লেখার সময় 'make uppercase' ফাংশনটি কার্যকর হয় এবং কোন ডকুমেন্টটি শোনা হবে তা নির্ধারণ করে দেয়। পারফরম্যান্সের কারণে, আপনার যতটা সম্ভব সুনির্দিষ্ট হওয়া উচিত।

বন্ধনী—যেমন, {documentId} —‘প্যারামিটার’-কে ঘিরে রাখে, যা হলো ওয়াইল্ডকার্ড এবং কলব্যাকে তাদের মিলে যাওয়া ডেটা প্রকাশ করে। যখনই নতুন মেসেজ যোগ করা হয়, Cloud Firestore এই কলব্যাকটি ট্রিগার করে।

Node.js-এ, Cloud Firestore ইভেন্টের মতো ইভেন্ট-চালিত ফাংশনগুলো অ্যাসিঙ্ক্রোনাস হয়। কলব্যাক ফাংশনটির অবশ্যই একটি null , একটি Object, অথবা একটি Promise রিটার্ন করা উচিত। যদি আপনি কিছু রিটার্ন না করেন, তাহলে ফাংশনটির টাইম আউট হয়ে যায়, যা একটি ত্রুটির সংকেত দেয় এবং এটি পুনরায় চেষ্টা করা হয়। Sync, Async, এবং Promises দেখুন।

আপনার ফাংশনগুলির সম্পাদন অনুকরণ করুন

Firebase Local Emulator Suite আপনাকে কোনো ফায়ারবেস প্রজেক্টে ডেপ্লয় করার পরিবর্তে আপনার লোকাল মেশিনে অ্যাপ তৈরি ও পরীক্ষা করার সুযোগ দেয়। ডেভেলপমেন্টের সময় লোকাল টেস্টিং জোরালোভাবে সুপারিশ করা হয়, কারণ এটি কোডিং ত্রুটির ঝুঁকি কমিয়ে দেয়, যা প্রোডাকশন পরিবেশে সম্ভাব্য খরচের কারণ হতে পারে (উদাহরণস্বরূপ, একটি ইনফিনিট লুপ)।

আপনার ফাংশনগুলো অনুকরণ করতে:

  1. firebase emulators:start কমান্ডটি চালান এবং Emulator Suite UI এর URL-এর জন্য আউটপুটটি দেখুন। এটি ডিফল্টভাবে `localhost:4000` হয় , কিন্তু আপনার মেশিনে এটি অন্য কোনো পোর্টে হোস্ট করা থাকতে পারে। Emulator Suite UI খোলার জন্য আপনার ব্রাউজারে সেই URL-টি লিখুন।

  2. HTTP ফাংশনের URL-এর জন্য firebase emulators:start কমান্ডের আউটপুট দেখুন। এটি দেখতে http://localhost:5001/MY_PROJECT/us-central1/addMessage মতো হবে, তবে পার্থক্য হলো:

    1. MY_PROJECT পরিবর্তে আপনার প্রজেক্ট আইডি ব্যবহৃত হবে।
    2. আপনার স্থানীয় মেশিনে পোর্টটি ভিন্ন হতে পারে।
  3. ফাংশনের URL-এর শেষে ?text=uppercaseme কোয়েরি স্ট্রিংটি যোগ করুন। এটি দেখতে অনেকটা এইরকম হবে: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme । ঐচ্ছিকভাবে, আপনি "uppercaseme" বার্তাটি পরিবর্তন করে একটি নিজস্ব বার্তা দিতে পারেন।

  4. আপনার ব্রাউজারের একটি নতুন ট্যাবে URL-টি খুলে একটি নতুন বার্তা তৈরি করুন।

  5. Emulator Suite UI তে ফাংশনগুলোর প্রভাব দেখুন:

    1. লগস ট্যাবে, আপনি নতুন লগ দেখতে পাবেন যা নির্দেশ করবে যে আপনার HTTP ফাংশনগুলো সফলভাবে চলেছে:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. ফায়ারস্টোর ট্যাবে, আপনি একটি ডকুমেন্ট দেখতে পাবেন যেখানে আপনার মূল বার্তার পাশাপাশি সেটির বড় হাতের অক্ষরে লেখা সংস্করণটিও থাকবে (যদি বার্তাটি মূলত "uppercaseme" হয়ে থাকে, তবে আপনি "UPPERCASEME" দেখতে পাবেন)।

প্রোডাকশন পরিবেশে ফাংশনগুলি স্থাপন করুন

একবার এমুলেটরে আপনার ফাংশনগুলো পছন্দমতো কাজ করা শুরু করলে, আপনি সেগুলোকে প্রোডাকশন এনভায়রনমেন্টে ডেপ্লয়, টেস্ট এবং রান করার জন্য অগ্রসর হতে পারেন। মনে রাখবেন যে, প্রোডাকশনে ডেপ্লয় করার জন্য আপনার প্রজেক্টটি অবশ্যই ব্লেজ প্রাইসিং প্ল্যানের অন্তর্ভুক্ত থাকতে হবে। Cloud Functions প্রাইসিং দেখুন।

টিউটোরিয়ালটি সম্পূর্ণ করতে, আপনার ফাংশনগুলো ডিপ্লয় করুন এবং তারপর সেগুলো এক্সিকিউট করুন।

  1. আপনার ফাংশনগুলো ডিপ্লয় করতে এই কমান্ডটি চালান:

     firebase deploy --only functions
     

    এই কমান্ডটি চালানোর পর, Firebase CLI যেকোনো HTTP ফাংশন এন্ডপয়েন্টের URL আউটপুট করে। আপনার টার্মিনালে, আপনি নিম্নলিখিতের মতো একটি লাইন দেখতে পাবেন:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    URL-টিতে আপনার প্রজেক্ট আইডি এবং HTTP ফাংশনের জন্য একটি অঞ্চল অন্তর্ভুক্ত থাকে। যদিও এখন এটি নিয়ে আপনার চিন্তার প্রয়োজন নেই, নেটওয়ার্ক ল্যাটেন্সি কমানোর জন্য কিছু প্রোডাকশন HTTP ফাংশনে একটি অবস্থান নির্দিষ্ট করে দেওয়া উচিত।

    যদি আপনি "প্রকল্পে অ্যাক্সেস অনুমোদন করতে অক্ষম" এর মতো অ্যাক্সেস ত্রুটির সম্মুখীন হন, তাহলে আপনার প্রকল্পের অ্যালিয়াসিং পরীক্ষা করে দেখুন।

  2. CLI থেকে প্রাপ্ত URL-টিতে একটি টেক্সট কোয়েরি প্যারামিটার যোগ করুন এবং ব্রাউজারে সেটি খুলুন:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    ফাংশনটি কার্যকর হয় এবং ব্রাউজারকে ডেটাবেসের সেই অবস্থানে থাকা Firebase কনসোলে পুনঃনির্দেশিত করে, যেখানে টেক্সট স্ট্রিংটি সংরক্ষিত আছে। এই রাইট ইভেন্টটি 'make uppercase' ফাংশনটিকে ট্রিগার করে, যা স্ট্রিংটির একটি আপারকেস সংস্করণ লিখে দেয়।

ফাংশনগুলো ডেপ্লয় এবং এক্সিকিউট করার পর, আপনি Google Cloud কনসোলে লগ দেখতে পারবেন। ডেভেলপমেন্ট বা প্রোডাকশন পর্যায়ে ফাংশন ডিলিট করার প্রয়োজন হলে, Firebase CLI) ব্যবহার করুন।

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

পরবর্তী পদক্ষেপ

এই ডকুমেন্টেশনে, আপনি Cloud Functions জন্য ফাংশনগুলি কীভাবে পরিচালনা করবেন এবং Cloud Functions দ্বারা সমর্থিত সমস্ত ইভেন্ট টাইপ কীভাবে হ্যান্ডেল করবেন সে সম্পর্কে আরও জানতে পারবেন।

Cloud Functions সম্পর্কে আরও জানতে, আপনি নিম্নলিখিত কাজগুলোও করতে পারেন: