Hello Cloud Run with Python (Streamlit)

1. परिचय

96d07289bb51daa7.png

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

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

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

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

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 API चालू करें:

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

इससे, इस तरह का 'हो गया' मैसेज दिखता है:

Operation "operations/..." finished successfully.

अब आप काम शुरू करने और आवेदन लिखने के लिए तैयार हैं...

4. आवेदन लिखें

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

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

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

mkdir ~/helloworld-streamlit && cd ~/helloworld-streamlit

main.py

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

touch main.py

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

10af7b1a6240e9f4.gif

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

cloudshell edit main.py

main.py

import streamlit as st

st.title("Hello World! 👋🌎")
st.markdown(
    """
    This is a demo Streamlit app.

    Enter your name in the text box below and press a button to see some fun features in Streamlit.
    """
)

name = st.text_input("Enter your name:")

# Use columns to create buttons side by side
col1, col2 = st.columns(2)

with col1:
    if st.button("Send balloons! 🎈"):
        st.balloons()
        st.write(f"Time to celebrate {name}! 🥳")
        st.write("You deployed a Streamlit app! 👏")

with col2:
    if st.button("Send snow! ❄️"):
        st.snow()
        st.write(f"Let it snow {name}! 🌨️")
        st.write("You deployed a Streamlit app! 👏")

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

requirements.txt

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

touch requirements.txt

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

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/streamlit
streamlit==1.47.0

Streamlit ऐप्लिकेशन को डिप्लॉय किया जा सकता है, लेकिन पहले इसे टेस्ट कर लेते हैं...

5. ऐप्लिकेशन को टेस्ट करना

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

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

uv venv

डिपेंडेंसी इंस्टॉल करें:

uv pip install -r requirements.txt

streamlit run का इस्तेमाल करके ऐप्लिकेशन शुरू करें. साथ ही, जांच के लिए --server.enableCORS को बंद करें, क्योंकि यह Cloud Shell में रुकावट डालता है:

uv run streamlit run main.py --server.port=8080 --server.enableCORS=false

लॉग से पता चलेगा कि Streamlit ऐप्लिकेशन चल रहा है:

You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8080
  Network URL: http://10.1.0.1:8080
  External URL: http://34.37.7.94:8080

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

6c9ff9e5c692c58e.gif

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

helloworld-streamlit-app.png

अपना नाम डालकर देखें और स्क्रीन पर मौजूद दोनों बटन आज़माएं!

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

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

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

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

REGION=europe-west1

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

ls

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

main.py  requirements.txt

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

इस कमांड का इस्तेमाल करके .gcloudignore बनाएं:

echo ".venv/" > .gcloudignore

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

gcloud run deploy helloworld-streamlit \
  --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-streamlit \
  --region $REGION \
  --format "value(status.address.url)" \
)
echo $SERVICE_URL

यह कुछ ऐसा दिखना चाहिए:

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

अब अपने ऐप्लिकेशन का इस्तेमाल किया जा सकता है. इसके लिए, वेब ब्राउज़र में सेवा का यूआरएल खोलें:

helloworld-streamlit.gif

बधाई हो! आपने अभी-अभी 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-streamlit \
  --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" Streamlit वेब ऐप्लिकेशन बनाया और उसे Cloud Run पर डिप्लॉय किया!

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

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

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