ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে Node.js-এর জন্য ক্লাউড ফাংশন সহ স্থানীয় উন্নয়ন

1. ওভারভিউ

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

জাভাস্ক্রিপ্টে লেখা ক্লাউড ফাংশনগুলি Google ক্লাউড প্ল্যাটফর্মে একটি Node.js পরিবেশে কার্যকর করে৷ পোর্টেবিলিটি এবং স্থানীয় টেস্টিং সক্ষম করতে আপনি যেকোনো স্ট্যান্ডার্ড Node.js রানটাইমে আপনার ক্লাউড ফাংশন চালাতে পারেন।

ওয়াকথ্রু

এই কোডল্যাবে, আপনি Node.js-এর জন্য একটি ক্লাউড ফাংশন তৈরি করবেন যা রিপোর্ট করে যে একটি নির্দিষ্ট তাপমাত্রা গ্রহণযোগ্য নাকি খুব গরম। আপনি আপনার স্থানীয় মেশিনে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে আপনার ক্লাউড ফাংশন তৈরি, পরীক্ষা এবং ডিবাগ করবেন। অবশেষে, আপনি Google ক্লাউড প্ল্যাটফর্মে আপনার ফাংশন স্থাপন করবেন।

আপনি কি শিখবেন

  • Node.js এর জন্য ফাংশন ফ্রেমওয়ার্ক।
  • স্থানীয়ভাবে একটি HTTP ক্লাউড ফাংশন তৈরি করুন এবং পরীক্ষা করুন।
  • আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন ডিবাগ করুন।
  • আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন স্থাপন করুন।

2. সেটআপ এবং প্রয়োজনীয়তা

পূর্বশর্ত

খরচ

যদিও এই কোডল্যাবের জন্য একটি স্থাপন করা ক্লাউড ফাংশনের জন্য শুধুমাত্র 1টি আহ্বানের প্রয়োজন হয়, তবুও বিলিং কীভাবে কাজ করে তা বোঝার জন্য আপনার ক্লাউড ফাংশন API মূল্যের তথ্য উল্লেখ করা উচিত।

যদিও অনেক Google API ফি ছাড়া ব্যবহার করা যেতে পারে, Google ক্লাউড প্ল্যাটফর্মের ব্যবহার (যেমন এর পণ্য এবং API) বিনামূল্যে নয়। ক্লাউড ফাংশন ব্যবহার করার জন্য আপনার একটি সক্রিয় বিলিং অ্যাকাউন্টের প্রয়োজন হবে। মনে রাখবেন যে নির্দিষ্ট কিছু Google ক্লাউড প্ল্যাটফর্ম (GCP) পণ্যগুলিতে একটি "সর্বদা বিনামূল্যে" স্তর রয়েছে যার জন্য আপনাকে বিলিং খরচ করার জন্য অতিক্রম করতে হবে। কোডল্যাবের উদ্দেশ্যে, প্রতিটি ক্লাউড ফাংশন আহ্বান সেই বিনামূল্যের স্তরের সাথে গণনা করে। যতক্ষণ পর্যন্ত আপনি সামগ্রিকভাবে (প্রতি মাসের মধ্যে) এর সীমার মধ্যে থাকবেন, ততক্ষণ আপনাকে কোনও চার্জ নেওয়া উচিত নয়।

3. Node.js এর জন্য ফাংশন ফ্রেমওয়ার্ক ইনস্টল করুন

Node.js-এর জন্য ফাংশন ফ্রেমওয়ার্ক হল পোর্টেবল Node.js ফাংশন লেখার জন্য একটি ওপেন সোর্স FaaS (একটি পরিষেবা হিসাবে ফাংশন) ফ্রেমওয়ার্ক যা Google ক্লাউড ফাংশন টিম আপনার কাছে নিয়ে এসেছে।

ফাংশন ফ্রেমওয়ার্ক আপনাকে লাইটওয়েট ফাংশন লিখতে দেয় যা বিভিন্ন পরিবেশে চলে, যার মধ্যে রয়েছে:

  • গুগল ক্লাউড ফাংশন
  • আপনার স্থানীয় উন্নয়ন মেশিন
  • GKE তে ক্লাউড রান এবং ক্লাউড রান
  • নেটিভ-ভিত্তিক পরিবেশ

একটি নতুন node.js অ্যাপ তৈরি করুন।

npm init

ডিফল্টগুলি গ্রহণ করার সময়, আপনার অ্যাপের এন্ট্রি পয়েন্ট হিসাবে index.js ব্যবহার করা নিশ্চিত করুন৷

এখন Node.js এর জন্য ফাংশন ফ্রেমওয়ার্ক ইনস্টল করুন।

npm install @google-cloud/functions-framework

আপনার package.json খুলুন। যাচাই করুন যে আপনি নীচের উদাহরণে দেখানো হিসাবে একটি নির্ভরতা হিসাবে তালিকাভুক্ত ফাংশন ফ্রেমওয়ার্ক দেখতে পাচ্ছেন।

"dependencies": {
   "@google-cloud/functions-framework": "^1.7.1"
 }

ফাংশন ফ্রেমওয়ার্ক এখন সফলভাবে ইনস্টল করা হয়েছে। আপনি এখন আপনার ক্লাউড ফাংশন তৈরি করতে প্রস্তুত।

4. স্থানীয়ভাবে একটি HTTP ক্লাউড ফাংশন তৈরি করুন এবং পরীক্ষা করুন৷

একটি স্থানীয় ক্লাউড ফাংশন তৈরি করুন

এই বিভাগে, আপনি একটি HTTP ফাংশন তৈরি করবেন এবং পরীক্ষা করবেন যা HTTP অনুরোধে সাড়া দেয়।

আপনার package.json ফাইলের মতো একই ডিরেক্টরিতে index.js নামে একটি নতুন ফাইল তৈরি করুন।

নিম্নলিখিত যোগ করুন:

exports.validateTemperature = async (req, res) => {
 try {
   if (req.body.temp < 100) {
     res.status(200).send("Temperature OK");
   } else {
     res.status(200).send("Too hot");
   }
 } catch (error) {
   //return an error
   console.log("got error: ", error);
   res.status(500).send(error);
 }
};

আপনি এখন ফাংশন পরীক্ষা করার জন্য প্রস্তুত.

ভিজ্যুয়াল স্টুডিও কোডে পরীক্ষা ফাংশন

এই বিন্দু থেকে, এই কোডল্যাবটি ভিজ্যুয়াল স্টুডিও কোডের মধ্যে সমন্বিত টার্মিনাল ব্যবহার করে।

ভিজ্যুয়াল স্টুডিও কোডে, একটি টার্মিনাল উইন্ডো খুলুন।

নিম্নলিখিত কমান্ড চালান:

node node_modules/@google-cloud/functions-framework --target=validateTemperature

এই কমান্ডটি একটি স্থানীয় সার্ভার শুরু করে যেটি validateTemperature ফাংশন কল করার জন্য প্রস্তুত যখন সার্ভার একটি HTTP অনুরোধ পায়।

আপনি আপনার টার্মিনাল উইন্ডোতে নিম্নলিখিত আউটপুট দেখতে হবে:

Serving function...
Function: validateTemperature
URL: http://localhost:8080/

টার্মিনাল উইন্ডো প্যানে New Terminal প্লাস আইকনে ক্লিক করে VS কোডের মধ্যে একটি দ্বিতীয় টার্মিনাল উইন্ডো তৈরি করুন। আপনি এই দুটি টার্মিনাল উইন্ডোর মধ্যে স্যুইচ করবেন: প্রথমটি ফাংশন পরিবেশন করার জন্য এবং দ্বিতীয়টি কার্ল ব্যবহার করে ফাংশনটি কল করার জন্য।

bceb65f366d837ae.png

আপনি ড্রপ ডাউন ব্যবহার করে টার্মিনাল উইন্ডোগুলির মধ্যে স্যুইচ করতে পারেন। যদি একটি টার্মিনাল উইন্ডো বর্তমানে একটি ফাংশন পরিবেশন করে, ড্রপ ডাউন তালিকা এটিকে node হিসাবে উল্লেখ করে। অন্যথায় এটি zsh (বা আপনি যে শেল ব্যবহার করছেন) উল্লেখ করা হয়।

দ্বিতীয় টার্মিনাল উইন্ডোতে, validateTemperature ফাংশন পরিবেশনকারী স্থানীয় সার্ভারে 50 এর তাপমাত্রার পেলোড পাঠাতে নিম্নলিখিত কমান্ডটি চালান।

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"50"}'

আপনি ক্লাউড ফাংশন থেকে নিম্নলিখিত প্রতিক্রিয়া পেতে হবে:

Temperature OK

দ্বিতীয় টার্মিনাল উইন্ডোতে, নীচে দেখানো হিসাবে একটি "খুব বেশি" তাপমাত্রার পেলোড পাঠিয়ে ফাংশনটি আবার পরীক্ষা করুন:

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"120"}'

আপনি ক্লাউড ফাংশন থেকে নিম্নলিখিত প্রতিক্রিয়া পেতে হবে:

Too hot

সবশেষে, একটি অনুপস্থিত পেলোড দিয়ে এটিকে কল করে ফাংশনটি পরীক্ষা করুন।

curl -X POST http://localhost:8080

আপনি ক্লাউড ফাংশন থেকে নিম্নলিখিত প্রতিক্রিয়া পেতে হবে:

Too hot

আদর্শভাবে, তাপমাত্রা প্রদান না করা হলে ফাংশনটি "খুব গরম" হওয়া উচিত নয়। আপনি কোডে একটি বাগ আবিষ্কার করেছেন।

আপনার ফাংশনটি পরিবেশনকারী প্রথম টার্মিনাল উইন্ডোতে Ctrl + C টিপে আপনার ফাংশনটি চলমান থেকে বন্ধ করা নিশ্চিত করুন।

5. আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন ডিবাগ করুন

ভিজ্যুয়াল স্টুডিও কোডে কমান্ড প্যালেট খুলুন। আপনি যদি ম্যাকে থাকেন তবে Cmd + Shift + P ব্যবহার করুন। আপনি যদি উইন্ডোজে থাকেন তবে Ctrl + Shift + P. ব্যবহার করুন।

কমান্ড প্যালেটে auto attach টাইপ করুন এবং তালিকার শীর্ষ আইটেমটি বেছে নিন।

601e542b4ec9f6f9.png

এই কোডল্যাবের জন্য, নীচের ছবিতে দেখানো হিসাবে Only With Flag নির্বাচন করুন:

b9e6b762d150e62b.png

এখন আপনি VS কোডে যে টার্মিনাল উইন্ডোটি ব্যবহার করেছেন তা পুনরায় লোড করুন আপনার ফাংশনটি পরিবেশন করার জন্য ডানদিকে প্রদর্শিত সতর্কতা আইকনের উপর ঘোরার মাধ্যমে।

Relaunch Terminal ক্লিক করুন।

37b61e3fb546fc76.png

পুনরায় লোড করা টার্মিনাল উইন্ডো থেকে, নিম্নলিখিত কমান্ড ব্যবহার করে আপনার ফাংশন পরিবেশন করতে ফাংশন ফ্রেমওয়ার্ক পুনরায় চালান:

node --inspect node_modules/.bin/functions-framework --target=validateTemperature

যেখানে --inspect পতাকা Node.js-কে একটি ডিবাগিং ক্লায়েন্টের জন্য শুনতে বলে। আরও তথ্যের জন্য, অনুগ্রহ করে ডিবাগিং সংক্রান্ত নোড ডকুমেন্টেশন দেখুন।

মনে রাখবেন আপনি node_modules/ @google-cloud /functions-framework এর পরিবর্তে node_modules/ .bin /functions-framework ব্যবহার করছেন। পরিদর্শন মোড ব্যবহার করার জন্য আপনাকে /node_modules/.bin-এ স্বয়ংক্রিয়ভাবে সিমলিংক করা এক্সিকিউটেবল ব্যবহার করতে হবে।

এই সময় আপনি ভিএস কোডে একটি কমলা স্ট্যাটাস বার দেখতে পাবেন যা নির্দেশ করে যে ডিবাগার সংযুক্ত রয়েছে।

লাইন নম্বরের বাম দিকে মার্জিনের ভিতরে ক্লিক করে লাইন 3 এ একটি ব্রেকপয়েন্ট সেট করুন।

2fbb4d5916e1dbfa.png

ব্রেকপয়েন্ট আইকনটি উজ্জ্বল লাল আলোকিত হওয়া উচিত, এটি নির্দেশ করে যে কোডের এই লাইনটি ডিবাগার দ্বারা অ্যাক্সেসযোগ্য।

846e6c5993cc87f9.png

দ্বিতীয় টার্মিনাল উইন্ডোতে, নিম্নলিখিত কার্ল কমান্ডটি চালিয়ে ব্রেকপয়েন্টে আঘাত করুন।

curl -X POST http://localhost:8080 

আপনি লাইন 3 তে একটি হলুদ হাইলাইট দেখতে পাবেন। এই হাইলাইটটি নির্দেশ করে যে এই লাইনটি বর্তমান বিবৃতিটি ডিবাগার দ্বারা মূল্যায়ন করা হচ্ছে।

206c7ed1eb189e90.png

টেম্প ভেরিয়েবলের উপর মাউস-ওভার করে যাচাই করুন যে এর বিষয়বস্তু undefined , যেহেতু অনুরোধটি তাপমাত্রার পেলোড প্রদান করেনি।

97979025f4bf2842.png

পরবর্তী বিবৃতি কার্যকর করতে স্টেপ-ওভার আইকনে ক্লিক করুন।

আপনি বর্তমান বিবৃতিটি if স্টেটমেন্টের অন্য অংশে যেতে দেখতে পাবেন।

cf0e8ce7e0388f98.png

এই ডেমোর জন্য, আপনি ধরে নিতে পারেন যে স্পেসিফিকেশনের জন্য তাপমাত্রা রিডিং পাঠানোর জন্য সমস্ত অনুরোধ প্রয়োজন। অসম্ভাব্য ঘটনা একটি তাপমাত্রা রিডিং প্রদান করা হয় না, ফাংশন একটি ব্যতিক্রম নিক্ষেপ করা উচিত.

ডিবাগার সংযোগ বিচ্ছিন্ন করতে সংযোগ বিচ্ছিন্ন বোতামে ক্লিক করুন।

1070d059775ad769.png

আপনার প্রথম টার্মিনাল উইন্ডোতে, Ctrl + C টিপে আপনার ফাংশন চালানো বন্ধ করুন।

যদি তাপমাত্রা অনির্ধারিত থাকে তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়ার জন্য একটি if স্টেটমেন্ট যোগ করতে আপনার ফাংশন আপডেট করুন নীচে দেখানো হিসাবে:

exports.validateTemperature = async (req, res) => {

 try {

   // add this if statement below line #2
   if (!req.body.temp) {
     throw "Temperature is undefined";
   }

 ...

আপনার প্রথম টার্মিনাল উইন্ডোতে, ডিবাগার সংযুক্ত করা এড়াতে -inspect পতাকা ছাড়া নিম্নলিখিত কমান্ডটি চালিয়ে আপনার ক্লাউড ফাংশনটি আবার চালানো শুরু করুন।

node node_modules/@google-cloud/functions-framework --target=validateTemperature

আপনার দ্বিতীয় টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালিয়ে একটি ব্যতিক্রম নিক্ষেপ করা হয়েছে তা যাচাই করুন:

curl -X POST http://localhost:8080 

আপনি আপনার অনুরোধ থেকে ফিরে নিম্নলিখিত আউটপুট দেখতে হবে:

Temperature is undefined

আপনার প্রথম টার্মিনাল উইন্ডোতে, আপনি আপনার ফাংশন দ্বারা লগ করা ত্রুটিটিও দেখতে পাবেন।

Serving function...
Function: validateTemperature
URL: http://localhost:8080/
got error:  Temperature is undefined

আপনি এখন আপনার প্রথম টার্মিনাল উইন্ডোতে Ctrl + C টিপে আপনার ফাংশন চালানো বন্ধ করতে পারেন।

6. আপনার স্থানীয় মেশিন থেকে Google ক্লাউডে একটি HTTP ফাংশন স্থাপন করুন৷

এখন আপনি আপনার স্থানীয় মেশিনে একটি ক্লাউড ফাংশন তৈরি করেছেন, পরীক্ষা করেছেন এবং ডিবাগ করেছেন, আপনি এটিকে Google ক্লাউডে স্থাপন করতে প্রস্তুত৷

নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে আপনি স্থানীয়ভাবে ধাপ 2 এ তৈরি করা প্রকল্পটি ব্যবহার করছেন তা যাচাই করুন:

gcloud config get-value project

আপনি যে প্রকল্পটি ধাপ 2 এ উল্লেখ করেছেন সেটি যদি সক্রিয় কনফিগারেশন না হয়, তাহলে নিম্নলিখিত কমান্ডটি চালান:

gcloud config set project <project-name-created-step-2>

যেকোনো টার্মিনাল উইন্ডোতে, নিম্নলিখিত কমান্ডটি চালান:

gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated

যেখানে প্যারামিটারগুলি নিম্নরূপ ব্যাখ্যা করা হয়েছে:

  • deploy validateTemperature - validateTemperature নামের একটি এন্ট্রি পয়েন্ট সহ validateTemperature নামের একটি ক্লাউড ফাংশন স্থাপনের জন্য gcloud সাবকমান্ড
  • --trigger-http - ট্রিগারিং ইভেন্টের ধরন
  • --runtime nodejs12 - এই ফাংশনের জন্য টার্গেট করা রানটাইম
  • --allow-unauthenticated - ফাংশন কল করার জন্য সর্বজনীন অ্যাক্সেসের অনুমতি দেয়

আপনাকে ক্লাউড ফাংশন এপিআই সক্ষম করতে বলা হবে। API সক্রিয় করতে y টাইপ করুন।

API [cloudfunctions.googleapis.com] not enabled on project 
[1057316433766]. Would you like to enable and retry (this will take a 
few minutes)? (y/N)? y 

একবার স্থাপনা সম্পন্ন হলে, আপনি আউটপুটে নিম্নলিখিত দেখতে পাবেন:

Deploying function (may take a while - up to 2 minutes)...done. 
availableMemoryMb: 256
buildId: <your-build-id>
entryPoint: validateTemperature
httpsTrigger:
  url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature
...

আপনার টার্মিনাল উইন্ডোতে, এই পাবলিক এন্ডপয়েন্টকে কল করতে কার্ল ব্যবহার করুন।

curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json"  -d '{"temp":"50"}'

এবং নিশ্চিত করুন যে উপযুক্ত প্রতিক্রিয়া যাচাই করে আপনার ক্লাউড ফাংশন সফলভাবে স্থাপন করা হয়েছে।

Temperature OK

7. পরিষ্কার করুন

অসাবধানতাবশত চার্জ এড়াতে, যেমন এই ক্লাউড ফাংশনটি আপনার মাসিক ক্লাউড ফাংশন ইনভোকমেন্ট বরাদ্দের চেয়ে অজান্তেই মুক্ত স্তরে বেশি বার আহ্বান করা হয়েছে, আপনি হয় ক্লাউড ফাংশনটি মুছে ফেলতে পারেন বা ধাপ 2 এ আপনার তৈরি করা প্রকল্পটি মুছে ফেলতে পারেন৷

ক্লাউড ফাংশন মুছে ফেলতে, https://console.cloud.google.com/functions/- এ ক্লাউড ফাংশন ক্লাউড কনসোলে যান নিশ্চিত করুন যে আপনি ধাপ 2-এ তৈরি করা প্রকল্পটি বর্তমানে নির্বাচিত প্রকল্প।

ধাপ 6 এ আপনি যে ভ্যালিডেট টেম্পারচার ফাংশনটি স্থাপন করেছেন তা নির্বাচন করুন। তারপর মুছুন টিপুন।

4dada486485a935a.png

আপনি যদি সম্পূর্ণ প্রকল্প মুছে ফেলার সিদ্ধান্ত নেন, আপনি https://console.cloud.google.com/cloud-resource-manager- এ যেতে পারেন, ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন৷ আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud প্রকল্পের তালিকা চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।

8. অভিনন্দন!

কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। ক্লাউড ফাংশন কীভাবে Node.js রানটাইম সমর্থন করে এবং ক্লাউড ফাংশনগুলির সাথে স্থানীয় ডিবাগিং কীভাবে কাজ করে সে সম্পর্কে আপনি আরও জানতে পারেন।

আমরা কভার করেছি কি

  • Node.js এর জন্য ফাংশন ফ্রেমওয়ার্ক।
  • স্থানীয়ভাবে একটি HTTP ক্লাউড ফাংশন তৈরি করুন এবং পরীক্ষা করুন।
  • আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন ডিবাগ করুন।
  • আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন স্থাপন করুন।