১. ভূমিকা
সংক্ষিপ্ত বিবরণ
ক্লাউড রান রিভিশন আপনাকে নির্দিষ্ট করতে দেয় যে কোন রিভিশনগুলোতে ট্র্যাফিক যাবে এবং প্রতিটি রিভিশনে ট্র্যাফিকের কত শতাংশ পাঠানো হবে। রিভিশন আপনাকে পূর্ববর্তী রিভিশনে ফিরে যেতে, পর্যায়ক্রমে একটি রিভিশন চালু করতে এবং একাধিক রিভিশনের মধ্যে ট্র্যাফিক ভাগ করে দিতে সাহায্য করে।
এই কোডল্যাবটি আপনাকে দেখাবে কীভাবে আপনার ক্লাউড রান সার্ভিসের ট্র্যাফিক পরিচালনা করতে রিভিশন ব্যবহার করতে হয়। আপনি ক্লাউড রান ডকুমেন্টেশন থেকে রিভিশন সম্পর্কে আরও জানতে পারবেন।
আপনি যা শিখবেন
- একটি ক্লাউড রান পরিষেবার জন্য দুই বা ততোধিক রিভিশনের মধ্যে ট্র্যাফিক কীভাবে ভাগ করবেন
- কীভাবে একটি নতুন সংস্করণ ধীরে ধীরে চালু করা যায়
- পূর্ববর্তী সংস্করণে কীভাবে ফিরে যাবেন
২. সেটআপ এবং প্রয়োজনীয়তা
পূর্বশর্ত
- আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
- আপনি পূর্বে একটি ক্লাউড রান পরিষেবা স্থাপন করেছেন। উদাহরণস্বরূপ, শুরু করার জন্য আপনি 'একটি ক্লাউড রান পরিষেবা স্থাপন করুন' অনুসরণ করতে পারেন।
পরিবেশ ভেরিয়েবল সেট করুন
আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, যা এই কোডল্যাব জুড়ে ব্যবহৃত হবে।
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
সার্ভিসের জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
৩. ট্র্যাফিক বিভাজন
এই নমুনাটি আপনাকে দেখাবে কীভাবে এমন একটি ক্লাউড রান সার্ভিস তৈরি করতে হয়, যা একটি কালার এনভায়রনমেন্ট ভেরিয়েবল পড়ে এবং সেই ব্যাকগ্রাউন্ড কালার ব্যবহার করে রিভিশনের নামটি ফেরত পাঠায়।
যদিও এই কোডল্যাবটিতে পাইথন ব্যবহার করা হয়েছে, আপনি যেকোনো রানটাইম ব্যবহার করতে পারেন।
পরিবেশ ভেরিয়েবল সেট করুন
আপনি এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন, যা এই কোডল্যাব জুড়ে ব্যবহৃত হবে।
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
পরিষেবাটি তৈরি করুন
প্রথমে, সোর্স কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে প্রবেশ করুন।
mkdir traffic-revisions-codelab && cd $_
এরপর, নিম্নলিখিত বিষয়বস্তু সহ একটি main.py ফাইল তৈরি করুন:
import os
from flask import Flask, render_template_string
app = Flask(__name__)
TEMPLATE = """
<!doctype html>
<html lang="en">
<head>
<title>Cloud Run Traffic Revisions</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 50vh;
background-color: {{ bg_color }}; /* Set by environment variable */
font-family: sans-serif;
}
.content {
background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */
padding: 2em;
border-radius: 8px;
text-align: center;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<div class="content">
<p>background color: <strong>{{ color_name }}</strong></p>
</div>
</body>
</html>
"""
@app.route('/')
def main():
"""Serves the main page with a background color from the ENV."""
# Get the color from the 'BG_COLOR' environment variable.
# Default to 'white' if the variable is not set.
color = os.environ.get('BG_COLOR', 'white').lower()
return render_template_string(TEMPLATE, bg_color=color, color_name=color)
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8080))
app.run(debug=True, host='0.0.0.0', port=port)
এরপর, নিম্নলিখিত বিষয়বস্তু সহ একটি requirements.txt ফাইল তৈরি করুন:
Flask>=2.0.0 gunicorn>=20.0.0
সবশেষে একটি Dockerfile তৈরি করুন।
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
ENV PYTHONPATH /app
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
ক্লাউড বিল্ড ব্যবহার করে বিল্ডপ্যাকের মাধ্যমে আর্টিফ্যাক্ট রেজিস্ট্রি-তে ইমেজটি তৈরি করুন:
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
এবং প্রথম সংস্করণটি ক্লাউড রান-এ গাঢ় সমুদ্র-সবুজ রঙে স্থাপন করুন:
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--set-env-vars BG_COLOR=darkseagreen
সার্ভিসটি পরীক্ষা করার জন্য, আপনি সরাসরি আপনার ওয়েব ব্রাউজারে এন্ডপয়েন্টটি খুলতে পারেন এবং ব্যাকগ্রাউন্ডের রঙটি গাঢ় সমুদ্র সবুজ দেখতে পাবেন।
এখন হালকা বাদামী পটভূমির রঙ দিয়ে দ্বিতীয় সংস্করণটি স্থাপন করুন।
# update the env var
BG_COLOR=tan
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--set-env-vars BG_COLOR=tan
এখন যখন আপনি ওয়েবসাইটটি রিফ্রেশ করবেন, তখন হালকা বাদামী পটভূমির রঙটি দেখতে পাবেন।
ট্র্যাফিক ৫০-৫০ ভাগ করুন
ডিপ সি গ্রিন এবং ট্যান রিভিশনগুলোর মধ্যে ট্র্যাফিক ভাগ করার জন্য, আপনাকে অন্তর্নিহিত ক্লাউড রান সার্ভিসগুলোর রিভিশন আইডি খুঁজে বের করতে হবে। এই কমান্ডটি চালিয়ে আপনি রিভিশন আইডিগুলো দেখতে পারেন:
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
আপনি নীচের ফলাফলগুলির অনুরূপ ফলাফল দেখতে পাবেন।
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
আপনার রিভিশনগুলো সহ নিম্নলিখিত কমান্ডটি চালিয়ে আপনি দুটি রিভিশনের মধ্যে ট্র্যাফিক ৫০/৫০ ভাগ করতে পারেন:
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
ট্র্যাফিক বিভাজন পরীক্ষা করুন
আপনি আপনার ব্রাউজারে পৃষ্ঠাটি রিফ্রেশ করে পরিষেবাটি পরীক্ষা করতে পারেন।
অর্ধেক সময় আপনি গাঢ় সমুদ্র সবুজ রঙের রিভিশনটি দেখতে পাবেন এবং বাকি অর্ধেক সময় হালকা বাদামী রঙের রিভিশনটি দেখতে পাবেন। এছাড়াও আপনি আউটপুটে রিভিশনের নামটি তালিকাভুক্ত দেখতে পাবেন, যেমন—
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
৪. পর্যায়ক্রমিক বাস্তবায়ন
এই অংশে, আপনি শিখবেন কীভাবে একটি নতুন ক্লাউড সার্ভিস রিভিশনে পর্যায়ক্রমে পরিবর্তনগুলি প্রয়োগ করতে হয়। আপনি ডকুমেন্টেশনে পর্যায়ক্রমিক প্রয়োগ সম্পর্কে আরও জানতে পারবেন।
আপনি আগের অংশের কোডটিই ব্যবহার করবেন, কিন্তু এটিকে একটি নতুন ক্লাউড রান সার্ভিস হিসেবে ডেপ্লয় করবেন।
প্রথমে, ব্যাকগ্রাউন্ডের রঙ beige -এ সেট করুন এবং gradual-rollouts-colors নামের ফাংশনটি ডিপ্লয় করুন।
সরাসরি ক্লাউড রান-এ একটি ক্লাউড রান ফাংশন ডেপ্লয় করতে, নিম্নলিখিত কমান্ডটি চালান:
# update the env var
BG_COLOR=beige
gcloud beta run deploy gradual-rollouts-colors \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
এখন ধরা যাক, আমরা ল্যাভেন্ডার ব্যাকগ্রাউন্ড রঙের একটি নতুন সংস্করণ পর্যায়ক্রমে চালু করতে চাই।
প্রথমে, বর্তমান রিভিশন ‘বেইজ’-কে ১০০% ট্র্যাফিক পাওয়ার জন্য সেট করা যাক। এটি নিশ্চিত করবে যে আপনার ভবিষ্যতের রিভিশনগুলো কোনো ট্র্যাফিক পাবে না। ডিফল্টরূপে, ক্লাউড রান latest ফ্ল্যাগযুক্ত রিভিশনটিতে ১০০% ট্র্যাফিক সেট করে। এই বর্তমান রিভিশন ‘বেইজ’-কে সমস্ত ট্র্যাফিক পাওয়ার জন্য ম্যানুয়ালি নির্দিষ্ট করে দিলে, latest ফ্ল্যাগযুক্ত রিভিশনটি আর ১০০% ট্র্যাফিক পাবে না। ডকুমেন্টেশন দেখুন।
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-colors \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-colors \ --to-revisions=$BEIGE_REVISION=100 \ --region $REGION
আপনি Traffic: 100% radual-rollouts-colors-00001-yox এর মতো আউটপুট দেখতে পাবেন।
এখন আপনি এমন একটি নতুন রিভিশন ডেপ্লয় করতে পারেন যেখানে কোনো ট্র্যাফিক আসবে না। কোডে কোনো পরিবর্তন না করে, আপনি এই রিভিশনটির জন্য BG_COLOR এনভায়রনমেন্ট ভেরিয়েবলটি আপডেট করতে পারেন।
সরাসরি ক্লাউড রান-এ একটি ক্লাউড রান ফাংশন ডেপ্লয় করতে, নিম্নলিখিত কমান্ডটি চালান:
# update color
BG_COLOR=lavender
# deploy the function that will not receive any traffic
gcloud beta run deploy gradual-rollouts-colors \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
এবং এখন যখন আপনি আপনার ব্রাউজারে ওয়েবসাইটটি ভিজিট করবেন, তখন আপনি বেইজ রঙটি দেখতে পাবেন, যদিও ল্যাভেন্ডার রঙটিই ছিল সর্বশেষ প্রকাশিত সংস্করণ।
০% ট্র্যাফিক পরিবেশনকারী একটি সংস্করণ পরীক্ষা করুন
ধরা যাক, আপনি যাচাই করে দেখেছেন যে আপনার রিভিশনটি সফলভাবে ডেপ্লয় হয়েছে এবং এটি ০% ট্র্যাফিক সামলাচ্ছে। হেলথ চেক পাস করা সত্ত্বেও, আপনি এখনও যাচাই করতে চান যে এই রিভিশনটি ল্যাভেন্ডার ব্যাকগ্রাউন্ড কালার ব্যবহার করছে কিনা।
ল্যাভেন্ডার সংস্করণটি পরীক্ষা করার জন্য, আপনি সেই সংস্করণে একটি ট্যাগ প্রয়োগ করতে পারেন। ট্যাগিং আপনাকে ট্র্যাফিক না পাঠিয়েই একটি নির্দিষ্ট URL-এ সরাসরি নতুন সংস্করণটি পরীক্ষা করার সুযোগ দেয়।
প্রথমে, সেই সর্বশেষ রিভিশনটির (যেটি ল্যাভেন্ডার রঙের) ছবির ইউআরএলটি সংগ্রহ করুন।
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
এবং এখন সেই ছবিটিকে তার সংশ্লিষ্ট রঙ দিয়ে ট্যাগ করুন।
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
আপনি নিম্নলিখিতের অনুরূপ আউটপুট দেখতে পাবেন:
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
এখন আপনি যখন সেই নির্দিষ্ট রিভিশন ইউআরএল-টি ভিজিট করবেন, তখন ল্যাভেন্ডার রঙটি দেখতে পাবেন।
ধীরে ধীরে বাড়তে থাকা ট্র্যাফিক
এখন, আপনি ল্যাভেন্ডার রিভিশনে ট্র্যাফিক পাঠানো শুরু করতে পারেন। নিচের উদাহরণটিতে দেখানো হয়েছে কীভাবে ল্যাভেন্ডারে ১% ট্র্যাফিক পাঠাতে হয়।
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
ল্যাভেন্ডারে ৫০% ট্র্যাফিক পাঠাতে, আপনি একই কমান্ড ব্যবহার করতে পারেন, তবে সেক্ষেত্রে ৫০% উল্লেখ করতে হবে।
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
প্রতিটি সংস্করণ কী পরিমাণ ট্র্যাফিক পাচ্ছে, তার একটি তালিকা আপনি দেখতে পাবেন।
Traffic:
50% gradual-rollouts-colors-00001-hos
50% gradual-rollouts-colors-00004-mum
lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
যখন আপনি ল্যাভেন্ডার রঙটি পুরোপুরি ব্যবহার করতে প্রস্তুত হবেন, তখন বেইজ রঙটি প্রতিস্থাপন করার জন্য ল্যাভেন্ডারকে ১০০%-এ সেট করতে পারেন।
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
এবং এখন আপনি যখন ওয়েবসাইটটি ভিজিট করবেন, তখন শুধু ল্যাভেন্ডার দেখতে পাবেন।
৫. প্রত্যাহার
ধরুন, প্রাথমিক ইউএক্স ফিডব্যাক থেকে জানা গেছে যে গ্রাহকরা ল্যাভেন্ডারের চেয়ে বেইজ রঙ বেশি পছন্দ করেন এবং আপনাকে আগের বেইজ রঙে ফিরে যেতে হবে।
এই কমান্ডটি চালিয়ে আপনি পূর্ববর্তী সংস্করণ (বেইজ)-এ ফিরে যেতে পারেন:
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100
এবং এখন যখন আপনি ওয়েবসাইটটি ভিজিট করবেন, তখন ব্যাকগ্রাউন্ড কালার হিসেবে বেইজ দেখতে পাবেন।
আপনি ডক্স-এ রোলব্যাক সম্পর্কে আরও জানতে পারবেন।
৬. অভিনন্দন!
কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন!
আমরা রোলআউট, রোলব্যাক এবং ট্র্যাফিক মাইগ্রেশন সম্পর্কিত ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা যা আলোচনা করেছি
- একটি ক্লাউড রান পরিষেবার জন্য দুই বা ততোধিক রিভিশনের মধ্যে ট্র্যাফিক কীভাবে ভাগ করবেন
- কীভাবে একটি নতুন সংস্করণ ধীরে ধীরে চালু করা যায়
- পূর্ববর্তী সংস্করণে কীভাবে ফিরে যাবেন
৭. পরিষ্কার করুন
অনিচ্ছাকৃত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান ফাংশনটি ফ্রি টিয়ারে আপনার মাসিক ক্লাউড রান ইনভোকেশন বরাদ্দের চেয়ে বেশিবার অনিচ্ছাকৃতভাবে চালু হয়), আপনি হয় ক্লাউড রান পরিষেবাটি অথবা ধাপ ২-এ তৈরি করা প্রজেক্টটি ডিলিট করে দিতে পারেন।
একটি ক্লাউড রান পরিষেবা মুছে ফেলার জন্য, https://console.cloud.google.com/run/ -এ অবস্থিত ক্লাউড কনসোলের ক্লাউড রান-এ যান এবং এই কোডল্যাবে আপনার তৈরি করা ফাংশনগুলি মুছে ফেলুন।
আপনি যদি পুরো প্রজেক্টটি মুছে ফেলতে চান, তাহলে আপনি https://console.cloud.google.com/cloud-resource-manager -এ গিয়ে, ধাপ ২-এ তৈরি করা প্রজেক্টটি নির্বাচন করে 'ডিলিট' (Delete) বিকল্পটি বেছে নিতে পারেন। প্রজেক্টটি মুছে ফেললে, আপনাকে আপনার ক্লাউড এসডিকে (Cloud SDK)-তে প্রজেক্ট পরিবর্তন করতে হবে। আপনি gcloud projects list চালিয়ে সমস্ত উপলব্ধ প্রজেক্টের তালিকা দেখতে পারেন।