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

1. ভূমিকা

ওভারভিউ

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

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

আপনি কি শিখবেন

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

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

পূর্বশর্ত

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

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

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

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

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

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

  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

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

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

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

# 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

ট্রাফিক 50-50 ভাগ করুন

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

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

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

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

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

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>

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

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

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

প্রথমে, পটভূমির রঙটি 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

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

# 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

এখন ধরা যাক আমরা ব্যাকগ্রাউন্ড কালার ল্যাভেন্ডারের সাথে ধীরে ধীরে একটি নতুন রিভিশন রোল আউট করতে চাই।

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

# 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

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

# 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

এখন ধীরে ধীরে-রোলআউট-জিসিএফ ফাংশন ব্যবহার করতে 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% ট্রাফিক পরিবেশনকারী একটি রিভিশন পরীক্ষা করুন

ধরুন আপনি যাচাই করেছেন যে আপনার সংশোধন সফলভাবে স্থাপন করা হয়েছে এবং এটি 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

ল্যাভেন্ডারে ট্রাফিকের 50% পাঠাতে, আপনি একই কমান্ড ব্যবহার করতে পারেন, তবে পরিবর্তে 50% নির্দিষ্ট করুন।

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

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

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

এবং এখন আপনি যখন গ্র্যাজুয়াল-রোলআউটস-জিসিএফ ফাংশন সার্ভিস ইউআরএলে যান বা কার্ল করেন,

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>

5. রোলব্যাক

ধরুন প্রাথমিক 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>

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

6. অভিনন্দন!

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

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

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

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

7. পরিষ্কার করুন

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

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

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

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