Hello Cloud Run with Python (FastAPI)

1. ভূমিকা

96d07289bb51daa7.png

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

এই টিউটোরিয়ালটির লক্ষ্য হল একটি সাধারণ FastAPI ওয়েব অ্যাপ্লিকেশন তৈরি করা এবং এটিকে ক্লাউড রানে স্থাপন করা।

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

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

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং 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. API গুলি সক্রিয় করুন৷

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

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

এটি এটির মতো একটি সফল বার্তা আউটপুট করে:

Operation "operations/..." finished successfully.

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

4. আবেদনটি লিখুন

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

ওয়ার্কিং ডিরেক্টরি

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

ফাস্টএপিআই অ্যাপ্লিকেশনটি স্থাপনের জন্য প্রস্তুত, তবে প্রথমে, এটি পরীক্ষা করার সময়...

5. আবেদন পরীক্ষা করুন

অ্যাপ্লিকেশনটি পরীক্ষা করতে, ইউভি (পাইথনের অত্যন্ত দ্রুত প্যাকেজ এবং প্রকল্প পরিচালক) ব্যবহার করুন যা ক্লাউড শেল-এ আগে থেকে ইনস্টল করা হয়।

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

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 ডেভ সার্ভার বন্ধ করুন।

অ্যাপ্লিকেশনটি প্রত্যাশিত হিসাবে কাজ করে: এটি স্থাপন করার সময় ...

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

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

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

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

helloworld-fastapi.gif

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

curl $SERVICE_URL?name=me

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

{"message": "Hello me!"}

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

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

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

আপনার ধারক চিত্র সংগ্রহস্থল মুছে ফেলতে:

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

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

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

আপনার Google ক্লাউড প্রকল্প মুছে ফেলতে,

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

8. অভিনন্দন!

96d07289bb51daa7.png

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

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

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

আরও জানুন