NodeJS এর ​​সাথে ক্লাউড ওয়ার্কস্টেশন ব্যবহার করে InnerLoop ডেভেলপমেন্ট

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবটি এমন সব ফিচার ও সক্ষমতা প্রদর্শন করে, যা কন্টেইনারাইজড পরিবেশে NodeJS অ্যাপ্লিকেশন তৈরির দায়িত্বে থাকা সফটওয়্যার ইঞ্জিনিয়ারদের জন্য ডেভেলপমেন্ট ওয়ার্কফ্লোকে সহজ ও সাবলীল করার উদ্দেশ্যে ডিজাইন করা হয়েছে। সাধারণ কন্টেইনার ডেভেলপমেন্টের জন্য ব্যবহারকারীকে কন্টেইনার এবং কন্টেইনার বিল্ড প্রসেসের খুঁটিনাটি বিষয়গুলো বুঝতে হয়। এছাড়াও, ডেভেলপারদের প্রায়শই তাদের কাজের ধারাবাহিকতা ভেঙে দূরবর্তী পরিবেশে অ্যাপ্লিকেশন পরীক্ষা ও ডিবাগ করার জন্য IDE থেকে বেরিয়ে যেতে হয়। এই টিউটোরিয়ালে উল্লিখিত টুলস এবং প্রযুক্তিগুলোর সাহায্যে ডেভেলপাররা তাদের IDE না ছেড়েই কন্টেইনারাইজড অ্যাপ্লিকেশন নিয়ে কার্যকরভাবে কাজ করতে পারবেন।

আপনি যা শিখবেন

এই ল্যাবে আপনি গুগল ক্লাউডে কন্টেইনার ব্যবহার করে ডেভেলপ করার পদ্ধতিগুলো শিখবেন, যার মধ্যে অন্তর্ভুক্ত রয়েছে:

  • একটি স্টার্টার Nodejs অ্যাপ্লিকেশন তৈরি করা
  • কন্টেইনার ডেভেলপমেন্টের জন্য নোডজেএস অ্যাপ্লিকেশন কনফিগার করা
  • একটি সাধারণ CRUD রেস্ট সার্ভিস কোডিং করা
  • GKE-তে স্থাপন করা হচ্ছে
  • একটি ত্রুটিপূর্ণ অবস্থা ডিবাগ করা
  • ব্রেকপয়েন্ট / লগ ব্যবহার করা
  • GKE-তে পরিবর্তনগুলি হট ডিপ্লয় করা হচ্ছে
  • ঐচ্ছিক: ব্যাকএন্ড ডেটা সংরক্ষণের জন্য ক্লাউডএসকিউএল (CloudSQL) একীভূত করা

58a4cdd3ed7a123a.png

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

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর প্রয়োজন হয় না। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউডশেল এডিটর শুরু করুন

এই ল্যাবটি গুগল ক্লাউড শেল এডিটর-এর সাথে ব্যবহারের জন্য ডিজাইন ও পরীক্ষা করা হয়েছে। এডিটরটি অ্যাক্সেস করতে,

  1. আপনার গুগল প্রজেক্টটি https://console.cloud.google.com -এ অ্যাক্সেস করুন।
  2. উপরের ডান কোণায় ক্লাউড শেল এডিটর আইকনে ক্লিক করুন

8560cc8d45e8c112.png

  1. আপনার জানালার নিচের দিকে একটি নতুন কাচ খুলবে।
  2. ওপেন এডিটর বোতামে ক্লিক করুন

9e504cb98a6a8005.png

  1. এডিটরটি ডানদিকে একটি এক্সপ্লোরার এবং মাঝখানে এডিটর সহ খুলবে।
  2. স্ক্রিনের নীচে একটি টার্মিনাল পেইনও থাকা উচিত।
  3. টার্মিনাল খোলা না থাকলে, নতুন টার্মিনাল উইন্ডো খোলার জন্য `ctrl+` কী-সংমিশ্রণটি ব্যবহার করুন।

gcloud সেট আপ করুন

ক্লাউড শেলে, আপনার প্রজেক্ট আইডি এবং যে অঞ্চলে আপনার অ্যাপ্লিকেশনটি ডেপ্লয় করতে চান, তা সেট করুন। এগুলোকে PROJECT_ID এবং REGION ভেরিয়েবল হিসেবে সেভ করুন।

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

এই ল্যাবে ব্যবহৃত অবকাঠামো সরবরাহ করুন।

এই ল্যাবে আপনি GKE-তে কোড ডেপ্লয় করবেন এবং CloudSQL ডেটাবেসে সংরক্ষিত ডেটা অ্যাক্সেস করবেন। নিচের সেটআপ স্ক্রিপ্টটি আপনার জন্য এই পরিকাঠামোটি প্রস্তুত করে দেবে।

  1. সেটআপ স্ক্রিপ্টটি ডাউনলোড করে এটিকে এক্সিকিউটেবল করুন।
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. setup_with_cw.sh ফাইলটি খুলুন এবং বর্তমানে CHANGEME হিসেবে সেট করা পাসওয়ার্ডের মানগুলো সম্পাদনা করুন।
  2. এই ল্যাবে ব্যবহারের জন্য একটি GKE ক্লাস্টার এবং একটি CloudSQL ডেটাবেস স্থাপন করতে সেটআপ স্ক্রিপ্টটি চালান।
./setup_with_cw.sh &

ক্লাউড ওয়ার্কস্টেশন ক্লাস্টার

  1. ক্লাউড কনসোলে ক্লাউড ওয়ার্কস্টেশনগুলো খুলুন। ক্লাস্টারটি READY স্ট্যাটাসে আসা পর্যন্ত অপেক্ষা করুন।

305e1a3d63ac7ff6.png

ওয়ার্কস্টেশন কনফিগারেশন তৈরি করুন

  1. আপনার ক্লাউড শেল সেশনটি সংযোগ বিচ্ছিন্ন হয়ে গেলে, "পুনরায় সংযোগ করুন" (Reconnect) বোতামে ক্লিক করুন এবং তারপরে প্রজেক্ট আইডি সেট করার জন্য gcloud cli কমান্ডটি চালান। কমান্ডটি চালানোর আগে, নীচের নমুনা প্রজেক্ট আইডিটি আপনার কুইকল্যাবস প্রজেক্ট আইডি দিয়ে প্রতিস্থাপন করুন।
gcloud config set project qwiklabs-gcp-project-id
  1. ক্লাউড ওয়ার্কস্টেশন কনফিগারেশন তৈরি করতে নিচের স্ক্রিপ্টটি ডাউনলোড করে টার্মিনালে চালান।
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
  1. কনফিগারেশন বিভাগে ফলাফল যাচাই করুন। READY স্ট্যাটাসে রূপান্তরিত হতে ২ মিনিট সময় লাগবে।

c8f0b8662fdb827e.png

  1. কনসোলে ক্লাউড ওয়ার্কস্টেশন খুলুন এবং নতুন ইনস্ট্যান্স তৈরি করুন।

a53adeeac81a78c8.png

  1. নাম পরিবর্তন করে my-workstation রাখুন এবং বিদ্যমান কনফিগারেশন codeoss-js নির্বাচন করুন।

675d83f30c1319df.png

  1. ওয়ার্কস্টেশন বিভাগে ফলাফল যাচাই করুন।

bf67586e6695852.png

লঞ্চ ওয়ার্কস্টেশন

  1. ওয়ার্কস্টেশনটি চালু করুন। ওয়ার্কস্টেশনটি চালু হতে কয়েক মিনিট সময় লাগবে।

a9ad54f4b4b668e9.png

  1. অ্যাড্রেস বারের আইকনটিতে ক্লিক করে থার্ড পার্টি কুকিজের অনুমতি দিন। 1b8923e2943f9bc4.png

fcf9405b6957b7d7.png

  1. 'সাইট কাজ করছে না?'-এ ক্লিক করুন।

36a84c0e2e3b85b.png

  1. "কুকিজের অনুমতি দিন"-এ ক্লিক করুন।

2259694328628fba.png

  1. ওয়ার্কস্টেশনটি চালু হলে আপনি Code OSS IDE দেখতে পাবেন। ওয়ার্কস্টেশন IDE-এর Getting Started পৃষ্ঠায় "Mark Done"-এ ক্লিক করুন।

94874fba9b74cc22.png

৩. একটি নতুন Nodejs স্টার্টার অ্যাপ্লিকেশন তৈরি করা

এই অংশে আপনি একটি নতুন Nodejs অ্যাপ্লিকেশন তৈরি করবেন।

  1. একটি নতুন টার্মিনাল খুলুন।

c31d48f2e4938c38.png

  1. ক্লাউড শেলে, mynodejsapp নামে একটি নতুন ডিরেক্টরি তৈরি করুন।
mkdir mynodejsapp

এই বার্তাটি দেখতে পেলে Allow বাটনে ক্লিক করুন, যাতে আপনি ওয়ার্কস্টেশনে কপি পেস্ট করতে পারেন।

58149777e5cc350a.png

  1. এই ডিরেক্টরিতে যান এবং এটিকে একটি ওয়ার্কস্পেস হিসেবে খুলুন। এটি নতুন তৈরি হওয়া ফোল্ডারটিতে একটি ওয়ার্কস্পেস কনফিগারেশন তৈরি করে এডিটরটি রিলোড করবে।
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
  1. আবার একটি নতুন টার্মিনাল খুলুন। NVM ব্যবহার করে Node এবং NPM ইনস্টল করুন।
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
        
        # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  

nvm install stable

nvm alias default stable

৪. একটি নতুন স্টার্টার অ্যাপ্লিকেশন তৈরি করুন

  1. অ্যাপ্লিকেশনটি শুরু করুন

নিম্নলিখিত কমান্ডটি চালিয়ে একটি package.json ফাইল তৈরি করুন

npm init
    Choose the `entry point: (index.js) src/index.js` and leave default values for the rest of the parameters. This will create the `package.json` file with following contents
{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  1. একটি প্রবেশপথ যোগ করুন

IDE-তে package.json ফাইলটি খুলুন এবং সম্পাদনা করে স্ক্রিপ্টে "start": "node src/index.js", . এই স্টার্ট কমান্ডটি অন্তর্ভুক্ত করুন। পরিবর্তনের পর স্ক্রিপ্টটি নিচের কোড স্নিপেটের মতো দেখতে হবে:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. এক্সপ্রেস নির্ভরতা যোগ করুন

আমরা যে কোডটি যোগ করতে যাচ্ছি তাতেও express ব্যবহৃত হয়, তাই চলুন এই package.json ফাইলে সেই ডিপেন্ডেন্সিটি যোগ করে নিই। সুতরাং, সমস্ত পরিবর্তনের পর package.json ফাইলটি নিচে দেখানো ছবির মতো হওয়া উচিত।

{
 "name": "mynodejsapp",
 "version": "1.0.0",
 "description": "",
 "main": "src/index.js",
 "scripts": {
   "start": "node src/index.js",
   "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
   "express": "^4.17.3"
 }
}
  1. index.js ফাইলটি তৈরি করুন

এক্সপ্লোরার ভিউতে ‘New Folder’ নির্বাচন করে src নামে একটি সোর্স ডিরেক্টরি তৈরি করুন।

eb507d48f283ce46.png

src/index.js ফাইল তৈরি করুন

3e3e6e6062e501fc.png

নিম্নলিখিত কোড সহ

const express = require('express');
const app = express();
const PORT = 8080;

app.get('/', (req, res) => {
    var message="Greetings from Node";
    res.send({ message: message });
  });

app.listen(PORT, () => {
  console.log(`Server running at: http://localhost:${PORT}/`);

});

লক্ষ্য করুন, পোর্টটির মান 8080 তে সেট করা আছে।

ম্যানিফেস্ট তৈরি করুন

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

টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।

skaffold init --generate-manifests

জিজ্ঞাসা করা হলে:

  • পোর্টের জন্য 8080 লিখুন।
  • কনফিগারেশন সংরক্ষণ করতে y লিখুন।

ওয়ার্কস্পেসে দুটি ফাইল যোগ করা হয়েছে, যথা, skaffold.yaml এবং deployment.yaml

অ্যাপের নাম আপডেট করুন

কনফিগারেশনে অন্তর্ভুক্ত ডিফল্ট মানগুলো বর্তমানে আপনার অ্যাপ্লিকেশনের নামের সাথে মিলছে না। ডিফল্ট মানগুলোর পরিবর্তে আপনার অ্যাপ্লিকেশনের নাম উল্লেখ করার জন্য ফাইলগুলো আপডেট করুন।

  1. স্ক্যাফোল্ড কনফিগে এন্ট্রি পরিবর্তন করুন
  • skaffold.yaml খুলুন
  • বর্তমানে package-json-image হিসেবে সেট করা ছবির নামটি নির্বাচন করুন।
  • ডান ক্লিক করুন এবং সমস্ত ঘটনা পরিবর্তন করুন নির্বাচন করুন
  • নতুন নাম হিসেবে mynodejsapp টাইপ করুন।
  1. Kubernetes কনফিগে এন্ট্রি পরিবর্তন করুন
  • deployment.yaml ফাইলটি খুলুন
  • বর্তমানে package-json-image হিসেবে সেট করা ছবির নামটি নির্বাচন করুন।
  • ডান ক্লিক করুন এবং সমস্ত ঘটনা পরিবর্তন করুন নির্বাচন করুন
  • নতুন নাম হিসেবে mynodejsapp টাইপ করুন।

লক্ষ্য করুন যে skaffold.yaml ফাইলের build সেকশনে অ্যাপ্লিকেশনটিকে কন্টেইনারাইজ করার জন্য buildpacks ব্যবহার করা হয়েছে। এই কোডে কোনো ডকারফাইল (Dockerfile) নেই এবং এই অ্যাপ্লিকেশনটিকে কন্টেইনারাইজ করার জন্য ডেভেলপারের ডকার (docker) সম্পর্কে কোনো জ্ঞানের প্রয়োজন নেই।

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

৫. উন্নয়ন প্রক্রিয়াটি পর্যালোচনা করা

এই অংশে আপনি ক্লাউড কোড প্লাগইন ব্যবহার করে কয়েকটি ধাপ অনুসরণ করার মাধ্যমে মৌলিক প্রক্রিয়াগুলো শিখবেন এবং আপনার স্টার্টার অ্যাপ্লিকেশনের কনফিগারেশন ও সেটআপ যাচাই করবেন।

ক্লাউড কোড আপনার ডেভেলপমেন্ট প্রক্রিয়াকে সুবিন্যস্ত করতে স্ক্যাফোল্ডের সাথে সমন্বিত হয়। যখন আপনি পরবর্তী ধাপগুলোতে GKE-তে ডিপ্লয় করবেন, ক্লাউড কোড এবং স্ক্যাফোল্ড স্বয়ংক্রিয়ভাবে আপনার কন্টেইনার ইমেজ তৈরি করবে, সেটিকে একটি কন্টেইনার রেজিস্ট্রি-তে পুশ করবে এবং তারপর আপনার অ্যাপ্লিকেশনটি GKE-তে ডিপ্লয় করবে। এই পুরো প্রক্রিয়াটি নেপথ্যে সম্পন্ন হয়, যা ডেভেলপারের কাজের ধারা থেকে খুঁটিনাটি বিষয়গুলো আড়াল করে রাখে। এছাড়াও, ক্লাউড কোড কন্টেইনার-ভিত্তিক ডেভেলপমেন্টে প্রচলিত ডিবাগ এবং হটসিঙ্ক সুবিধা প্রদান করে আপনার ডেভেলপমেন্ট প্রক্রিয়াকে আরও উন্নত করে।

গুগল ক্লাউডে সাইন ইন করুন

  1. ক্লাউড কোড আইকনে ক্লিক করুন এবং 'গুগল ক্লাউডে সাইন ইন করুন' নির্বাচন করুন:

1769afd39be372ff.png

  1. 'সাইন ইন করতে এগিয়ে যান'-এ ক্লিক করুন।

923bb1c8f63160f9.png

  1. টার্মিনালে আউটপুটটি দেখুন এবং লিঙ্কটি খুলুন:

517fdd579c34aa21.png

  1. আপনার কুইকল্যাবস ছাত্র পরিচয়পত্র দিয়ে লগইন করুন।

db99b345f7a8e72c.png

  1. "অনুমতি দিন" নির্বাচন করুন:

a5376553c430ac84.png

  1. যাচাইকরণ কোডটি কপি করে ওয়ার্কস্টেশন ট্যাবে ফিরে যান।

6719421277b92eac.png

  1. যাচাইকরণ কোডটি পেস্ট করে এন্টার চাপুন।

e9847cfe3fa8a2ce.png

কুবারনেটিস ক্লাস্টার যোগ করুন

  1. একটি ক্লাস্টার যোগ করুন

62a3b97bdbb427e5.png

  1. গুগল কুবারনেটিস ইঞ্জিন নির্বাচন করুন:

9577de423568bbaa.png

  1. প্রকল্প নির্বাচন করুন।

c5202fcbeebcd41c.png

  1. প্রাথমিক সেটআপে তৈরি করা 'mycluster' নির্বাচন করুন।

33863e94d1c5045f.png

  1. ক্লাস্টারটি এখন কুবারনেটিস ক্লাস্টার তালিকায় ক্লাউড কোডের অধীনে দেখা যাচ্ছে। এখান থেকে ক্লাস্টারটি নেভিগেট ও অন্বেষণ করুন।

7e5f50662d4eea3c.png

gcloud cli ব্যবহার করে বর্তমান প্রজেক্ট আইডি সেট করুন

  1. qwiklabs পৃষ্ঠা থেকে এই ল্যাবের প্রজেক্ট আইডি কপি করুন।

fcff2d10007ec5bc.png

  1. টার্মিনাল থেকে প্রজেক্ট আইডি সেট করার জন্য gcloud cli কমান্ডটি চালান। কমান্ডটি চালানোর আগে নমুনা প্রজেক্ট আইডিটি পরিবর্তন করুন। নিচের কমান্ডটি চালানোর আগে প্রজেক্ট আইডিটি প্রতিস্থাপন করুন।
gcloud config set project qwiklabs-gcp-project-id

কুবারনেটিসে ডিপ্লয় করুন

  1. Cloud Shell Editor-এর নিচের প্যানে, Cloud Code নির্বাচন করুন।

c5dd5a749136407b.png

  1. উপরে প্রদর্শিত প্যানেলে ‘ডেভেলপমেন্ট সেশনস’ (DEVELOPMENT SESSIONS)-এর নিচে, ‘রান অন কুবারনেটিস’ (Run on Kubernetes) নির্বাচন করুন। অনুরোধ করা হলে, বর্তমান কুবারনেটিস কনটেক্সট ব্যবহার করার জন্য ‘হ্যাঁ’ (Yes) নির্বাচন করুন।

7da53b9480e8eb0d.png

  1. প্রথমবার কমান্ডটি চালালে স্ক্রিনের উপরে একটি প্রম্পট আসবে, যেখানে জিজ্ঞাসা করা হবে আপনি বর্তমান কুবারনেটিস কনটেক্সটটি চান কিনা। বর্তমান কনটেক্সটটি গ্রহণ ও ব্যবহার করতে 'Yes' নির্বাচন করুন।

a6e58a7f0d117391.png

  1. এরপর কোন কন্টেইনার রেজিস্ট্রি ব্যবহার করতে হবে তা জানতে চেয়ে একটি প্রম্পট প্রদর্শিত হবে। প্রদত্ত ডিফল্ট মানটি গ্রহণ করতে এন্টার চাপুন।

13236a26c8dbe84f.png

  1. অগ্রগতি এবং বিজ্ঞপ্তি দেখতে নিচের প্যানে আউটপুট ট্যাব এবং ড্রপডাউন থেকে Kubernetes: Run/Debug নির্বাচন করুন।

606ff9cdebc03dff.png

  1. কন্টেইনারগুলো থেকে সরাসরি সম্প্রচারিত অতিরিক্ত বিবরণ এবং লগ দেখতে ডানদিকের চ্যানেল ড্রপ-ডাউন থেকে 'Kubernetes: Run/Debug - Detailed' নির্বাচন করুন।

ab45d2574f4f2478.png

  1. ড্রপডাউন থেকে 'Kubernetes: Run/Debug' নির্বাচন করে সরলীকৃত ভিউতে ফিরে যান।
  2. যখন বিল্ড এবং টেস্ট সম্পন্ন হয়, তখন আউটপুট ট্যাবে লেখা থাকে: Resource deployment/mynodejsapp status completed successfully , এবং একটি ইউআরএল তালিকাভুক্ত হয়: "Forwarded URL from service demo-app: http://localhost:8080"
  3. ক্লাউড কোড টার্মিনালে, আউটপুটে থাকা URL-টির (http://localhost:8080) উপর মাউস রাখুন এবং তারপরে যে টুলটিপটি প্রদর্শিত হবে, সেখান থেকে 'Follow Link' নির্বাচন করুন।

উত্তরটি হবে:

{"message":"Greetings from Node"}

হট রিলোড

  1. src/index.js ফাইলে যান। কোডটি সম্পাদনা করে অভিবাদন বার্তাটি 'Hello from Node'

অবিলম্বে লক্ষ্য করুন যে Output উইন্ডোর Kubernetes: Run/Debug ভিউতে, ওয়াচারটি Kubernetes-এর কন্টেইনারের সাথে আপডেট হওয়া ফাইলগুলো সিঙ্ক করে।

Update initiated
File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Update succeeded
  1. আপনি যদি Kubernetes: Run/Debug - Detailed view-তে যান, তাহলে লক্ষ্য করবেন যে এটি ফাইলের পরিবর্তন শনাক্ত করে এবং নোডটি পুনরায় চালু করে।
files modified: [src/index.js]
Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Watching for changes...
[mynodejsapp]
[mynodejsapp]> mynodejsapp@1.0.0 start /workspace
[mynodejsapp]> node src/index.js
[mynodejsapp]
[mynodejsapp]Server running at: http://localhost:8080/
  1. হালনাগাদ ফলাফল দেখতে আপনার ব্রাউজার রিফ্রেশ করুন।

ডিবাগিং

  1. ডিবাগ ভিউতে যান এবং বর্তমান থ্রেডটি বন্ধ করুন। 647213126d7a4c7b.png .
  2. অ্যাপ্লিকেশনটি debug মোডে চালানোর জন্য নিচের মেনুতে থাকা Cloud Code -এ ক্লিক করুন এবং Debug on Kubernetes নির্বাচন করুন।

dbd0c6cfd9e9d0e9.png

  • Kubernetes Run/Debug - Detailed view of Output উইন্ডোতে লক্ষ্য করুন যে, skaffold এই অ্যাপ্লিকেশনটি ডিবাগ মোডে ডেপ্লয় করবে।
  • অ্যাপ্লিকেশনটি বিল্ড এবং ডেপ্লয় হতে কয়েক মিনিট সময় লাগবে। এবার আপনি লক্ষ্য করবেন যে একটি ডিবাগার সংযুক্ত হয়েছে।
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. নিচের স্ট্যাটাস বারটির রঙ নীল থেকে কমলায় পরিবর্তিত হলে তা ডিবাগ মোডে থাকার ইঙ্গিত দেয়।

d1224f12cd659995.png

  1. Kubernetes Run/Debug ভিউতে লক্ষ্য করুন যে একটি Debuggable কন্টেইনার চালু হয়েছে।
**************URLs*****************
Forwarded URL from service mynodejsapp-service: http://localhost:8080
Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default)
Update succeeded
***********************************

ব্রেকপয়েন্ট ব্যবহার করুন

  1. src/index.js খুলুন
  2. var message="Hello from Node"; এই স্টেটমেন্টটি খুঁজুন।
  3. লাইন নম্বরের বাম পাশের ফাঁকা জায়গায় ক্লিক করে ওই লাইনে একটি ব্রেকপয়েন্ট যোগ করুন। ব্রেকপয়েন্ট সেট করা হয়েছে তা বোঝাতে একটি লাল ইন্ডিকেটর দেখা যাবে।
  4. আপনার ব্রাউজারটি রিলোড করুন এবং লক্ষ্য করুন যে ডিবাগারটি ব্রেকপয়েন্টে প্রসেসটিকে থামিয়ে দেয় এবং আপনাকে GKE-তে দূরবর্তীভাবে চলমান অ্যাপ্লিকেশনটির ভেরিয়েবল ও অবস্থা খতিয়ে দেখার সুযোগ করে দেয়।
  5. ভেরিয়েবল সেকশনের গভীরে ক্লিক করতে থাকুন যতক্ষণ না "message" ভেরিয়েবলটি খুঁজে পান।
  6. Step over চেপে লাইনটি কার্যকর করুন। 7cfdee4fd6ef5c3a.png
  7. লক্ষ্য করুন "message" ভেরিয়েবলের বর্তমান মান পরিবর্তিত হয়ে "Hello from Node" হয়েছে।
  8. 'target' ভেরিয়েবল নামের উপর ডাবল ক্লিক করুন এবং পপ-আপে, মানটি পরিবর্তন করে "Hi from Node" এর মতো অন্য কিছু দিন।
  9. ডিবাগ কন্ট্রোল প্যানেলে থাকা কন্টিনিউ বাটনে ক্লিক করুন।
  10. আপনার ব্রাউজারে প্রাপ্ত প্রতিক্রিয়াটি পর্যালোচনা করুন, যেখানে এখন আপনার এইমাত্র প্রবেশ করানো হালনাগাদ মানটি দেখাচ্ছে।
  11. স্টপ বাটন টিপে 'ডিবাগ' মোড বন্ধ করুন। 647213126d7a4c7b.png এবং ব্রেকপয়েন্টটিতে আবার ক্লিক করে সেটি সরিয়ে ফেলুন।

৬. একটি সহজ CRUD রেস্ট সার্ভিস তৈরি করা

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

নির্ভরতা কনফিগার করুন

অ্যাপ্লিকেশন কোডটি রেস্ট সার্ভিসের ডেটা সংরক্ষণের জন্য একটি ডেটাবেস ব্যবহার করে। package.json ফাইলে নিম্নলিখিতটি যোগ করে ডিপেন্ডেন্সিগুলো উপলব্ধ আছে কিনা তা নিশ্চিত করুন।

  1. পোস্টগ্রেস ব্যবহার করে একটি CRUD অ্যাপ্লিকেশন বিল্ড করার জন্য package.json ফাইলে আরও দুটি ডিপেন্ডেন্সি, pg এবং sequelize যোগ করুন। পরিবর্তনের পর ডিপেন্ডেন্সি সেকশনটি দেখতে এইরকম হবে।
    "dependencies": {
    "express": "^4.17.3",
    "pg": "^8.8.0",
    "sequelize": "^6.25.7"
  }

REST পরিষেবাটি কোড করুন

  1. এই অ্যাপ্লিকেশনে CRUD অ্যাপ্লিকেশন কোড যোগ করুন
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

এই কোডটিতে আছে

  • item জন্য এনটিটি মডেল সহ মডেল ফোল্ডার
  • কন্ট্রোলার ফোল্ডারে CRUD অপারেশনগুলো সম্পাদনকারী কোড থাকে।
  • রাউটস ফোল্ডার যা নির্দিষ্ট ইউআরএল প্যাটার্নকে বিভিন্ন কলে রাউট করে
  • ডাটাবেস সংযোগের বিবরণ সহ কনফিগ ফোল্ডার
  1. উল্লেখ্য db.config.js ফাইলের ডাটাবেস কনফিগারেশনটি সেই এনভায়রনমেন্ট ভেরিয়েবলগুলোকে নির্দেশ করে, যেগুলো ডাটাবেসের সাথে সংযোগ স্থাপনের জন্য সরবরাহ করতে হয়। এছাড়াও, ইউআরএল এনকোডিংয়ের জন্য আপনাকে আগত অনুরোধটি পার্স করতে হবে।
  2. আপনার প্রধান জাভাস্ক্রিপ্ট ফাইল থেকে CRUD কোডের সাথে সংযোগ করতে, src/index.js ফাইলে app.listen(PORT, () => { দিয়ে শুরু হওয়া শেষ অংশের ঠিক আগে নিম্নলিখিত কোড স্নিপেটটি যোগ করুন।
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
 bodyParser.urlencoded({
   extended: true,
 })
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
  1. ডাটাবেস সংযোগের তথ্য সরবরাহ করার জন্য এনভায়রনমেন্ট ভেরিয়েবল যোগ করতে deployment.yaml ফাইলে ডিপ্লয়মেন্টটি সম্পাদনা করুন।

ফাইলের শেষে থাকা স্পেক এন্ট্রিটি নিম্নলিখিত সংজ্ঞার সাথে মিলিয়ে আপডেট করুন।

    spec:
      containers:
      - name: mynodejsapp
        image: mynodejsapp
        env:
        - name: DB_HOST
          value: ${DB_INSTANCE_IP}        
        - name: DB_PORT
          value: "5432"  
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: database
  1. DB_HOST মানটি আপনার ডাটাবেসের ঠিকানা দিয়ে প্রতিস্থাপন করুন।
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")

envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml

অ্যাপ্লিকেশন স্থাপন এবং যাচাই করুন

  1. Cloud Shell Editor-এর নিচের প্যানে Cloud Code নির্বাচন করুন, তারপর স্ক্রিনের উপরে Debug on Kubernetes নির্বাচন করুন।
  2. যখন বিল্ড এবং টেস্ট সম্পন্ন হয়, তখন আউটপুট ট্যাবে লেখা থাকে: Resource deployment/mynodejsapp status completed successfully , এবং একটি ইউআরএল তালিকাভুক্ত হয়: "Forwarded URL from service mynodejsapp: http://localhost:8080"
  3. কয়েকটি আইটেম যোগ করুন।

ক্লাউডশেল টার্মিনাল থেকে নিচের কমান্ডগুলো চালান।

URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
  1. ব্রাউজারে $URL/items চালিয়ে GET অনুরোধটি পরীক্ষা করুন। আপনি কমান্ড লাইন থেকেও curl চালাতে পারেন।
curl -X GET $URL/items
  1. টেস্ট ডিলিট: এখন নিচের কমান্ডটি চালিয়ে একটি আইটেম ডিলিট করার চেষ্টা করুন। প্রয়োজনে আইটেম-আইডি-র মান পরিবর্তন করুন।
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

সমস্যাটি চিহ্নিত করুন এবং সমাধান করুন

  1. অ্যাপ্লিকেশনটি ডিবাগ মোডে চলছে। তাই সমস্যাটি খুঁজে বের করতে ব্রেকপয়েন্ট ব্যবহার করুন। এখানে কিছু পরামর্শ দেওয়া হলো:
  • আমরা জানি DELETE মেথডটিতে কোনো সমস্যা আছে, কারণ এটি কাঙ্ক্ষিত ফলাফল দিচ্ছে না। তাই আপনাকে itemcontroller.js ফাইলের exports.delete মেথডে ব্রেকপয়েন্ট সেট করতে হবে।
  • ধাপে ধাপে প্রোগ্রামটি চালান এবং বাম দিকের উইন্ডোতে লোকাল ভেরিয়েবলগুলোর মান পর্যবেক্ষণ করতে প্রতিটি ধাপে ভেরিয়েবলগুলো লক্ষ্য করুন।
  • request.params এর মতো নির্দিষ্ট মান পর্যবেক্ষণ করতে, এই ভেরিয়েবলটি ওয়াচ উইন্ডোতে যোগ করুন।
  1. লক্ষ্য করুন যে id তে নির্ধারিত মানটি undefined । সমস্যাটি সমাধান করতে কোডটি পরিবর্তন করুন।

সংশোধিত কোড স্নিপেটটি দেখতে এইরকম হবে।

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. অ্যাপ্লিকেশনটি পুনরায় চালু করার পর, ডিলিট করার চেষ্টা করে আবার পরীক্ষা করুন।
  2. ডিবাগ টুলবারের লাল বর্গক্ষেত্রটিতে ক্লিক করে ডিবাগিং সেশনটি বন্ধ করুন। 647213126d7a4c7b.png

৭. পরিচ্ছন্নতা

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

ল্যাব শেষ করার পর পরিষ্কার করার জন্য:

  1. ল্যাবে ব্যবহৃত ফাইলগুলো মুছে ফেলুন।
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. সম্পর্কিত সমস্ত অবকাঠামো ও রিসোর্স অপসারণ করতে প্রজেক্টটি ডিলিট করুন।