1. परिचय
इस लैब में, आपको Google Cloud में एआई की मदद से काम करने वाले Gemini का इस्तेमाल करना होगा. इसकी मदद से, Cloud Functions को डिप्लॉय करने से जुड़ी समस्या को हल किया जा सकता है. इसके लिए, आपको गड़बड़ी के लॉग का विश्लेषण करना होगा, समस्या की मुख्य वजह का पता लगाना होगा, और उसे ठीक करने का तरीका ढूंढना होगा.
आपको क्या करना होगा...
- आपको Cloud Shell टर्मिनल और gcloud सीएलआई का इस्तेमाल करके एनवायरमेंट सेट अप करना होगा. इसमें, काम के Google API चालू करना और दिए गए कोड से Cloud फ़ंक्शन बनाना शामिल है
- कैप्चर की गई जानकारी को समझने के लिए, लॉग की खास जानकारी जनरेट करने के लिए Cloud Logging की लॉग की खास जानकारी वाली सुविधा का इस्तेमाल करें.
- समस्या को हल करने और उसका समाधान पाने के लिए, Gemini से चैट करें.
आपको यह जानकारी मिलेगी...
- Google Cloud Observability के साथ Gemini का इस्तेमाल कैसे करें और समस्याओं को कैसे हल करें.
- Gemini की मदद से, Cloud Functions के लॉग ढूंढने और उन्हें समझने का तरीका.
आपको इनकी ज़रूरत होगी...
- Chrome वेब ब्राउज़र
- बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट
- आपके पास Google खाता होना चाहिए. साथ ही, आपके पास प्रोजेक्ट को ऐक्सेस करने की अनुमतियां होनी चाहिए, ताकि एपीआई चालू किए जा सकें और संसाधनों में बदलाव किया जा सके
यह लैब, DevOps और प्लैटफ़ॉर्म इंजीनियर के साथ-साथ सभी लेवल के सॉफ़्टवेयर डेवलपर के लिए है. इसमें शुरुआती लेवल के डेवलपर भी शामिल हैं. हमारा फ़ोकस, समस्याओं को हल करने के लिए Gemini की सुविधाओं को इस्तेमाल करने पर होगा.
2. सेटअप
इस सेक्शन में, इस लैब को शुरू करने के लिए ज़रूरी सभी चरणों के बारे में बताया गया है.
एनवायरमेंट कॉन्फ़िगर करना
1. https://console.cloud.google.com खोलकर, Cloud Console में लॉग-इन करें.
2. वह Google Cloud प्रोजेक्ट चुनें जिसका इस्तेमाल आपको इस लैब में करना है.

3. Console में Cloud Functions पेज खोलें. इसके लिए, नेविगेशन मेन्यू (कंसोल विंडो में सबसे ऊपर बाईं ओर मौजूद आइकॉन ☰) से Cloud Functions को चुनें.

इसके अलावा, कंसोल के खोज बार में "Cloud Functions" खोजें:

फ़ंक्शन की सूची के सबसे ऊपर मौजूद, फ़ंक्शन बनाएं बटन पर क्लिक करें 
अगर आपने इस प्रोजेक्ट में Cloud Functions का इस्तेमाल पहले नहीं किया है, तो आपको Google API चालू करने के लिए कहा जाएगा.

जारी रखने के लिए, चालू करें पर क्लिक करें.
4. नए Cloud फ़ंक्शन की बुनियादी प्रॉपर्टी तय करें.
- नाम को "
codelab-cf" पर सेट करें - बिना पुष्टि किए गए अनुरोधों को अनुमति दें विकल्प को चुनें

इस चरण को पूरा करने के लिए, विंडो में सबसे नीचे बाईं ओर मौजूद, आगे बढ़ें बटन पर क्लिक करें:

आगे बढ़ें पर क्लिक करने के बाद, आपसे Google के अन्य एपीआई चालू करने के लिए कहा जा सकता है. चौथे चरण की तरह, चालू करें पर क्लिक करें.

Cloud Functions का रनटाइम और कोड सेट अप करना
इस कोडलैब में, Python को प्रोग्रामिंग भाषा के तौर पर इस्तेमाल किया गया है. अगर आपको Python के बारे में नहीं पता है, तो चिंता न करें. इस CodeLab को पूरा करने के लिए, आपको Python की जानकारी होना ज़रूरी नहीं है.
5. फ़ंक्शन के रनटाइम के तौर पर Python 3.11 को चुनें

ध्यान दें कि रनटाइम बदलने से, इनलाइन एडिटर में दिखने वाला सोर्स कोड बदल जाता है.
6. अपने-आप जनरेट होने वाले क्विकस्टार्ट के उदाहरण में बदलाव करने के लिए, यहां दिए गए कोड को इनलाइन एडिटर में कॉपी करें.
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
यह कोड, GET अनुरोध से path एट्रिब्यूट को पढ़ता है. साथ ही, बकेट का नाम चुनने के लिए पाथ को पार्स करता है. इसके बाद, इस पाथ पर सेव किए गए ऑब्जेक्ट की सूची पाने के लिए, Google Cloud Storage API को कॉल करता है. यह फ़ंक्शन (get_object_list) एक ऐसे अनुरोध को स्वीकार करता है जो इनपुट आर्ग्युमेंट के तौर पर Flask ऑब्जेक्ट होता है. साथ ही, यह ऑब्जेक्ट के नामों को JSON ऐरे के तौर पर दिखाता है.
7. इनलाइन एडिटर में मौजूद फ़ाइलों की सूची से, requirements.txt फ़ाइल चुनें. नीचे दिए गए कोड को इनलाइन एडिटर में कॉपी करके, डिपेंडेंसी की मौजूदा सूची को नई सूची से बदलें.
google-cloud-storage
8. Cloud Function को डिप्लॉय करने के लिए, सबसे नीचे बाईं ओर मौजूद DEPLOY पर क्लिक करें.

डिप्लॉयमेंट की प्रोसेस पूरी होने तक, आपको कुछ मिनट इंतज़ार करना पड़ सकता है. अगर आपने सेटअप के निर्देशों का पालन किया है, तो आपको डिप्लॉयमेंट की स्थिति 'फ़ेल हो गया' के तौर पर दिखेगी.
3. समस्या का पता लगाना और उसे हल करना
इस सेक्शन में, समस्या और उसे हल करने का तरीका जानने के लिए, लॉग एक्सप्लेनेशन की सुविधा और Gemini की अन्य सुविधाओं का इस्तेमाल करें.
1. डिप्लॉयमेंट पूरा नहीं होता. आपको एक गड़बड़ी का मैसेज दिखेगा. इसमें इस बारे में ज़्यादा जानकारी दी गई होगी. साथ ही, डिप्लॉयमेंट लॉग देखने का विकल्प भी दिया गया होगा. डिप्लॉयमेंट के लॉग देखने के लिए, लॉग देखें पर क्लिक करें.

ध्यान दें कि डिप्लॉयमेंट लॉग, उसी ब्राउज़र में अलग टैब में खुलेंगे. इस CodeLab को पूरा करने के लिए, आपको टैब के बीच नेविगेट करना होगा.
ध्यान दें कि 'लॉग देखें' पर क्लिक करने पर, आपको लॉग लाइनें न दिखें या सिर्फ़ कुछ लाइनें दिखें. ऐसे मामले में, लॉग एक्सप्लोरर के क्वेरी पैन में जाकर, समयसीमा चुनने वाले टूल का इस्तेमाल करें और पिछले 30 मिनट चुनें.

2. खुले हुए टैब में लॉग देखें. ध्यान दें कि लॉग की खास जानकारी, अपवाद के कॉलस्टैक की कई लाइनों की तरह दिखती है. ऐसा इसलिए होता है, क्योंकि Cloud Functions, stdout या stderr में प्रिंट किए गए टेक्स्ट को कैप्चर करता है. साथ ही, हर लाइन को अलग लॉग एंट्री के तौर पर लिखता है. अन्य लॉग लाइन में, एक्ज़िट गड़बड़ी कोड के साथ-साथ Cloud Functions और Cloud Run API से मिली अतिरिक्त जानकारी के बारे में खास जानकारी दी गई है.

किसी लॉग के बारे में ज़्यादा जानकारी देखने के लिए, किसी भी लाइन पर क्लिक करें. बढ़े हुए लॉग में अतिरिक्त यूज़र इंटरफ़ेस (यूआई) एलिमेंट होते हैं. इन पर क्लिक करके, लॉग के बारे में पूरी जानकारी कॉपी की जा सकती है. साथ ही, सभी फ़ील्ड को बड़ा करके, लॉग एंट्री का पूरा डेटा दिखाया जा सकता है. इसके अलावा, Gemini का इस्तेमाल करके लॉग एंट्री के बारे में जानकारी दी जा सकती है.
4. अपवाद कॉलस्टैक में ज़्यादा जानकारी नहीं है. लॉग में, अपवाद के स्टैक ट्रेस लॉग का आखिरी हिस्सा ढूंढें. यह "Container called exit(1)" वाली लाइन है. लॉग की खास जानकारी में यह लिखा है:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
ऐसा लगता है कि इस पर जांच की जा सकती है. लॉग एंट्री को बड़ा करने के लिए, इस लाइन पर क्लिक करें. इसके बाद, चुने गए लॉग के बारे में ज़्यादा जानकारी देखने के लिए, "इस लॉग एंट्री के बारे में जानकारी दें" बटन पर क्लिक करें.

अगर इस प्रोजेक्ट में Gemini का इस्तेमाल पहले नहीं किया गया था, तो आपको ज़रूरी एपीआई चालू करने के लिए कहा जाएगा. अगर आपको एपीआई चालू करने के लिए कहा जाता है, तो आगे बढ़ने के लिए चालू करें पर क्लिक करें.

ध्यान दें कि कभी-कभी Gemini को प्रॉम्प्ट देने पर, आपको गड़बड़ी का मैसेज मिल सकता है. अगर ऐसा होता है, तो जवाब पाने के लिए अपने प्रॉम्प्ट को एक बार फिर से दोहराएं. उदाहरण के लिए, "इस लॉग एंट्री के बारे में जानकारी दें" बटन पर फिर से क्लिक करें.
5. Gemini से मिली जानकारी की समीक्षा करें. अगर दी गई जानकारी पर्याप्त नहीं है या समझ में नहीं आ रही है, तो Gemini को ज़्यादा जानकारी देने के लिए प्रॉम्प्ट करें. इसके लिए, इनमें से कोई एक प्रॉम्प्ट इस्तेमाल करें या अपना सवाल लिखें
क्या इस लॉग के बारे में ज़्यादा जानकारी दी जा सकती है?
क्या इस गड़बड़ी के बारे में ज़्यादा जानकारी दी जा सकती है?
6. इसके बाद, Gemini से समस्या को हल करने के सुझाव मांगें. उदाहरण के लिए, Gemini से पूछें
इस समस्या को कैसे हल करें?
इस गड़बड़ी को ठीक करने का तरीका बताएं
इस गड़बड़ी को ठीक करने का तरीका बताएं
Gemini का जवाब, मौजूदा कॉन्टेक्स्ट के हिसाब से अलग-अलग हो सकता है. साथ ही, यह आपके प्रॉम्प्ट के शब्दों और फ़ॉर्मैट पर भी निर्भर करता है. Gemini से यह उम्मीद की जाती है कि वह यह पक्का करने के लिए सुझाव देगा कि Cloud फ़ंक्शन के सोर्स कोड में, hello_http नाम का फ़ंक्शन मौजूद हो.
7. फ़िलहाल, आपको वह टैब दिख रहा है जिसमें Cloud Functions के लॉग दिखते हैं. उस पिछले टैब को चुनें जिसमें गड़बड़ी के साथ Cloud Functions डिप्लॉयमेंट पेज दिखता है. इसके बाद, बदलाव करें पर क्लिक करें.

8. पुष्टि करें कि पुष्टि करने की सुविधा अब भी बिना पुष्टि किए गए अनुरोधों को अनुमति दें पर सेट है. अगर ज़रूरी हो, तो चुने गए विकल्प को अपडेट करें.

9. इनलाइन एडिटर देखने के लिए, सबसे नीचे मौजूद आगे बढ़ें पर क्लिक करें. Gemini के सुझाव का पालन करें और फ़ंक्शन का नाम get_order_list से बदलकर hello_http करें.
बदलाव करने के बाद, डिप्लॉय करें पर क्लिक करें.
डिप्लॉयमेंट की प्रोसेस पूरी होने तक, आपको कुछ मिनट इंतज़ार करना पड़ सकता है. पुष्टि करें कि डिप्लॉयमेंट पूरा हो गया है और कोई गड़बड़ी का मैसेज नहीं दिख रहा है.
ध्यान दें कि डिप्लॉयमेंट की प्रोसेस पूरी होने तक, Console में आपको गड़बड़ी का आखिरी मैसेज दिखता रहेगा.
10. curl का इस्तेमाल करके, यह एचटीटीपीएस अनुरोध भेजें और पुष्टि करें कि Cloud फ़ंक्शन काम कर रहा है. इसके लिए, Cloud Shell का इस्तेमाल करें या किसी ऐसे टर्मिनल का इस्तेमाल करें जिसमें curl और gcloud सीएलआई इंस्टॉल हो.इसके लिए, Cloud Shell टर्मिनल में यह कमांड चलाएँ.
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
ध्यान दें कि टर्मिनल से इस कमांड को चलाने के लिए, आपको gcloud CLI का इस्तेमाल करके पुष्टि करनी होगी. साथ ही, आपको अपने प्रोजेक्ट आईडी की वैल्यू को एनवायरमेंट वैरिएबल GOOGLE_CLOUD_PROJECT पर सेट करना होगा.
बोनस
Python रनटाइम को चुनने पर, फ़ंक्शन hello_http के नाम को, एचटीटीपी ट्रिगर किए गए Cloud फ़ंक्शन के लिए डिफ़ॉल्ट एंट्री पॉइंट के तौर पर तय किया गया था. इसके अलावा, सोर्स कोड में फ़ंक्शन का नाम get_order_list रखा जा सकता है. साथ ही, रनटाइम फ़ील्ड के दाईं ओर मौजूद, इनलाइन एडिटर के ऊपर मौजूद क्लाउड फ़ंक्शन के एंट्री पॉइंट फ़ील्ड को अपडेट किया जा सकता है:

एंट्री पॉइंट को hello_http से बदलकर get_order_list करने पर, डिप्लॉयमेंट से जुड़ी समस्या हल हो जाएगी.
4. साफ़-सफ़ाई सेवा
क्लीनअप करने के लिए, प्रोजेक्ट बंद करें या Cloud Functions इंस्टेंस मिटाएं. Cloud Functions को Console का इस्तेमाल करके या नीचे दिए गए CLI कमांड की मदद से मिटाया जा सकता है:
gcloud functions delete codelab-cf --region=us-central1
5. बधाई हो!
बधाई हो - आपने Gemini का इस्तेमाल करके, अपने ऐप्लिकेशन से जुड़ी समस्या को हल कर लिया है. अब आपको पता है कि यह लॉग को समझने और Google Cloud के बारे में सवालों के जवाब पाने में कैसे मदद कर सकता है.