1. ওভারভিউ
Google ক্লাউড ফাংশন একটি ইভেন্ট-চালিত সার্ভারহীন গণনা প্ল্যাটফর্ম। ক্লাউড ফাংশন আপনাকে রিসোর্স সরবরাহ বা পরিবর্তনের প্রয়োজনীয়তাগুলি পরিচালনা করার জন্য স্কেলিং সম্পর্কে চিন্তা না করেই আপনার কোড লিখতে দেয়৷
জাভাস্ক্রিপ্টে লেখা ক্লাউড ফাংশনগুলি Google ক্লাউড প্ল্যাটফর্মে একটি Node.js পরিবেশে কার্যকর করে৷ পোর্টেবিলিটি এবং স্থানীয় টেস্টিং সক্ষম করতে আপনি যেকোনো স্ট্যান্ডার্ড Node.js রানটাইমে আপনার ক্লাউড ফাংশন চালাতে পারেন।
ওয়াকথ্রু
এই কোডল্যাবে, আপনি Node.js-এর জন্য একটি ক্লাউড ফাংশন তৈরি করবেন যা রিপোর্ট করে যে একটি নির্দিষ্ট তাপমাত্রা গ্রহণযোগ্য নাকি খুব গরম। আপনি আপনার স্থানীয় মেশিনে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে আপনার ক্লাউড ফাংশন তৈরি, পরীক্ষা এবং ডিবাগ করবেন। অবশেষে, আপনি Google ক্লাউড প্ল্যাটফর্মে আপনার ফাংশন স্থাপন করবেন।
আপনি কি শিখবেন
- Node.js এর জন্য ফাংশন ফ্রেমওয়ার্ক।
- স্থানীয়ভাবে একটি HTTP ক্লাউড ফাংশন তৈরি করুন এবং পরীক্ষা করুন।
- আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন ডিবাগ করুন।
- আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন স্থাপন করুন।
2. সেটআপ এবং প্রয়োজনীয়তা
পূর্বশর্ত
- ক্লাউড SDK
- ভিজ্যুয়াল স্টুডিও কোড
- Node.js 8.6.0 বা উচ্চতর (Node.js ইনস্টল করতে, nvm ব্যবহার করুন , আপনার সংস্করণ পরীক্ষা করতে, নোড – সংস্করণ চালান)
- আমার প্রথম ফাংশনের সমাপ্তি: Node.js গাইড
খরচ
যদিও এই কোডল্যাবের জন্য একটি স্থাপন করা ক্লাউড ফাংশনের জন্য শুধুমাত্র 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 কোডের মধ্যে একটি দ্বিতীয় টার্মিনাল উইন্ডো তৈরি করুন। আপনি এই দুটি টার্মিনাল উইন্ডোর মধ্যে স্যুইচ করবেন: প্রথমটি ফাংশন পরিবেশন করার জন্য এবং দ্বিতীয়টি কার্ল ব্যবহার করে ফাংশনটি কল করার জন্য।
আপনি ড্রপ ডাউন ব্যবহার করে টার্মিনাল উইন্ডোগুলির মধ্যে স্যুইচ করতে পারেন। যদি একটি টার্মিনাল উইন্ডো বর্তমানে একটি ফাংশন পরিবেশন করে, ড্রপ ডাউন তালিকা এটিকে 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
টাইপ করুন এবং তালিকার শীর্ষ আইটেমটি বেছে নিন।
এই কোডল্যাবের জন্য, নীচের ছবিতে দেখানো হিসাবে Only With Flag
নির্বাচন করুন:
এখন আপনি VS কোডে যে টার্মিনাল উইন্ডোটি ব্যবহার করেছেন তা পুনরায় লোড করুন আপনার ফাংশনটি পরিবেশন করার জন্য ডানদিকে প্রদর্শিত সতর্কতা আইকনের উপর ঘোরার মাধ্যমে।
Relaunch Terminal
ক্লিক করুন।
পুনরায় লোড করা টার্মিনাল উইন্ডো থেকে, নিম্নলিখিত কমান্ড ব্যবহার করে আপনার ফাংশন পরিবেশন করতে ফাংশন ফ্রেমওয়ার্ক পুনরায় চালান:
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 এ একটি ব্রেকপয়েন্ট সেট করুন।
ব্রেকপয়েন্ট আইকনটি উজ্জ্বল লাল আলোকিত হওয়া উচিত, এটি নির্দেশ করে যে কোডের এই লাইনটি ডিবাগার দ্বারা অ্যাক্সেসযোগ্য।
দ্বিতীয় টার্মিনাল উইন্ডোতে, নিম্নলিখিত কার্ল কমান্ডটি চালিয়ে ব্রেকপয়েন্টে আঘাত করুন।
curl -X POST http://localhost:8080
আপনি লাইন 3 তে একটি হলুদ হাইলাইট দেখতে পাবেন। এই হাইলাইটটি নির্দেশ করে যে এই লাইনটি বর্তমান বিবৃতিটি ডিবাগার দ্বারা মূল্যায়ন করা হচ্ছে।
টেম্প ভেরিয়েবলের উপর মাউস-ওভার করে যাচাই করুন যে এর বিষয়বস্তু undefined
, যেহেতু অনুরোধটি তাপমাত্রার পেলোড প্রদান করেনি।
পরবর্তী বিবৃতি কার্যকর করতে স্টেপ-ওভার আইকনে ক্লিক করুন।
আপনি বর্তমান বিবৃতিটি if স্টেটমেন্টের অন্য অংশে যেতে দেখতে পাবেন।
এই ডেমোর জন্য, আপনি ধরে নিতে পারেন যে স্পেসিফিকেশনের জন্য তাপমাত্রা রিডিং পাঠানোর জন্য সমস্ত অনুরোধ প্রয়োজন। অসম্ভাব্য ঘটনা একটি তাপমাত্রা রিডিং প্রদান করা হয় না, ফাংশন একটি ব্যতিক্রম নিক্ষেপ করা উচিত.
ডিবাগার সংযোগ বিচ্ছিন্ন করতে সংযোগ বিচ্ছিন্ন বোতামে ক্লিক করুন।
আপনার প্রথম টার্মিনাল উইন্ডোতে, 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 এ আপনি যে ভ্যালিডেট টেম্পারচার ফাংশনটি স্থাপন করেছেন তা নির্বাচন করুন। তারপর মুছুন টিপুন।
আপনি যদি সম্পূর্ণ প্রকল্প মুছে ফেলার সিদ্ধান্ত নেন, আপনি https://console.cloud.google.com/cloud-resource-manager- এ যেতে পারেন, ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন৷ আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud প্রকল্পের তালিকা চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।
8. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। ক্লাউড ফাংশন কীভাবে Node.js রানটাইম সমর্থন করে এবং ক্লাউড ফাংশনগুলির সাথে স্থানীয় ডিবাগিং কীভাবে কাজ করে সে সম্পর্কে আপনি আরও জানতে পারেন।
আমরা কভার করেছি কি
- Node.js এর জন্য ফাংশন ফ্রেমওয়ার্ক।
- স্থানীয়ভাবে একটি HTTP ক্লাউড ফাংশন তৈরি করুন এবং পরীক্ষা করুন।
- আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন ডিবাগ করুন।
- আপনার স্থানীয় মেশিন থেকে একটি HTTP ফাংশন স্থাপন করুন।