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 CLI का नया वर्शन इंस्टॉल होना ज़रूरी है. सीएलआई को अपडेट करने के लिए, यह कमांड चलाएं
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
सेवा खाता बनाना
इस उदाहरण के लिए, आपको EventArc की ज़रूरी अनुमतियों और Cloud Run invoker की भूमिका वाला एक सेवा खाता बनाना होगा. इससे Cloud Storage से इवेंट मिल पाएगा और 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 invoker की भूमिका असाइन करें, ताकि वह फ़ंक्शन को शुरू कर सके.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
अब सेवा खाते को AI Platform User की भूमिका असाइन करें, ताकि वह 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 के ज़रिए इवेंट पाने के लिए, आपके ट्रिगर के पास Google Cloud Storage सेवा खाते को दी गई भूमिका roles/pubsub.publisher होनी चाहिए.
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 repository की ज़रूरत होती है, ताकि बनाए गए कंटेनर को सेव किया जा सके. [<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 सेवा के लिए हर महीने तय की गई सीमा से ज़्यादा बार इस्तेमाल किया गया है, तो अनजाने में शुल्क लग सकता है. इसके अलावा, चरण 2 में बनाए गए प्रोजेक्ट को भी मिटाया जा सकता है.
Cloud Run सेवाओं को मिटाने के लिए, Cloud Run Cloud Console पर जाएं. इसका लिंक यह है: https://console.cloud.google.com/run/. इसके बाद, इस कोडलैब में बनाई गई crf-vertexai-codelab सेवा को मिटाएं.
अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और मिटाएं को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list कमांड चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.