Python के साथ नमस्ते Cloud Run

1. परिचय

96d07289bb51daa7.png

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

इस ट्यूटोरियल का मकसद, आसान वेब ऐप्लिकेशन बनाना और उसे 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 Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell शुरू करना

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

Cloud Shell चालू करें

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

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह 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. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
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. ऐप्लिकेशन लिखें

इस चरण में, आपको एचटीटीपी अनुरोधों के जवाब में, एक आसान फ़्लास्क-आधारित Python ऐप्लिकेशन बनाना होगा.

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

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

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

main.py

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

touch main.py

अपने पसंदीदा कमांड लाइन एडिटर (नैनो, vim या emacs) का इस्तेमाल करके या क्लाउड शेल एडिटर बटन पर क्लिक करके फ़ाइल में बदलाव करें:

10af7b1a6240e9f4.gif

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

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)

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

requirements.txt

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

touch requirements.txt

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

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

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

cloudshell edit Procfile

Procfile

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

पक्का करें कि सभी फ़ाइलें, काम करने वाली डायरेक्ट्री में मौजूद हों:

ls

इसमें नीचे दी गई फ़ाइलें शामिल होनी चाहिए:

main.py  Procfile  requirements.txt

आपका ऐप्लिकेशन डिप्लॉय किए जाने के लिए तैयार है, लेकिन आइए पहले इसकी जांच करें...

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

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

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

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

6c9ff9e5c692c58e.gif

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

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

curl localhost:8080

आपको यह जवाब मिलना चाहिए:

Hello World!

जब आपका काम हो जाए, तो मुख्य Cloud Shell सेशन पर वापस जाएं और python main.py निर्देश को CTRL+C से रोकें.

वर्चुअल एनवायरमेंट से बाहर निकलें:

deactivate

आखिर में, वर्चुअल एनवायरमेंट डायरेक्ट्री हटाएं:

rm -r venv/

आपका ऐप्स उम्मीद के मुताबिक काम करता है: चलिए इसे डिप्लॉय करते हैं...

6. Cloud Run पर डिप्लॉय करें

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

REGION="europe-west9"

पक्का करें कि आप अब भी काम करने वाली डायरेक्ट्री में हैं:

ls

इसमें नीचे दी गई फ़ाइलें शामिल होनी चाहिए:

main.py  Procfile  requirements.txt

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

gcloud run deploy helloworld-python \
  --source . \
  --platform managed \
  --region $REGION \
  --allow-unauthenticated
  • इस निर्देश की मदद से, डिफ़ॉल्ट क्षेत्र तय किया जा सकता है: gcloud config set run/region $REGION
  • आपके पास इस निर्देश की मदद से, Cloud Run को डिफ़ॉल्ट रूप से मैनेज करने की सुविधा देने का विकल्प भी है: gcloud config set run/platform managed
  • --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-python \
  --platform managed \
  --region $REGION \
  --format "value(status.url)" \
)
echo $SERVICE_URL

इसमें कुछ ऐसा दिखना चाहिए:

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

अब आप किसी वेब ब्राउज़र में सेवा URL खोलकर अपने ऐप्लिकेशन का उपयोग कर सकते हैं:

c836b93e5601e2cf.gif

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

curl $SERVICE_URL?who=me

इससे आपको वेलकम मैसेज मिल सकता है:

Hello me!

बधाई हो! आपने अभी-अभी 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-python \
  --platform managed \
  --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

आपने एक आसान वेब ऐप्लिकेशन बनाया है और उसे Cloud Run पर डिप्लॉय कर दिया है!

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

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.