Hello Cloud Run with Python

১. ভূমিকা

96d07289bb51daa7.png

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

ক্লাউড শেল শুরু করুন

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

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

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। 853e55310c205094.png .

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.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].

৩. এপিআইগুলো সক্রিয় করুন

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

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

এর ফলে এই ধরনের একটি সফলতার বার্তা আউটপুট হয়:

Operation "operations/..." finished successfully.

এখন, আপনি কাজ শুরু করতে এবং আপনার আবেদনপত্রটি লিখতে প্রস্তুত...

৪. আবেদনপত্রটি লিখুন।

এই ধাপে, আপনি HTTP অনুরোধে সাড়া দেওয়ার জন্য একটি সহজ ফ্লাস্ক-ভিত্তিক পাইথন অ্যাপ্লিকেশন তৈরি করবেন।

কার্যকরী ডিরেক্টরি

ক্লাউড শেল ব্যবহার করে helloworld-python নামে একটি ওয়ার্কিং ডিরেক্টরি তৈরি করুন এবং সেটিতে প্রবেশ করুন:

mkdir ~/helloworld-python
cd ~/helloworld-python

main.py

main.py নামে একটি ফাইল তৈরি করুন:

touch main.py

আপনার পছন্দের কমান্ড লাইন এডিটর (ন্যানো, ভিম বা ইম্যাক্স) দিয়ে অথবা ক্লাউড শেল এডিটর বোতামে ক্লিক করে ফাইলটি সম্পাদনা করুন:

10af7b1a6240e9f4.gif

ক্লাউড শেল এডিটর দিয়ে সরাসরি ফাইলটি সম্পাদনা করতে, এই কমান্ডটি ব্যবহার করুন:

cloudshell edit main.py

main.py

from flask import Flask, request

app = Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    who = request.args.get("who", default="World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Development only: run "python main.py" and open http://localhost:8080
    # When deploying to Cloud Run, a production-grade WSGI HTTP server,
    # such as Gunicorn, will serve the app.
    app.run(host="localhost", port=8080, debug=True)

এই কোডটি একটি সাধারণ ওয়েব সার্ভিস তৈরি করে, যা HTTP GET অনুরোধের জবাবে একটি ব্যবহার-বান্ধব বার্তা পাঠায়।

requirements.txt

নির্ভরতাগুলো নির্ধারণ করতে requirements.txt নামের একটি ফাইল যোগ করুন:

touch requirements.txt

ক্লাউড শেল এডিটর দিয়ে সরাসরি ফাইলটি সম্পাদনা করতে, এই কমান্ডটি ব্যবহার করুন:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/flask
Flask==3.0.2

# https://pypi.org/project/gunicorn
gunicorn==21.2.0

প্রোফাইল

অবশেষে, অ্যাপ্লিকেশনটি কীভাবে পরিবেশন করা হবে তা নির্দিষ্ট করতে Procfile নামের একটি ফাইল যোগ করুন:

touch Procfile

ক্লাউড শেল এডিটর দিয়ে সরাসরি ফাইলটি সম্পাদনা করতে, এই কমান্ডটি ব্যবহার করুন:

cloudshell edit Procfile

Procfile

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

নিশ্চিত করুন যে সমস্ত ফাইল ওয়ার্কিং ডিরেক্টরির অধীনে উপস্থিত আছে:

ls

এতে নিম্নলিখিত ফাইলগুলির তালিকা থাকা উচিত:

main.py  Procfile  requirements.txt

আপনার অ্যাপ্লিকেশনটি ডেপ্লয় করার জন্য প্রস্তুত, কিন্তু চলুন প্রথমে এটি পরীক্ষা করে দেখি...

৫. অ্যাপ্লিকেশনটি পরীক্ষা করুন।

অ্যাপ্লিকেশনটি পরীক্ষা করার জন্য, একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:

virtualenv venv

ভার্চুয়াল পরিবেশ সক্রিয় করুন:

source venv/bin/activate

নির্ভরতাগুলি ইনস্টল করুন:

pip install -r requirements.txt

আপনি নিম্নলিখিতের মতো একটি নিশ্চিতকরণ বার্তা পাবেন:

...
Successfully installed Flask ... gunicorn ...

অ্যাপ্লিকেশনটি শুরু করুন:

python main.py

লগগুলো থেকে দেখা যাচ্ছে যে আপনি ডেভেলপমেন্ট মোডে আছেন:

 * Serving Flask app 'main'
 * Debug mode: on
   WARNING: This is a development server.
   Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Running on http://localhost:8080
   Press CTRL+C to quit
...

ক্লাউড শেল উইন্ডোতে, Web Preview আইকনে ক্লিক করুন এবং Preview on port 8080 নির্বাচন করুন:

6c9ff9e5c692c58e.gif

এতে একটি ব্রাউজার উইন্ডো খুলবে যেখানে Hello World! বার্তাটি দেখা যাবে।

এছাড়াও আপনি + আইকনে ক্লিক করে এবং স্থানীয়ভাবে চলমান অ্যাপ্লিকেশনে একটি ওয়েব অনুরোধ পাঠিয়ে আরেকটি ক্লাউড শেল সেশন (একটি নতুন টার্মিনাল ট্যাব) খুলতে পারেন:

curl localhost:8080

আপনার নিম্নলিখিত উত্তরটি পাওয়া উচিত:

Hello World!

আপনার কাজ শেষ হলে, মূল ক্লাউড শেল সেশনে ফিরে যান এবং CTRL+C চেপে python main.py কমান্ডটি বন্ধ করুন।

ভার্চুয়াল পরিবেশ থেকে প্রস্থান করুন:

deactivate

অবশেষে, ভার্চুয়াল এনভায়রনমেন্ট ডিরেক্টরিটি মুছে ফেলুন:

rm -r venv/

আপনার অ্যাপ্লিকেশনটি প্রত্যাশা অনুযায়ী কাজ করছে: চলুন এটি ডেপ্লয় করা যাক...

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

ক্লাউড রান আঞ্চলিক, যার অর্থ হলো আপনার ক্লাউড রান পরিষেবাগুলো যে পরিকাঠামোতে চলে তা একটি নির্দিষ্ট অঞ্চলে অবস্থিত এবং সেই অঞ্চলের সমস্ত জোনে রিডান্ড্যান্টভাবে উপলব্ধ থাকার জন্য গুগল দ্বারা পরিচালিত হয়। আপনার ডেপ্লয়মেন্টের জন্য যে অঞ্চলটি ব্যবহার করবেন তা নির্ধারণ করুন, উদাহরণস্বরূপ:

REGION="europe-west9"

নিশ্চিত করুন যে আপনি এখনও ওয়ার্কিং ডিরেক্টরিতে আছেন:

ls

এতে নিম্নলিখিত ফাইলগুলির তালিকা থাকা উচিত:

main.py  Procfile  requirements.txt

অ্যাপ্লিকেশনটি ক্লাউড রান-এ স্থাপন করুন:

gcloud run deploy helloworld-python \
  --source . \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated
  • এই কমান্ডটি ব্যবহার করে আপনি একটি ডিফল্ট অঞ্চল নির্ধারণ করতে পারেন: gcloud config set run/region $REGION
  • আপনি এই কমান্ডটি ব্যবহার করে ক্লাউড রানকে ডিফল্টরূপে ম্যানেজডও করতে পারেন: gcloud config set run/platform managed
  • --allow-unauthenticated অপশনটি সার্ভিসটিকে সর্বজনীনভাবে উপলব্ধ করে তোলে। প্রমাণীকরণবিহীন অনুরোধ এড়াতে, এর পরিবর্তে --no-allow-unauthenticated ব্যবহার করুন।

প্রথমবার, আপনাকে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করার জন্য অনুরোধ জানানো হবে। যাচাই করতে এন্টার চাপুন:

Deploying from source requires an Artifact Registry Docker repository to store
built containers. A repository named [cloud-run-source-deploy] in region [REGION]
will be created.

Do you want to continue (Y/n)?

এর মাধ্যমে আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরিতে আপনার সোর্স কোড আপলোড এবং আপনার কন্টেইনার ইমেজ বিল্ড করার প্রক্রিয়া শুরু হয়:

Building using Buildpacks and deploying container ...
* Building and deploying new service... Building Container.           
  OK Creating Container Repository...
  OK Uploading sources...
  * Building Container... Logs are available at ...

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

...
OK Building and deploying new service... Done.
  OK Creating Container Repository...
  OK Uploading sources...
  OK Building Container... Logs are available at ...
  OK Creating Revision... Creating Service.
  OK Routing traffic...
  OK Setting IAM Policy...
Done.
Service [SERVICE]... has been deployed and is serving 100 percent of traffic.
Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app

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

SERVICE_URL=$( \
  gcloud run services describe helloworld-python \
  --platform managed \
  --region $REGION \
  --format "value(status.url)" \
)
echo $SERVICE_URL

এটি দেখতে নিচের মতো হওয়া উচিত:

https://helloworld-python-PROJECTHASH-REGIONID.a.run.app

এখন আপনি একটি ওয়েব ব্রাউজারে সার্ভিস ইউআরএলটি খুলে আপনার অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন:

c836b93e5601e2cf.gif

আপনি ক্লাউড শেল থেকেও অ্যাপ্লিকেশনটি কল করতে পারেন:

curl $SERVICE_URL?who=me

এটি আপনাকে প্রত্যাশিত অভিবাদনটি দেবে:

Hello me!

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

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

পরিষেবাটি ব্যবহার না করা হলে ক্লাউড রান কোনো চার্জ না করলেও, আর্টিফ্যাক্ট রেজিস্ট্রি-তে কন্টেইনার ইমেজ সংরক্ষণের জন্য আপনাকে চার্জ করা হতে পারে। চার্জ এড়ানোর জন্য আপনি আপনার রিপোজিটরি অথবা ক্লাউড প্রজেক্ট ডিলিট করতে পারেন। আপনার ক্লাউড প্রজেক্ট ডিলিট করলে সেই প্রজেক্টের মধ্যে ব্যবহৃত সমস্ত রিসোর্সের জন্য বিলিং বন্ধ হয়ে যায়।

আপনার কন্টেইনার ইমেজ রিপোজিটরি মুছে ফেলতে:

gcloud artifacts repositories delete cloud-run-source-deploy \
  --location $REGION

আপনার ক্লাউড রান পরিষেবা মুছে ফেলতে:

gcloud run services delete helloworld-python \
  --platform managed \
  --region $REGION

আপনার গুগল ক্লাউড প্রজেক্টটি ডিলিট করতে,

  1. আপনার বর্তমান প্রজেক্ট আইডি পুনরুদ্ধার করুন:
PROJECT_ID=$(gcloud config get-value core/project)
  1. নিশ্চিত করুন যে এটিই সেই প্রজেক্ট যা আপনি মুছে ফেলতে চান:
echo $PROJECT_ID
  1. প্রকল্পটি মুছে ফেলুন:
gcloud projects delete $PROJECT_ID

৮. অভিনন্দন!

96d07289bb51daa7.png

আপনি একটি সাধারণ ওয়েব অ্যাপ্লিকেশন তৈরি করে ক্লাউড রান-এ স্থাপন করেছেন!

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।