ট্রাফিক বিভাজন, ধীরে ধীরে রোলআউট এবং রোলব্যাকের জন্য ক্লাউড রান ফাংশনে সংশোধন ব্যবহার করা

1. ভূমিকা

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

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

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

তুমি কি শিখবে

  • ক্লাউড রান ফাংশনের জন্য দুই বা ততোধিক সংশোধনের মধ্যে ট্র্যাফিক কীভাবে ভাগ করবেন
  • কিভাবে ধীরে ধীরে একটি নতুন সংস্করণ প্রকাশ করা যায়
  • পূর্ববর্তী সংস্করণে কীভাবে ফিরে যাবেন

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

পূর্বশর্ত

  • আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
  • আপনি আগে একটি ক্লাউড রান ফাংশন স্থাপন করেছেন। উদাহরণস্বরূপ, শুরু করার জন্য আপনি ক্লাউড রান ফাংশন স্থাপন করতে পারেন।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন d1264ca30785e435.png সম্পর্কে .

cb81e7c8e34bc8d.png সম্পর্কে

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে Continue এ ক্লিক করুন।

d95252b003979716.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

7833d5e1c5d18f54.png সম্পর্কে

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

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

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

3. ট্র্যাফিক বিভাজন

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

যদিও এই কোডল্যাবটি node.js ব্যবহার করে, আপনি যেকোনো রানটাইম ব্যবহার করতে পারেন।

পরিবেশগত ভেরিয়েবল সেট করুন

আপনি এই কোডল্যাব জুড়ে ব্যবহৃত পরিবেশগত ভেরিয়েবল সেট করতে পারেন।

REGION=<YOUR_REGION>
PROJECT_ID=<YOUR-PROJECT-ID>
BG_COLOR=darkseagreen

ফাংশনটি তৈরি করুন

প্রথমে, সোর্স কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে সিডি দিন।

mkdir revisions-gcf-codelab && cd $_

তারপর, নিম্নলিখিত বিষয়বস্তু সহ একটি package.json ফাইল তৈরি করুন:

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

এরপর, নিম্নলিখিত কন্টেন্ট সহ একটি index.js সোর্স ফাইল তৈরি করুন:

const functions = require('@google-cloud/functions-framework');

const BG_COLOR = process.env.BG_COLOR;
const K_REVISION = process.env.K_REVISION;

functions.http('helloWorld', (req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<html><body style="background-color:' + BG_COLOR + ';"' + '><div><p>' + 'Hello from ' + K_REVISION + ' using color ' + BG_COLOR + '</p></div></body>' + '</html>');
});

ক্লাউড রান ফাংশনটি সরাসরি ক্লাউড রানে স্থাপন করতে, নিম্নলিখিত কমান্ডটি চালান:

gcloud beta run deploy traffic-splitting-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --set-env-vars BG_COLOR=$BG_COLOR

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

gcloud functions deploy traffic-splitting-gcf \
  --gen2 \
  --runtime=nodejs20 \
  --region=$REGION \
  --source=. \
  --entry-point=helloWorld \
  --trigger-http \
  --no-allow-unauthenticated \
  --set-env-vars BG_COLOR=$BG_COLOR

ফাংশনটি পরীক্ষা করার জন্য, আপনি হয় বিদ্যমান এন্ডপয়েন্টটি কার্ল করে html-এ গাঢ় সবুজ রঙ দেখতে পারেন, অথবা আপনার ব্রাউজার ব্যবহার করে সরাসরি এন্ডপয়েন্টে ক্লিক করে ব্যাকগ্রাউন্ড রঙ দেখতে পারেন।

SERVICE_URL=$(gcloud run services describe traffic-splitting-gcf --platform managed --region $REGION --format 'value(status.url)')

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

এখন একটি বাদামী পটভূমির রঙ সহ দ্বিতীয় সংস্করণ স্থাপন করুন।

ক্লাউড রান ফাংশনটি সরাসরি ক্লাউড রানে স্থাপন করতে, নিম্নলিখিত কমান্ডটি চালান:

# update the env var
BG_COLOR=tan

gcloud beta run deploy traffic-splitting-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

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

# update the env var
BG_COLOR=tan

gcloud functions deploy traffic-splitting-gcf \
  --gen2 \
  --runtime nodejs20 \
  --entry-point helloHttp \
  --source . \
  --region $REGION \
  --trigger-http \
  --no-allow-unauthenticated \
  --update-env-vars BG_COLOR=$BG_COLOR

এখন যখন আপনি এন্ডপয়েন্টটি কার্ল করবেন, তখন আপনি ট্যান ব্যাকগ্রাউন্ডের রঙ দেখতে পাবেন।

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

ট্র্যাফিক ৫০-৫০ ভাগে ভাগ করুন

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

gcloud run revisions list --service traffic-splitting-gcf \
  --region $REGION --format 'value(REVISION)'

আপনি নীচের ফলাফলের মতো ফলাফল দেখতে পাবেন।

traffic-splitting-gcf-00003-qoq
traffic-splitting-gcf-00002-zag

নিম্নলিখিত কমান্ডটি চালিয়ে আপনি দুটি সংস্করণের মধ্যে ট্র্যাফিক ৫০/৫০ ভাগে ভাগ করতে পারেন:

gcloud run services update-traffic traffic-splitting-gcf \
  --region $REGION \
  --to-revisions <REVISION1>=50,<REVISION2>=50

ট্র্যাফিক বিভাজন পরীক্ষা করুন

আপনি ফাংশনটির পাবলিক URL (হয় কার্ল দ্বারা অথবা সরাসরি ব্রাউজারে) পরিদর্শন করে পরীক্ষা করতে পারেন।

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL

অর্ধেক সময়, আপনি গাঢ় সমুদ্রের সবুজ সংস্করণ দেখতে পাবেন এবং বাকি অর্ধেক, ট্যান সংস্করণ। আপনি আউটপুটে তালিকাভুক্ত সংস্করণের নামও দেখতে পাবেন, যেমন

<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>

৪. ধীরে ধীরে রোলআউট

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

আপনি আগের বিভাগের মতো একই কোড ব্যবহার করবেন, তবে আপনি এটি একটি নতুন ক্লাউড ফাংশন হিসাবে স্থাপন করবেন।

প্রথমে, ব্যাকগ্রাউন্ড কালারটি beige সেট করুন এবং gradual-rollouts-gcf নাম দিয়ে ফাংশনটি স্থাপন করুন।

ক্লাউড রান ফাংশনটি সরাসরি ক্লাউড রানে স্থাপন করতে, নিম্নলিখিত কমান্ডটি চালান:

# update the env var
BG_COLOR=beige

gcloud beta run deploy gradual-rollouts-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

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

# update the env var
BG_COLOR=beige

# deploy the function
gcloud functions deploy gradual-rollouts-gcf \
  --gen2 \
  --runtime nodejs20 \
  --entry-point helloHttp \
  --source . \
  --region $REGION \
  --trigger-http \
  --no-allow-unauthenticated \
  --update-env-vars BG_COLOR=$BG_COLOR

এখন ধরা যাক আমরা ধীরে ধীরে ল্যাভেন্ডারের ব্যাকগ্রাউন্ড কালার দিয়ে একটি নতুন সংস্করণ তৈরি করতে চাই।

প্রথমে, বর্তমান রিভিশন বেইজকে ১০০% ট্র্যাফিক গ্রহণের জন্য সেট করা যাক। এটি নিশ্চিত করবে যে আপনার ভবিষ্যতের ক্লাউড ফাংশন ডিপ্লয়মেন্টগুলি কোনও ট্র্যাফিক গ্রহণ করবে না। ডিফল্টরূপে, ক্লাউড ফাংশনগুলি latest ফ্ল্যাগ সহ রিভিশনে ১০০% ট্র্যাফিক সেট করে। এই বর্তমান রিভিশন বেইজটি সমস্ত ট্র্যাফিক গ্রহণ করবে তা ম্যানুয়ালি নির্দিষ্ট করে, latest ফ্ল্যাগ সহ রিভিশনটি আর ১০০% ট্র্যাফিক গ্রহণ করবে না। ডকুমেন্টেশন দেখুন।

# get the revision name

BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-gcf \
  --region $REGION --format 'value(REVISION)')

# now set 100% traffic to that revision

gcloud run services update-traffic gradual-rollouts-gcf --to-revisions=$BEIGE_REVISION=100 --region $REGION

আপনি Traffic: 100% gradual-rollouts-gcf2-00001-yox

এখন আপনি একটি নতুন সংস্করণ স্থাপন করতে পারেন যা কোনও ট্র্যাফিক পাবে না। কোনও কোড পরিবর্তন করার পরিবর্তে, আপনি এই সংস্করণের জন্য BG_COLOR পরিবেশ ভেরিয়েবল আপডেট করতে পারেন।

ক্লাউড রান ফাংশনটি সরাসরি ক্লাউড রানে স্থাপন করতে, নিম্নলিখিত কমান্ডটি চালান:

# update color

BG_COLOR=lavender

# deploy the function that will not receive any traffic
gcloud beta run deploy gradual-rollouts-gcf \
      --source . \
      --function helloWorld \
      --region $REGION \
      --no-allow-unauthenticated \
      --update-env-vars BG_COLOR=$BG_COLOR

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

# update color

BG_COLOR=lavender

# deploy the function that will not receive any traffic
gcloud functions deploy gradual-rollouts-gcf \
  --gen2 \
  --runtime nodejs20 \
  --entry-point helloHttp \
  --source . \
  --region $REGION \
  --trigger-http \
  --no-allow-unauthenticated \
  --update-env-vars BG_COLOR=$BG_COLOR \
  --tag $BG_COLOR

এখন gradual-rollouts-gcf ফাংশন ব্যবহার করার জন্য SERVICE_URL এনভায়রনমেন্ট ভেরিয়েবল আপডেট করুন।

SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')

আর এখন যখন তুমি পরিষেবাটি কার্ল করবে

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

আপনি বেইজ রঙ দেখতে পাবেন, যদিও ল্যাভেন্ডার ছিল সাম্প্রতিকতম সংস্করণ।

<html><body style="background-color:beige;"><div><p>Hello from gradual-rollouts-gcf-24jan16-staging-2-00001-kop using color beige</p></div></body></html>

০% ট্র্যাফিক পরিবেশনকারী একটি সংশোধন পরীক্ষা করুন

ধরুন আপনি যাচাই করেছেন যে আপনার সংস্করণটি সফলভাবে স্থাপন করা হয়েছে এবং এটি 0% ট্র্যাফিক পরিবেশন করছে। যদিও এটি স্বাস্থ্য পরীক্ষায় উত্তীর্ণ হয়েছে, তবুও আপনি যাচাই করতে চান যে এই সংস্করণটি ল্যাভেন্ডার ব্যাকগ্রাউন্ড রঙ ব্যবহার করছে।

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

প্রথমে, সেই সংস্করণের ছবির URLটি পান।

IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')

এবং এখন সেই ছবিটিকে তার সংশ্লিষ্ট রঙের সাথে ট্যাগ করুন।

gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated

আপনি নিচের মত আউটপুট দেখতে পাবেন:

The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app

এখন আপনি সরাসরি এই সংশোধনটি কার্ল করতে পারেন

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>

এবং ফলাফলে ল্যাভেন্ডারের রঙ দেখুন:

<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>

ধীরে ধীরে ট্র্যাফিক বৃদ্ধি পাচ্ছে

এখন, আপনি ল্যাভেন্ডার রিভিশনে ট্র্যাফিক পাঠানো শুরু করতে পারেন। নীচের উদাহরণে দেখানো হয়েছে কিভাবে ল্যাভেন্ডারে 1% ট্র্যাফিক পাঠাতে হয়।

gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1

ল্যাভেন্ডারে ৫০% ট্র্যাফিক পাঠাতে, আপনি একই কমান্ড ব্যবহার করতে পারেন, তবে পরিবর্তে ৫০% উল্লেখ করুন।

gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=50

প্রতিটি সংস্করণ কত ট্র্যাফিক পাচ্ছে তার একটি তালিকা আপনার দেখা উচিত।

Traffic:
  50% gradual-rollouts-gcf-00001-hos
  50% gradual-rollouts-gcf-00004-mum
        lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app

যখন আপনি সম্পূর্ণরূপে ল্যাভেন্ডার রোল আউট করার জন্য প্রস্তুত হবেন, তখন আপনি বেইজ রঙের পরিবর্তে ল্যাভেন্ডারকে ১০০% এ সেট করতে পারেন।

gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100

এবং এখন যখন আপনি gradual-rollouts-gcf ফাংশন পরিষেবা URL টি পরিদর্শন করবেন বা কার্ল করবেন,

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

তুমি কেবল ল্যাভেন্ডার দেখতে পাবে।

<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>

৫. রোলব্যাক

ধরুন, প্রাথমিক UX প্রতিক্রিয়া এসেছে, যা ইঙ্গিত করে যে গ্রাহকরা ল্যাভেন্ডারের চেয়ে বেইজ রঙ পছন্দ করেন, এবং আপনাকে বেইজে ফিরে যেতে হবে।

এই কমান্ডটি চালিয়ে আপনি পূর্ববর্তী সংস্করণে (বেইজ) ফিরে যেতে পারেন।

gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100

এবং এখন যখন আপনার কার্ল বা ফাংশন URL এন্ডপয়েন্টে যান,

curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

তুমি দেখতে পাবে বেইজ ফিরে এসেছে।

<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>

আপনি ডক্সে রোলব্যাক সম্পর্কে আরও জানতে পারেন।

৬. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!

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

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

  • ক্লাউড রান ফাংশনের জন্য দুই বা ততোধিক সংশোধনের মধ্যে ট্র্যাফিক কীভাবে ভাগ করবেন
  • কিভাবে ধীরে ধীরে একটি নতুন সংস্করণ প্রকাশ করা যায়
  • পূর্ববর্তী সংস্করণে কীভাবে ফিরে যাবেন

৭. পরিষ্কার করা

অসাবধানতাবশত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান ফাংশনটি আপনার মাসিক ফ্রি টিয়ারে ক্লাউড ফাংশন ইনভোকমেন্ট বরাদ্দের চেয়ে বেশিবার অনিচ্ছাকৃতভাবে ইনভোক করা হয়), আপনি হয় ক্লাউড রান ফাংশনটি মুছে ফেলতে পারেন অথবা ধাপ ২-এ তৈরি করা প্রকল্পটি মুছে ফেলতে পারেন।

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

দ্বিতীয় প্রজন্মের ফাংশন হিসেবে মোতায়েন করা ক্লাউড রান ফাংশনগুলি মুছে ফেলতে, https://console.cloud.google.com/functions/ এ ক্লাউড কনসোলের ক্লাউড ফাংশনগুলিতে যান এবং এই কোডল্যাবে আপনার তৈরি করা ফাংশনগুলি মুছে ফেলুন।

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