Python (FastAPI) के साथ Hello Cloud Run

1. परिचय

96d07289bb51daa7.png

Cloud Run, मैनेज किया जाने वाला कंप्यूट प्लैटफ़ॉर्म है. इसकी मदद से, स्टेटलेस कंटेनर चलाए जा सकते हैं. इन्हें एचटीटीपी अनुरोधों का इस्तेमाल करके शुरू किया जा सकता है. यह Knative ओपन-सोर्स प्रोजेक्ट पर बना है. इससे आपके वर्कलोड को अलग-अलग प्लैटफ़ॉर्म पर पोर्ट किया जा सकता है. Cloud Run, सर्वरलेस है. यह इन्फ़्रास्ट्रक्चर मैनेजमेंट को पूरी तरह से ऐब्स्ट्रैक्ट करता है, ताकि आप सबसे ज़रूरी काम पर फ़ोकस कर सकें. जैसे, बेहतरीन ऐप्लिकेशन बनाना.

इस ट्यूटोरियल का मकसद, FastAPI का एक आसान वेब ऐप्लिकेशन बनाना और उसे Cloud Run पर डिप्लॉय करना है.

आपको क्या सीखने को मिलेगा

  • FastAPI का "Hello World" ऐप्लिकेशन बनाने का तरीका.
  • dev मोड में FastAPI सर्वर चलाकर, ऐप्लिकेशन की जांच करना.
  • Cloud Buildpacks और requirements.txt में fastapi और uvicorn मौजूद होने पर, Dockerfile की ज़रूरत न होना.
  • FastAPI ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने का तरीका.

2. सेटअप और ज़रूरी शर्तें

अपनी रफ़्तार से सेटअप करने का तरीका

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में शामिल लोगों के लिए डिसप्ले नेम होता है. यह एक कैरेक्टर स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. आपके पास इसे कभी भी अपडेट करने का विकल्प होता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. इसे बदला नहीं जा सकता. यानी, सेट करने के बाद इसमें बदलाव नहीं किया जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इस बारे में चिंता करने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी का रेफ़रंस देना होगा. इसे आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, अपना आईडी भी आज़माया जा सकता है. साथ ही, यह देखा जा सकता है कि यह आईडी उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट के खत्म होने तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है. यह प्रोजेक्ट नंबर है, जिसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में, इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद, बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मिलेगा. इससे वे मुफ़्त में आज़मा सकते हैं.

Cloud Shell शुरू करना

Google Cloud को लैपटॉप से रिमोट ऐक्सेस किया जा सकता है. हालांकि, इस ट्यूटोरियल में Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें पर क्लिक करें

3c1dabeca90e44e5.png

अगर Cloud Shell को पहली बार शुरू किया जा रहा है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में बताया गया होगा. अगर आपको इंटरमीडिएट स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

9c92662c6a846a5c.png

Cloud Shell को प्रोविज़न करने और उससे कनेक्ट होने में कुछ सेकंड लगेंगे.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. इसमें 5 जीबी की परसिस्टेंट होम डायरेक्ट्री मिलती है. यह Google Cloud में चलती है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि हो गई है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट कर दिया गया है.

  1. पुष्टि करने के लिए कि आपकी पुष्टि हो गई है, Cloud Shell में यह कमांड चलाएं:
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 कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो इस कमांड से इसे सेट किया जा सकता है:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. एपीआई चालू करना

Cloud Shell से, Artifact Registry, Cloud Build, और Cloud Run के एपीआई चालू करें:

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

इससे, पूरा होने का मैसेज दिखेगा. यह मैसेज इस तरह का होगा:

Operation "operations/..." finished successfully.

अब काम शुरू किया जा सकता है और अपना ऐप्लिकेशन लिखा जा सकता है...

4. ऐप्लिकेशन लिखना

इस चरण में, एचटीटीपी अनुरोधों का जवाब देने वाला "Hello World" FastAPI Python ऐप्लिकेशन बनाया जाएगा.

वर्किंग डायरेक्ट्री

Cloud Shell का इस्तेमाल करके, helloworld-fastapi नाम की वर्किंग डायरेक्ट्री बनाएं और उस पर स्विच करें:

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

main.py

main.py नाम की फ़ाइल बनाएं:

touch main.py

अपनी पसंद के कमांड लाइन एडिटर (nano, vim या emacs) का इस्तेमाल करके या Cloud Shell Editor बटन पर क्लिक करके, फ़ाइल में बदलाव करें:

10af7b1a6240e9f4.gif

Cloud Shell Editor की मदद से, फ़ाइल में सीधे बदलाव करने के लिए, यह कमांड इस्तेमाल करें:

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}!"
    }

इस कोड से, एक बुनियादी वेब सेवा बनती है. यह सेवा, एचटीटीपी जीईटी अनुरोधों का जवाब, एक मैसेज के साथ देती है.

requirements.txt

टर्मिनल को फिर से खोलें और डिपेंडेंसी तय करने के लिए, requirements.txt नाम की एक फ़ाइल जोड़ें:

touch requirements.txt

Cloud Shell Editor की मदद से, फ़ाइल में सीधे बदलाव करने के लिए, यह कमांड इस्तेमाल करें:

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 ऐप्लिकेशन को डिप्लॉय किया जा सकता है. हालांकि, इससे पहले, इसकी जांच करना ज़रूरी है...

5. ऐप्लिकेशन की जांच करना

ऐप्लिकेशन की जांच करने के लिए, uv (Python का बहुत तेज़ पैकेज और प्रोजेक्ट मैनेजर) का इस्तेमाल करें. यह Cloud Shell में पहले से इंस्टॉल होता है.

ऐप्लिकेशन की जांच करने के लिए, वर्चुअल एनवायरमेंट बनाएं:

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.

Cloud Shell विंडो में, Web Preview आइकॉन पर क्लिक करें और Preview on port 8080 को चुनें:

6c9ff9e5c692c58e.gif

इससे एक ब्राउज़र विंडो खुलेगी. इसमें Hello World! मैसेज दिखेगा.

+ आइकॉन पर क्लिक करके, Cloud Shell का दूसरा सेशन (नया टर्मिनल टैब) भी खोला जा सकता है. साथ ही, स्थानीय तौर पर चल रहे ऐप्लिकेशन को वेब अनुरोध भेजा जा सकता है:

curl localhost:8080

आपको यह जवाब मिलेगा:

{"message": "Hello World!"}

जब काम पूरा हो जाए, तो Cloud Shell के मुख्य सेशन पर वापस जाएं और CTRL+C दबाकर, FastAPI के डेवलपमेंट सर्वर को बंद करें.

ऐप्लिकेशन उम्मीद के मुताबिक काम कर रहा है. अब इसे डिप्लॉय किया जा सकता है...

6. Cloud Run पर डिप्लॉय करना

Cloud Run, रीजनल है. इसका मतलब है कि Cloud Run की सेवाओं को चलाने वाला इन्फ़्रास्ट्रक्चर, किसी खास रीजन में मौजूद होता है. इसे Google मैनेज करता है, ताकि उस रीजन के सभी ज़ोन में यह इन्फ़्रास्ट्रक्चर, ज़रूरत के हिसाब से उपलब्ध रहे. वह रीजन तय करें जिसका इस्तेमाल डिप्लॉयमेंट के लिए किया जाएगा. उदाहरण के लिए:

REGION=europe-west4

पक्का करें कि अब भी वर्किंग डायरेक्ट्री में हों:

ls

इससे ये फ़ाइलें दिखनी चाहिए:

main.py  requirements.txt

डिप्लॉय करने से पहले, .gcloudignore फ़ाइल बनाएं. इसमें .venv/ शामिल करें. इससे Cloud Run के डिप्लॉयमेंट में, स्थानीय तौर पर जांच के दौरान uv से बनाया गया वर्चुअल एनवायरमेंट शामिल नहीं होगा.

यह कमांड देकर, .gcloudignore फ़ाइल बनाएं:

echo ".venv/" > .gcloudignore

ऐप्लिकेशन को Cloud Run पर डिप्लॉय करें:

gcloud run deploy helloworld-fastapi \
  --source . \
  --region $REGION \
  --allow-unauthenticated
  • --allow-unauthenticated विकल्प से, सेवा सार्वजनिक तौर पर उपलब्ध हो जाती है. बिना पुष्टि वाले अनुरोधों से बचने के लिए, इसके बजाय --no-allow-unauthenticated का इस्तेमाल करें.

पहली बार, Artifact Registry रिपॉज़िटरी बनाने के लिए, आपको एक प्रॉम्प्ट मिलेगा. पुष्टि करने के लिए, 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)?

इससे, आपका सोर्स कोड, Artifact Registry रिपॉज़िटरी पर अपलोड होना शुरू हो जाएगा. साथ ही, आपकी कंटेनर इमेज बननी शुरू हो जाएगी:

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 ...

इसके बाद, डिप्लॉयमेंट पूरा होने तक इंतज़ार करें. डिप्लॉयमेंट पूरा होने पर, कमांड लाइन में सेवा का यूआरएल दिखता है:

...
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

सेवा का यूआरएल पाने के लिए, यह कमांड इस्तेमाल करें:

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

Cloud Shell से भी ऐप्लिकेशन को कॉल किया जा सकता है:

curl $SERVICE_URL?name=me

इससे आपको उम्मीद के मुताबिक, यह मैसेज मिलेगा:

{"message": "Hello me!"}

बधाई हो! आपने Cloud Run पर एक ऐप्लिकेशन डिप्लॉय कर लिया है. Cloud Run, मिले हुए अनुरोधों को मैनेज करने के लिए, आपकी कंटेनर इमेज को अपने-आप और हॉरिज़ॉन्टली स्केल करता है. इसके बाद, मांग कम होने पर, इसे डाउनस्केल करता है. आपको इस Cloud Run सेवा के लिए, अनुरोधों को मैनेज करने के दौरान इस्तेमाल किए गए सीपीयू, मेमोरी, और नेटवर्किंग के लिए ही पैसे चुकाने होंगे.

7. व्यवस्थित करें

Cloud Run, सेवा का इस्तेमाल न होने पर कोई शुल्क नहीं लेता. हालांकि, Artifact Registry में कंटेनर इमेज सेव करने के लिए, आपसे शुल्क लिया जा सकता है. शुल्क से बचने के लिए, अपनी रिपॉज़िटरी मिटाएं या Cloud प्रोजेक्ट मिटाएं. Cloud प्रोजेक्ट मिटाने पर, उस प्रोजेक्ट में इस्तेमाल किए गए सभी संसाधनों के लिए बिलिंग बंद हो जाती है.

अपनी कंटेनर इमेज रिपॉज़िटरी मिटाने के लिए:

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

Cloud Run की सेवा मिटाने के लिए:

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

अपना Google Cloud प्रोजेक्ट मिटाने के लिए,

  1. अपना मौजूदा प्रोजेक्ट आईडी वापस पाएं:
PROJECT_ID=$(gcloud config get-value core/project)
  1. पक्का करें कि यह वही प्रोजेक्ट है जिसे आपको मिटाना है:
echo $PROJECT_ID
  1. प्रोजेक्ट मिटाएं:
gcloud projects delete $PROJECT_ID

8. बधाई हो!

96d07289bb51daa7.png

आपने "Hello World" FastAPI वेब ऐप्लिकेशन बनाया और उसे Cloud Run पर डिप्लॉय किया!

हमने क्या-क्या कवर किया

  • FastAPI का "Hello World" ऐप्लिकेशन बनाने का तरीका.
  • dev मोड में FastAPI सर्वर चलाकर, ऐप्लिकेशन की जांच करना.
  • Cloud Buildpacks और requirements.txt में fastapi और uvicorn मौजूद होने पर, Dockerfile की ज़रूरत न होना.
  • FastAPI ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना.

ज़्यादा जानें