1. परिचय
खास जानकारी
Cloud Run फ़ंक्शन, GCF इवेंट पैराडाइम और फ़ंक्शन सिग्नेचर का इस्तेमाल करके, वर्कलोड को डिप्लॉय करने का एक नया तरीका है. Cloud Run फ़ंक्शन, हमारी बिल्ड प्रोसेस और डिप्लॉयमेंट कॉन्फ़िगरेशन का इस्तेमाल करने के बजाय, Cloud Run पर बनाई गई सेवा को सीधे तौर पर कंट्रोल करने की सुविधा देते हैं.
इस सेक्शन में, आपको Python में इवेंट-ड्रिवन फ़ंक्शन को डिप्लॉय करने का तरीका पता चलेगा. यह फ़ंक्शन, Cloud Storage बकेट में अपलोड की गई प्लैन टेक्स्ट फ़ाइल की खास जानकारी देने के लिए, Gemini का इस्तेमाल करता है.
आपको इनके बारे में जानकारी मिलेगी
- इवेंट-ड्रिवन Cloud Run फ़ंक्शन को डिप्लॉय करने का तरीका. यह फ़ंक्शन किसी ऑब्जेक्ट के GCS (जीसीएस) बकेट में अपलोड होने पर ट्रिगर होता है
- Cloud Storage से इवेंट पाने और Cloud Run फ़ंक्शन को ट्रिगर करने के लिए, सही भूमिकाओं वाला सेवा खाता बनाने का तरीका
- Cloud Storage में अपलोड किए गए सादे टेक्स्ट वाले दस्तावेज़ की ख़ास जानकारी पाने के लिए, Gemini का इस्तेमाल करने का तरीका
2. एनवायरमेंट वैरिएबल सेट अप करना और एपीआई चालू करना
gcloud सीएलआई को अपडेट करें
इस कोडलैब के लिए, gcloud सीएलआई का नया वर्शन इंस्टॉल होना ज़रूरी है. सीएलआई को अपडेट करने के लिए,
gcloud components update
एपीआई चालू करें
इस कोडलैब का इस्तेमाल शुरू करने से पहले, आपको कई एपीआई चालू करने होंगे. इस कोडलैब के लिए, इन एपीआई का इस्तेमाल करना ज़रूरी है. इन एपीआई को चालू करने के लिए, यह कमांड चलाएं:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com \ eventarc.googleapis.com \ aiplatform.googleapis.com
एनवायरमेंट वैरिएबल सेट अप करना
आपके पास ऐसे एनवायरमेंट वैरिएबल सेट करने का विकल्प होता है जिनका इस्तेमाल पूरे कोडलैब के दौरान किया जाएगा.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_NAME=crf-vertexai-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. स्टोरेज बकेट और सेवा खाता बनाना
स्टोरेज बकेट बनाना
Cloud Storage की बकेट बनाने के लिए, यह कमांड चलाएं:
gsutil mb -l us-central1 gs://$BUCKET_NAME
सेवा खाता बनाना
इस उदाहरण के लिए, Cloud Storage से इवेंट पाने और Cloud Run फ़ंक्शन को शुरू करने के लिए, आपको ज़रूरी EventArc अनुमतियों और Cloud Run इनवॉइसर की भूमिका वाला सेवा खाता बनाना होगा.
सबसे पहले, सेवा खाता बनाएं.
SERVICE_ACCOUNT="crf-vertexai-codelab" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
इसके बाद, अपने Eventarc ट्रिगर से जुड़े सेवा खाते को प्रोजेक्ट पर Eventarc इवेंट रिसीवर की भूमिका (roles/eventarc.eventReceiver) दें, ताकि ट्रिगर को इवेंट की सेवा देने वाली कंपनियों से इवेंट मिल सकें.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
इसके बाद, सेवा खाते को Cloud Run की शुरुआती भूमिका असाइन करें, ताकि वह फ़ंक्शन को शुरू कर सके.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
अब, सेवा खाते को एआई प्लैटफ़ॉर्म उपयोगकर्ता की भूमिका दें, ताकि वह Gemini को कॉल कर सके.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/aiplatform.user"
साथ ही, सेवा खाते को स्टोरेज ऑब्जेक्ट व्यूअर की भूमिका दें, ताकि वह फ़ाइल को ऐक्सेस कर सके.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role="roles/storage.objectViewer"
पहचान टोकन बनाने के लिए, Cloud Pub/Sub को आपके प्रोजेक्ट में roles/iam.serviceAccountTokenCreator की भूमिका की ज़रूरत होती है.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Cloud Storage से इवेंट पाने के लिए, आपके ट्रिगर में roles/pubsub.publisher की भूमिका होनी चाहिए. यह भूमिका, Google Cloud Storage के सेवा खाते को दी जाती है.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. फ़ंक्शन बनाना और डिप्लॉय करना
सबसे पहले, सोर्स कोड के लिए एक डायरेक्ट्री बनाएं और उस डायरेक्ट्री में cd करें.
mkdir $SERVICE_NAME && cd $_
इसके बाद, यहां दिए गए कॉन्टेंट के साथ requirements.txt
फ़ाइल बनाएं:
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
इसके बाद, यहां दिए गए कॉन्टेंट के साथ main.py
फ़ाइल बनाएं:
import functions_framework import vertexai from vertexai.generative_models import GenerativeModel from google.cloud import storage vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1") model = GenerativeModel( model_name="gemini-1.5-pro-001", system_instruction=[ "Summarize the following document in a single sentence. Do not respond with more than one sentence.", ], ) # Triggered by a change in a storage bucket @functions_framework.cloud_event def hello_gcs(cloud_event): data = cloud_event.data # download the file storage_client = storage.Client() blob = storage_client.bucket(data["bucket"]).get_blob(data["name"]) #print(blob) doc = blob.download_as_text() contents = [doc] response = model.generate_content(contents) print(response.text) print(f"Response from Model: {response.text}")
अब यह कमांड चलाकर, Cloud Run फ़ंक्शन को डिप्लॉय किया जा सकता है:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function hello_gcs \ --region $REGION \ --no-allow-unauthenticated \ --service-account $SERVICE_ACCOUNT_ADDRESS
कृपया यहां बताई गई चीज़ों पर ध्यान दें:
--source
फ़्लैग का इस्तेमाल करके Cloud Run का इस्तेमाल किया जाता है, ताकि रन किए जा सकने वाले कंटेनर आधारित सेवा में फ़ंक्शन बनाया जा सके--function
फ़्लैग (नया) का इस्तेमाल, नई सेवा के एंट्रीपॉइंट को उस फ़ंक्शन हस्ताक्षर के तौर पर सेट करने के लिए किया जाता है जिसे आपको शुरू करना है- (ज़रूरी नहीं)
--no-allow-unauthenticated
, ताकि आपके फ़ंक्शन को सार्वजनिक तौर पर इस्तेमाल न किया जा सके
आपसे पूछा जा सकता है कि "सोर्स से डिप्लॉय करने के लिए, Artifact Registry Docker रिपॉज़िटरी की ज़रूरत होती है, ताकि बनाए गए कंटेनर को स्टोर किया जा सके. [<YOUR_REGION>] इलाके में, [cloud-run-source-deploy] नाम की एक रिपॉज़िटरी बनाई जाएगी." रिपॉज़िटरी बनाने के लिए, 'हां' को डिफ़ॉल्ट रूप से स्वीकार करें.
नीचे दिया गया निर्देश चलाकर, अपनी नई सेवा crf-vertexai-codelab
देखी जा सकती है:
gcloud beta run services describe $SERVICE_NAME --region $REGION
5. इवेंट बनाना
Google Cloud Storage में किसी ऑब्जेक्ट को फ़ाइनल किए जाने पर, अपने फ़ंक्शन को मैसेज भेजने के लिए, हम Eventarc ट्रिगर बना सकते हैं:
BUCKET_REGION=$REGION gcloud eventarc triggers create $TRIGGER_NAME \ --location=$REGION \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
कृपया ध्यान दें कि --event-filters
फ़्लैग के लिए, अपनी बकेट के नाम में gs:// प्रीफ़िक्स का इस्तेमाल न करें.
अगर आपको गड़बड़ी If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent.
दिखती है, तो कृपया दोबारा कोशिश करने से पहले कुछ मिनट इंतज़ार करें.
Eventarc का इस्तेमाल करके, Cloud Storage से ट्रिगर सेवा सेट अप करने की जानकारी वाला ट्यूटोरियल, Cloud Run दस्तावेज़ में मिल सकता है: https://cloud.google.com/run/docs/tutorials/eventarc
6. फ़ंक्शन की जांच करना
फ़ंक्शन को डिप्लॉय करने और ट्रिगर बनाने के बाद, अब हम फ़ंक्शन को ट्रिगर करने के लिए तैयार हैं.
कोई फ़ाइल बनाएं और उसे अपनी Cloud Storage बकेट में अपलोड करें. Cloud Console के वेब इंटरफ़ेस के ज़रिए या gsutil सीएलआई टूल का इस्तेमाल करके, ऐसा किया जा सकता है. उदाहरण के लिए,
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
फ़ाइल अपलोड होने के बाद, एक इवेंट जनरेट होगा. इसके बाद, आपका फ़ंक्शन प्लैन टेक्स्ट फ़ाइल की खास जानकारी देने के लिए, Gemini को कॉल करेगा. खास जानकारी को लॉग में प्रिंट कर दिया जाएगा.
Cloud Run सेवा के लिए, Cloud Console में लॉग देखे जा सकते हैं या यह कमांड चलाया जा सकता है:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
उदाहरण के लिए, निजी झलक के नतीजों के लिए, Cloud Run फ़ंक्शन की उपयोगकर्ता गाइड की प्लैन टेक्स्ट फ़ाइल अपलोड करने पर, लॉग में यह जानकारी प्रिंट होती है:
Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service.
7. बधाई हो!
कोडलैब पूरा करने के लिए बधाई!
हमारा सुझाव है कि Cloud Run फ़ंक्शन के दस्तावेज़ देखें
इसमें हमने इन विषयों के बारे में बताया
- किसी इवेंट से ट्रिगर होने वाले Cloud Run फ़ंक्शन को डिप्लॉय करने का तरीका, जो किसी ऑब्जेक्ट को GCS बकेट में अपलोड किए जाने पर ट्रिगर होता है
- Cloud Storage से इवेंट पाने और Cloud Run फ़ंक्शन को ट्रिगर करने के लिए, सही भूमिकाओं वाला सेवा खाता बनाने का तरीका
- Cloud Storage में अपलोड किए गए सादे टेक्स्ट वाले दस्तावेज़ की ख़ास जानकारी पाने के लिए, Gemini का इस्तेमाल करने का तरीका
8. व्यवस्थित करें
अनजाने में होने वाले शुल्कों से बचने के लिए, Cloud Run सेवा को मिटाएं या दूसरे चरण में बनाया गया प्रोजेक्ट मिटाएं. ऐसा तब करना होगा, जब इस Cloud Run सेवा को बिना किसी शुल्क के इस्तेमाल की सुविधा वाले टीयर में, हर महीने Cloud Run को इस्तेमाल करने के लिए तय किए गए कोटे से ज़्यादा बार इस्तेमाल किया गया हो.
Cloud Run सेवाओं को मिटाने के लिए, https://console.cloud.google.com/run/ पर Cloud Run Cloud Console पर जाएं. इसके बाद, इस कोडलैब में बनाई गई crf-vertexai-codelab
सेवा को मिटाएं.
अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और 'मिटाएं' को चुनें. प्रोजेक्ट मिटाने पर, आपको अपने Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list
चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.