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

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

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

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই একটি ব্রাউজার দিয়ে করা সম্ভব।
ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- gcloud কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
৩. ট্র্যাফিক বিভাজন
এই নমুনাটি আপনাকে দেখাবে কীভাবে এমন একটি ফাংশন তৈরি করতে হয়, যা একটি কালার এনভায়রনমেন্ট ভেরিয়েবল পড়ে এবং সেই ব্যাকগ্রাউন্ড কালার ব্যবহার করে রিভিশনের নামটি ফেরত পাঠায়।
যদিও এই কোডল্যাবটিতে 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
ফাংশনটি পরীক্ষা করার জন্য, আপনি হয় বিদ্যমান এন্ডপয়েন্টটি curl করে html-এ darkseagreen রঙটি দেখতে পারেন, অথবা সরাসরি আপনার ব্রাউজার ব্যবহার করে এন্ডপয়েন্টটিতে হিট করে ব্যাকগ্রাউন্ডের রঙটি দেখতে পারেন।
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
ট্র্যাফিক বিভাজন পরীক্ষা করুন
আপনি এর পাবলিক ইউআরএল-এ গিয়ে ফাংশনটি পরীক্ষা করতে পারেন (curl ব্যবহার করে অথবা সরাসরি ব্রাউজারে)।
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
এখন gradient-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>
০% ট্র্যাফিক পরিবেশনকারী একটি সংস্করণ পরীক্ষা করুন
ধরা যাক, আপনি যাচাই করে দেখেছেন যে আপনার রিভিশনটি সফলভাবে ডেপ্লয় হয়েছে এবং এটি ০% ট্র্যাফিক সামলাচ্ছে। হেলথ চেক পাস করা সত্ত্বেও, আপনি এখনও যাচাই করতে চান যে এই রিভিশনটি ল্যাভেন্ডার ব্যাকগ্রাউন্ড কালার ব্যবহার করছে কিনা।
ল্যাভেন্ডার সংস্করণটি পরীক্ষা করার জন্য, আপনি সেই সংস্করণে একটি ট্যাগ প্রয়োগ করতে পারেন। ট্যাগিং আপনাকে ট্র্যাফিক পরিবেশন না করেই, একটি নির্দিষ্ট 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>
ধীরে ধীরে বাড়তে থাকা ট্র্যাফিক
এখন, আপনি ল্যাভেন্ডার রিভিশনে ট্র্যাফিক পাঠানো শুরু করতে পারেন। নিচের উদাহরণটিতে দেখানো হয়েছে কীভাবে ল্যাভেন্ডারে ১% ট্র্যাফিক পাঠাতে হয়।
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
এবং এখন যখন আপনি gradient-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>
৫. প্রত্যাহার
ধরুন, প্রাথমিক ইউএক্স ফিডব্যাক থেকে জানা গেছে যে গ্রাহকরা ল্যাভেন্ডারের চেয়ে বেইজ রঙ বেশি পছন্দ করেন এবং আপনাকে আগের বেইজ রঙে ফিরে যেতে হবে।
এই কমান্ডটি চালিয়ে আপনি পূর্ববর্তী সংস্করণ (বেইজ)-এ ফিরে যেতে পারেন।
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
এবং এখন যখন আপনি `curl` ব্যবহার করবেন অথবা ফাংশন 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>
আপনি ডক্স-এ রোলব্যাক সম্পর্কে আরও জানতে পারবেন।
৬. অভিনন্দন!
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!
আমরা রোলআউট, রোলব্যাক এবং ট্র্যাফিক মাইগ্রেশন সম্পর্কিত ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা যা আলোচনা করেছি
- একটি ক্লাউড রান ফাংশনের জন্য দুই বা ততোধিক রিভিশনের মধ্যে ট্র্যাফিক কীভাবে ভাগ করবেন
- কীভাবে একটি নতুন সংস্করণ ধীরে ধীরে চালু করা যায়
- পূর্ববর্তী সংস্করণে কীভাবে ফিরে যাবেন
৭. পরিষ্কার করুন
অনিচ্ছাকৃত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান ফাংশনটি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড ফাংশন ব্যবহারের বরাদ্দের চেয়ে বেশিবার অনিচ্ছাকৃতভাবে চালু হয়ে যায়), আপনি হয় ক্লাউড রান ফাংশনটি অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।
Cloud Run-এ ডেপ্লয় করা কোনো ফাংশন ডিলিট করতে, https://console.cloud.google.com/functions/ -এ অবস্থিত Cloud Console-এর Cloud Run অপশনে যান এবং এই কোডল্যাবে আপনার তৈরি করা ফাংশনগুলো ডিলিট করে দিন।
দ্বিতীয় প্রজন্মের ফাংশন হিসেবে ডেপ্লয় করা ক্লাউড রান ফাংশনগুলো ডিলিট করতে, https://console.cloud.google.com/functions/ -এ অবস্থিত ক্লাউড কনসোলের ক্লাউড ফাংশনস-এ যান এবং এই কোডল্যাবে আপনার তৈরি করা ফাংশনগুলো ডিলিট করে দিন।
আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।