C# দিয়ে হ্যালো ক্লাউড রান

১. ভূমিকা

89eb4723767d4525.png

ক্লাউড রান একটি পরিচালিত প্ল্যাটফর্ম যা আপনাকে স্টেটলেস কন্টেইনার চালাতে সক্ষম করে, যেগুলোকে HTTP অনুরোধের মাধ্যমে চালু করা যায়। ক্লাউড রান সার্ভারবিহীন: এটি সমস্ত অবকাঠামো ব্যবস্থাপনার দায়িত্ব থেকে আপনাকে মুক্ত রাখে, ফলে আপনি সবচেয়ে গুরুত্বপূর্ণ বিষয়—অর্থাৎ চমৎকার অ্যাপ্লিকেশন তৈরিতে—মনোযোগ দিতে পারেন।

এটি Knative দিয়ে তৈরি, যা আপনাকে আপনার কন্টেইনারগুলো হয় Cloud Run-এর মাধ্যমে সম্পূর্ণ পরিচালিতভাবে, অথবা Cloud Run on GKE ব্যবহার করে আপনার Google Kubernetes Engine ক্লাস্টারে চালানোর সুযোগ দেয়।

এই কোডল্যাবের উদ্দেশ্য হলো একটি কন্টেইনার ইমেজ তৈরি করে তা ক্লাউড রান-এ ডেপ্লয় করা।

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

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

গুগল ক্লাউড শেল

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

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

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

  • ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল 'Activate Cloud Shell'-এ ক্লিক করুন:

cb81e7c8e34bc8d.png

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

bfde7b083abc9544.png

পরিবেশটি প্রস্তুত করতে মাত্র কয়েক সেকেন্ড সময় লাগা উচিত।

cbb597d2be277a14.png

ক্লাউড শেলে সংযুক্ত হওয়ার পরে আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত হয়েছেন:

gcloud auth list

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

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

প্রজেক্টটি আপনার PROJECT_ID তে আগে থেকেই সেট করা থাকা উচিত (যদি আপনি ওয়েব কনসোলে একটি প্রজেক্ট নির্বাচন করে থাকেন):

gcloud config list project

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

[core]
project = <PROJECT_ID>

যদি কোনো কারণে প্রজেক্টটি সেট করা না থাকে, তাহলে নিম্নলিখিত কমান্ডটি দিন:

gcloud config set project <PROJECT_ID>

আপনার PROJECT_ID খুঁজছেন? ক্লাউড কনসোলের উপরের ড্রপ-ডাউনটি দেখুন:

2c7a57249d954735.png

এছাড়াও আপনি "সেটিং এবং ইউটিলিটি" বিভাগটি ব্যবহার করে আপনার প্রকল্পের বিবরণ দেখে নিতে পারেন:

791f101797cfef39.png

ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা ভবিষ্যতে কমান্ড চালানোর সময় কাজে লাগতে পারে।

echo $GOOGLE_CLOUD_PROJECT

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

<PROJECT_ID>
  • অবশেষে, আপনি ডিফল্ট জোন সেট করতে পারেন:
gcloud config set compute/zone us-central1-f

আপনি বিভিন্ন জোন বেছে নিতে পারেন। আরও তথ্যের জন্য, অঞ্চল ও জোনসমূহ দেখুন।

ক্লাউড রান এপিআই সক্রিয় করুন

ক্লাউড শেল থেকে ক্লাউড রান এপিআই সক্রিয় করুন:

gcloud services enable run.googleapis.com

এর ফলে এইটির মতো একটি সফল বার্তা তৈরি হওয়া উচিত:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

৩. নমুনা অ্যাপ্লিকেশনটি লিখুন।

আমরা HTTP অনুরোধে সাড়া দেওয়ার জন্য একটি সহজ ASP.NET C# অ্যাপ্লিকেশন তৈরি করব।

আপনার অ্যাপ্লিকেশন তৈরি করতে, ক্লাউড শেলে dotnet কমান্ড লাইন টুলটি ব্যবহার করুন:

dotnet new web -o helloworld-csharp

helloworld-csharp ডিরেক্টরিতে পরিবর্তন করুন:

cd helloworld-csharp

এরপর, Program.cs নিচের মতো করে আপডেট করুন:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

এই কোডটি একটি সাধারণ ওয়েব সার্ভার তৈরি করে, যা PORT এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্ধারিত পোর্টে শোনে এবং উত্তরে Hello World পাঠায়।

আপনি ক্লাউড শেলে স্থানীয়ভাবে অ্যাপটি চালিয়ে পরীক্ষা করতে পারেন। আপনি দেখবেন এটি ৮০৮০ পোর্টে লিসেন করছে:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

৪. ক্লাউড রানে স্থাপন করুন

নিম্নলিখিত কমান্ড ব্যবহার করে আপনার অ্যাপ্লিকেশনটি ক্লাউড রান-এ স্থাপন করুন:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world হলো সার্ভিসের নাম।
  • allow-unauthenticated ফ্ল্যাগটি সার্ভিসটিকে কোনো প্রমাণীকরণের প্রয়োজন ছাড়াই একটি সর্বজনীনভাবে উপলব্ধ সার্ভিস হিসেবে স্থাপন করে।
  • us-central1 হলো সেই অঞ্চল যেখানে অ্যাপটি স্থাপন করা হবে।
  • source ফ্ল্যাগ বিল্ড করার জন্য সোর্সের অবস্থান নির্ধারণ করে। ক্লাউড রান সোর্স কোড থেকে স্বয়ংক্রিয়ভাবে একটি কন্টেইনার তৈরি করতে বিল্ডপ্যাক ব্যবহার করে।

ডেপ্লয়মেন্ট সম্পূর্ণ হওয়া পর্যন্ত কয়েক মিনিট অপেক্ষা করুন। সফল হলে, কমান্ড লাইনে সার্ভিস URL-টি প্রদর্শিত হবে:

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

এখন আপনি একটি ওয়েব ব্রাউজারে সার্ভিস URL-টি খুলে আপনার ডেপ্লয় করা কন্টেইনারটি দেখতে পারেন:

85e7fbbd264444c9.png

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

৫. পরিষ্কার করার সময়

চার্জ এড়ানোর জন্য আপনি আপনার GCP প্রজেক্টটি ডিলিট করে দিতে পারেন, যার ফলে সেই প্রজেক্টে ব্যবহৃত সমস্ত রিসোর্সের বিলিং বন্ধ হয়ে যাবে, অথবা শুধু ক্লাউড রান সার্ভিসটি ডিলিট করে দিতে পারেন:

gcloud run services delete helloworld

৬. এরপর কী?

পরবর্তী একটি ভালো পদক্ষেপ হবে GKE-তে ক্লাউড রান-এ ডিপ্লয় করা

কোড সোর্স থেকে ক্লাউড রানের জন্য উপযুক্ত একটি স্টেটলেস HTTP কন্টেইনার তৈরি করা এবং সেটিকে কন্টেইনার রেজিস্ট্রি-তে পুশ করার বিষয়ে আরও তথ্যের জন্য দেখুন: