Hello Cloud Run with Python (FastAPI)

১. ভূমিকা

96d07289bb51daa7.png

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

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

আপনি যা শিখবেন

  • কিভাবে একটি FastAPI "হ্যালো ওয়ার্ল্ড" অ্যাপ্লিকেশন তৈরি করবেন।
  • dev মোডে FastAPI সার্ভারটি চালিয়ে অ্যাপ্লিকেশনটি পরীক্ষা করা হচ্ছে।
  • ক্লাউড বিল্ডপ্যাক এবং কীভাবে requirements.txtfastapiuvicorn এর উপস্থিতি কোনো Dockerfile-এর প্রয়োজনীয়তা দূর করে।
  • Cloud Run-এ FastAPI অ্যাপ্লিকেশনটি কীভাবে ডেপ্লয় করবেন।

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

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

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 অনুরোধের প্রতিক্রিয়া জানাতে সক্ষম একটি "হ্যালো ওয়ার্ল্ড" FastAPI পাইথন অ্যাপ্লিকেশন তৈরি করবেন।

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

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

mkdir ~/helloworld-fastapi && cd ~/helloworld-fastapi

main.py

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

touch main.py

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

10af7b1a6240e9f4.gif

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

cloudshell edit main.py

main.py

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def hello(name: str = "World"):
    """Return a friendly HTTP greeting."""
    return {
        "message": f"Hello {name}!"
    }

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

requirements.txt

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

touch requirements.txt

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

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/fastapi
fastapi[standard]==0.116.1

# https://pypi.org/project/uvicorn
uvicorn==0.35.0

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

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

অ্যাপ্লিকেশনটি পরীক্ষা করার জন্য, uv ​​(পাইথনের অত্যন্ত দ্রুত প্যাকেজ ও প্রজেক্ট ম্যানেজার) ব্যবহার করুন, যা ক্লাউড শেলে আগে থেকেই ইনস্টল করা থাকে।

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

uv venv

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

uv pip install -r requirements.txt

অ্যাপ্লিকেশনটি dev মোডে চালু করুন:

uv run fastapi dev main.py --port=8080

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

FastAPI   Starting development server 🚀

          Searching for package file structure from directories with __init__.py files
          Importing from /home/user/code/helloworld-fastapi

  module  🐍 main.py

    code  Importing the FastAPI app object from the module with the following code:

          from main import app

     app  Using import string: main:app

  server   Server started at http://127.0.0.1:8080
  server   Documentation at http://127.0.0.1:8080/docs

     tip   Running in development mode, for production use: fastapi run

           Logs:

    INFO   Will watch for changes in these directories: ['/home/user/code/helloworld-fastapi']
    INFO   Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
    INFO   Started reloader process [19627] using WatchFiles
    INFO   Started server process [19629]
    INFO   Waiting for application startup.
    INFO   Application startup complete.

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

6c9ff9e5c692c58e.gif

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

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

curl localhost:8080

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

{"message": "Hello World!"}

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

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

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

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

REGION=europe-west1

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

ls

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

main.py  requirements.txt

ডিপ্লয় করার আগে, .venv/ সহ একটি .gcloudignore ফাইল তৈরি করুন। এটি লোকাল টেস্টিংয়ের সময় uv থেকে তৈরি করা ভার্চুয়াল এনভায়রনমেন্টটিকে ক্লাউড রান ডিপ্লয়মেন্টে অন্তর্ভুক্ত হওয়া থেকে বিরত রাখে।

নিম্নলিখিত কমান্ড ব্যবহার করে .gcloudignore ফাইলটি তৈরি করুন:

echo ".venv/" > .gcloudignore

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

gcloud run deploy helloworld-fastapi \
  --source . \
  --region $REGION \
  --allow-unauthenticated
  • --allow-unauthenticated অপশনটি সার্ভিসটিকে সর্বজনীনভাবে উপলব্ধ করে তোলে। প্রমাণীকরণবিহীন অনুরোধ এড়াতে, এর পরিবর্তে --no-allow-unauthenticated ব্যবহার করুন।

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

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-fastapi \
  --region $REGION \
  --format "value(status.address.url)" \
)
echo $SERVICE_URL

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

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

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

helloworld-fastapi.gif

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

curl $SERVICE_URL?name=me

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

{"message": "Hello me!"}

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

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

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

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

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

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

gcloud run services delete helloworld-fastapi \
  --region $REGION

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

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

৮. অভিনন্দন!

96d07289bb51daa7.png

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

আমরা যা আলোচনা করেছি

  • কিভাবে একটি FastAPI "হ্যালো ওয়ার্ল্ড" অ্যাপ্লিকেশন তৈরি করবেন।
  • dev মোডে FastAPI সার্ভারটি চালিয়ে অ্যাপ্লিকেশনটি পরীক্ষা করা হচ্ছে।
  • ক্লাউড বিল্ডপ্যাক এবং কীভাবে requirements.txtfastapiuvicorn এর উপস্থিতি কোনো Dockerfile-এর প্রয়োজনীয়তা দূর করে।
  • ক্লাউড রান-এ ফাস্টএপিআই অ্যাপ্লিকেশনটি স্থাপন করা হচ্ছে।

আরও জানুন