इवेंट-ड्रिवन Cloud Run फ़ंक्शन का इस्तेमाल शुरू करना

1. परिचय

खास जानकारी

Cloud Run फ़ंक्शन, GCF इवेंट पैराडाइम और फ़ंक्शन सिग्नेचर का इस्तेमाल करके, वर्कलोड को डिप्लॉय करने का एक नया तरीका है. Cloud Run फ़ंक्शन, हमारी बिल्ड प्रोसेस और डिप्लॉयमेंट कॉन्फ़िगरेशन का इस्तेमाल करने के बजाय, Cloud Run पर बनाई गई सेवा को सीधे तौर पर कंट्रोल करने की सुविधा देते हैं.

Cloud Run फ़ंक्शन की मदद से, हम Cloud Run सोर्स डिप्लॉय का आसान यूज़र एक्सपीरियंस (यूएक्स) उपलब्ध कराते हैं. इससे डेवलपर, Cloud Run कॉन्फ़िगरेशन का इस्तेमाल करके अपने वर्कलोड को पूरी तरह से कंट्रोल कर सकते हैं.

इस सेक्शन में, आपको Node में इवेंट-ड्रिवन फ़ंक्शन को डिप्लॉय करने का तरीका पता चलेगा. आपको एक ऐसा फ़ंक्शन डिप्लॉय करना होगा जो Google Cloud Storage बकेट में किसी ऑब्जेक्ट के फ़ाइनल होने पर ट्रिगर होता है.

इस कोडलैब में, नीचे दिए गए उदाहरणों में node.js के सैंपल का इस्तेमाल किया गया है. हालांकि, Cloud Functions के दूसरे जनरेशन के कोड सैंपल का इस्तेमाल अपनी पसंद की भाषा में किया जा सकता है:

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

  • किसी इवेंट से ट्रिगर होने वाले Cloud Run फ़ंक्शन को डिप्लॉय करने का तरीका, जो किसी ऑब्जेक्ट को GCS बकेट में अपलोड किए जाने पर ट्रिगर होता है
  • Cloud Storage से इवेंट पाने और Cloud Run फ़ंक्शन को ट्रिगर करने के लिए, सही भूमिकाओं वाला सेवा खाता बनाने का तरीका

2. एनवायरमेंट वैरिएबल सेट अप करना और एपीआई चालू करना

gcloud सीएलआई अपडेट करना

इस कोडलैब के लिए, gcloud सीएलआई का नया वर्शन इंस्टॉल होना ज़रूरी है. सीएलआई को अपडेट करने के लिए,

gcloud components update

एपीआई चालू करें

इस कोडलैब का इस्तेमाल शुरू करने से पहले, आपको कई एपीआई चालू करने होंगे. इस कोडलैब के लिए, इन एपीआई का इस्तेमाल करना ज़रूरी है. इन एपीआई को चालू करने के लिए, यह कमांड चलाएं:

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

एनवायरमेंट वैरिएबल सेट अप करना

एनवायरमेंट वैरिएबल सेट किए जा सकते हैं. इनका इस्तेमाल इस कोडलैब में किया जाएगा.

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=<YOUR_REGION, e.g. us-central1>

gcloud config set project $PROJECT_ID
SERVICE_NAME=crf-event-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 को ट्रिगर करने वाले की भूमिका के साथ एक सेवा खाता बनाना होगा. इससे, Cloud Storage से कोई इवेंट रिसीव किया जा सकेगा और Cloud Run फ़ंक्शन को ट्रिगर किया जा सकेगा.

सबसे पहले, सेवा खाता बनाएं.

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

SERVICE_ACCOUNT="cloud-run-functions"
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

4. फ़ंक्शन बनाना और उसे डिप्लॉय करना

सबसे पहले, सोर्स कोड के लिए एक डायरेक्ट्री बनाएं और उस डायरेक्ट्री में cd करें.

mkdir ../$SERVICE_NAME && cd $_

इसके बाद, यहां दिए गए कॉन्टेंट के साथ package.json फ़ाइल बनाएं:

{
    "dependencies": {
        "@google-cloud/functions-framework": "^3.0.0"
    }
}

इसके बाद, यहां दिए गए कॉन्टेंट के साथ index.js फ़ाइल बनाएं:

const functions = require("@google-cloud/functions-framework");

// Register a CloudEvent callback with the Functions Framework that will
// be triggered by Cloud Storage.
functions.cloudEvent("helloGCS", (cloudEvent) => {
    console.log(`Event ID: ${cloudEvent.id}`);
    console.log(`Event Type: ${cloudEvent.type}`);

    const file = cloudEvent.data;
    console.log(`Bucket: ${file.bucket}`);
    console.log(`File: ${file.name}`);
    console.log(`Metageneration: ${file.metageneration}`);
    console.log(`Created: ${file.timeCreated}`);
    console.log(`Updated: ${file.updated}`);
});

अब यह कमांड चलाकर, Cloud Run फ़ंक्शन को डिप्लॉय किया जा सकता है:

gcloud beta run deploy $SERVICE_NAME \
 --source . \
      --function helloGCS \
      --region $REGION \
      --no-allow-unauthenticated

कृपया यहां बताई गई चीज़ों पर ध्यान दें:

  • –source फ़्लैग का इस्तेमाल, Cloud Run को फ़ंक्शन को रन की जा सकने वाली कंटेनर सेवा में बनाने के लिए किया जाता है
  • –function फ़्लैग (नया) का इस्तेमाल, नई सेवा के एंट्रीपॉइंट को उस फ़ंक्शन सिग्नेचर के तौर पर सेट करने के लिए किया जाता है जिसे आपको शुरू करना है
  • (ज़रूरी नहीं) –no-allow-unauthenticated, ताकि आपके फ़ंक्शन को सार्वजनिक तौर पर इस्तेमाल न किया जा सके

नीचे दिया गया निर्देश चलाकर, अपनी नई सेवा crf-nodejs-event देखी जा सकती है:

gcloud beta run services describe $SERVICE_NAME

5. इवेंट बनाना

Google Cloud Storage में किसी ऑब्जेक्ट को फ़ाइनल किए जाने पर, अपने फ़ंक्शन को मैसेज भेजने के लिए, हम Eventarc ट्रिगर बना सकते हैं:

BUCKET_REGION=$REGION

gcloud eventarc triggers create $TRIGGER_NAME \
     --location=$REGION \
     --destination-run-service=crf-nodejs-event \
  --destination-run-region=$BUCKET_REGION \
     --event-filters="type=google.cloud.storage.object.v1.finalized" \
     --event-filters="bucket=$BUCKET_NAME" \
     --service-account=$SERVICE_ACCOUNT_ADDRESS

कृपया यहां बताई गई चीज़ों पर ध्यान दें:

  • gcs-function-trigger, ट्रिगर का नाम है
  • crf-nodejs-event, उस Cloud Run सेवा का नाम है जहां हमारा फ़ंक्शन डिप्लॉय किया गया है
  • –event-filters फ़्लैग के लिए, अपनी बकेट के नाम में gs:// प्रीफ़िक्स का इस्तेमाल न करें.

Eventarc का इस्तेमाल करके, Cloud Storage से ट्रिगर सेवा सेट अप करने के बारे में पूरी जानकारी देने वाला ट्यूटोरियल, Cloud Run के दस्तावेज़ में यहां मिल सकता है: https://cloud.google.com/run/docs/tutorials/eventarc

6. फ़ंक्शन की जांच करना

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

# get the Service URL
SERVICE_URL="$(gcloud run services describe crf-nodejs-event --region us-central1 --format 'value(status.url)')"

# invoke the service
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

फ़ंक्शन को डिप्लॉय करने और ट्रिगर बनाने के बाद, अब हम फ़ंक्शन को ट्रिगर करने के लिए तैयार हैं.

कोई फ़ाइल बनाएं और उसे अपनी Cloud Storage बकेट में अपलोड करें. ऐसा करने के लिए, Cloud Console के वेब इंटरफ़ेस का इस्तेमाल करें या gsutil सीएलआई टूल का इस्तेमाल करें. उदाहरण के लिए,

echo "hello world" > test.txt
gsutil cp test gs://$BUCKET_NAME

फ़ाइल अपलोड होने के बाद, एक इवेंट जनरेट होगा और आपका फ़ंक्शन ऑब्जेक्ट के बारे में कुछ बुनियादी जानकारी प्रिंट करेगा. जैसे, फ़ाइल का नाम. आपको यह आउटपुट, Cloud Console में फ़ंक्शन के लॉग एंट्री में दिखेगा. इसके अलावा, gcloud CLI का इस्तेमाल करके भी इस आउटपुट के लिए क्वेरी की जा सकती है:

gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json 

आपको यह आउटपुट दिखेगा

"textPayload": "File: test.txt"

7. बधाई हो!

कोडलैब पूरा करने के लिए बधाई!

हमारा सुझाव है कि Cloud Run फ़ंक्शन के दस्तावेज़ देखें

हमने क्या-क्या शामिल किया है

  • किसी इवेंट से ट्रिगर होने वाले Cloud Run फ़ंक्शन को डिप्लॉय करने का तरीका, जो किसी ऑब्जेक्ट को GCS बकेट में अपलोड किए जाने पर ट्रिगर होता है
  • Cloud Storage से इवेंट पाने और Cloud Run फ़ंक्शन को ट्रिगर करने के लिए, सही भूमिकाओं वाला सेवा खाता बनाने का तरीका

8. व्यवस्थित करें

अनजाने में होने वाले शुल्कों से बचने के लिए, Cloud Run सेवा को मिटाएं या दूसरे चरण में बनाया गया प्रोजेक्ट मिटाएं. ऐसा तब करना होगा, जब इस Cloud Run सेवा को बिना किसी शुल्क के इस्तेमाल की सुविधा वाले टीयर में, हर महीने इस्तेमाल किए जाने की तय सीमा से ज़्यादा बार इस्तेमाल किया गया हो.

Cloud Run की सेवाओं को मिटाने के लिए, https://console.cloud.google.com/run/ पर Cloud Run Cloud Console पर जाएं. इसके बाद, इस कोडलैब में बनाई गई crf-event-codelab सेवा को मिटाएं.

अगर आपको पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, दूसरे चरण में बनाया गया प्रोजेक्ट चुनें और 'मिटाएं' को चुनें. प्रोजेक्ट मिटाने पर, आपको अपने Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, सभी उपलब्ध प्रोजेक्ट की सूची देखी जा सकती है.