1. परिचय
Google Cloud Run फ़ंक्शन, इवेंट-ड्रिवन सर्वरलेस कंप्यूट प्लैटफ़ॉर्म है. Cloud Run फ़ंक्शन की मदद से, बदलती हुई ज़रूरतों को पूरा करने के लिए, संसाधनों को उपलब्ध कराने या स्केलिंग करने की चिंता किए बिना कोड लिखा जा सकता है.
Cloud Run फ़ंक्शन दो तरह के होते हैं:
- एचटीटीपी फ़ंक्शन, एचटीटीपी अनुरोधों का जवाब देते हैं.
- इवेंट फ़ंक्शन, इवेंट से ट्रिगर होते हैं. जैसे, Cloud Pub/Sub पर कोई मैसेज पब्लिश करना या Cloud Storage पर कोई फ़ाइल अपलोड करना.
इस कोडलैब में, C# में Cloud Run फ़ंक्शन बनाने का तरीका बताया गया है. खास तौर पर, आपको Google Cloud के अलग-अलग सोर्स से एचटीटीपी और CloudEvents के जवाब देने वाले C# फ़ंक्शन डिप्लॉय करने होंगे.
आपको क्या सीखने को मिलेगा
- .NET के लिए फ़ंक्शन फ़्रेमवर्क.
- एचटीटीपी फ़ंक्शन लिखने का तरीका.
- Cloud Storage इवेंट के जवाब में, इवेंट ट्रिगर करने वाला फ़ंक्शन लिखने का तरीका.
- Cloud Pub/Sub इवेंट के जवाब में, इवेंट ट्रिगर करने वाला फ़ंक्शन लिखने का तरीका.
- किसी भी तरह के इवेंट के जवाब में, इवेंट ट्रिगर करने वाला फ़ंक्शन लिखने का तरीका.
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट में यूनीक होना चाहिए. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं आता है, तो कोई दूसरा आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास खुद से भी यह पता लगाने का विकल्प है कि यह सुविधा उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट के दौरान बना रहेगा. - आपकी जानकारी के लिए बता दें कि तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने में ज़्यादा खर्च नहीं आता. इस ट्यूटोरियल के बाद, आपसे कोई शुल्क न लिया जाए, इसके लिए संसाधनों को बंद किया जा सकता है. इसके लिए, आपने जो संसाधन बनाए हैं उन्हें मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से रिमोट तौर पर इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब में आपको Google Cloud Shell का इस्तेमाल करना होगा. यह Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है.
Google Cloud Console में, सबसे ऊपर दाएं टूलबार में मौजूद Cloud Shell आइकॉन पर क्लिक करें:
एनवायरमेंट से कनेक्ट होने और उसे प्रोवाइड करने में सिर्फ़ कुछ मिनट लगेंगे. प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:
इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. यह Google Cloud पर चलता है, जिससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की सुविधा बेहतर होती है. इस कोडलैब में, सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
3. शुरू करने से पहले
ज़रूरी सेवाओं को चालू करने के लिए, Cloud Shell में यह कमांड चलाएं:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ cloudfunctions.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com
इसके बाद, अपना क्षेत्र सेट करें.
REGION=<YOUR_REGION>
इस कोडलैब में, आपको EventArc की ज़रूरी अनुमतियों और Cloud Run के ट्रिगर करने वाले की भूमिका के साथ एक सेवा खाता बनाना होगा. इससे, Cloud Storage से इवेंट पाने और Cloud Run फ़ंक्शन को ट्रिगर करने में मदद मिलेगी.
सबसे पहले, सेवा खाता बनाएं.
PROJECT_ID=$(gcloud config get-value core/project) 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. .NET के लिए फ़ंक्शन फ़्रेमवर्क
.NET के लिए फ़ंक्शन फ़्रेमवर्क, एक ओपन सोर्स FaaS (फ़ंक्शन के तौर पर सेवा) फ़्रेमवर्क है. इसका इस्तेमाल, पोर्टेबल .NET फ़ंक्शन लिखने के लिए किया जाता है. इसे Google Cloud Functions की टीम ने उपलब्ध कराया है.
Functions फ़्रेमवर्क की मदद से, ऐसे छोटे फ़ंक्शन लिखे जा सकते हैं जो कई अलग-अलग एनवायरमेंट में काम करते हैं. जैसे:
- Google Cloud Run फ़ंक्शन
- आपकी लोकल डेवलपमेंट मशीन
- Cloud Run और GKE पर Cloud Run
- Knative पर आधारित एनवायरमेंट
इस कोडलैब में, आपको C# में Cloud Functions बनाने और डिप्लॉय करने के लिए, .NET के लिए Functions Framework और उसके टेंप्लेट का इस्तेमाल करना होगा.
dotnet
के लिए Cloud Functions टेंप्लेट इंस्टॉल करने के लिए, Cloud Shell में यह कमांड चलाएं:
dotnet new install Google.Cloud.Functions.Templates
इससे dotnet
के लिए तीन टेंप्लेट इंस्टॉल हो जाएंगे. हर टेंप्लेट C#, F#, और VB में उपलब्ध है. हालांकि, इस लैब में सिर्फ़ C# का इस्तेमाल किया जाएगा. टेंप्लेट इंस्टॉल होने की पुष्टि करने के लिए, यह तरीका अपनाएं:
dotnet new list Templates Short Name ----------------------------------------------------------------------- Google Cloud Functions CloudEvent Function gcf-event Google Cloud Functions CloudEvent Function (Untyped) gcf-untyped-event Google Cloud Functions HttpFunction gcf-http
5. एचटीटीपी फ़ंक्शन
आपको एचटीटीपी अनुरोधों का जवाब देने वाला एचटीटीपी फ़ंक्शन बनाना और डिप्लॉय करना होगा.
gcf-http
टेंप्लेट का इस्तेमाल करके एचटीटीपी फ़ंक्शन बनाएं:
mkdir HelloHttp cd HelloHttp dotnet new gcf-http
इससे एक प्रोजेक्ट और एचटीटीपी अनुरोधों का जवाब देने वाली Function.cs
फ़ाइल बनती है.
.csproj
फ़ाइल में, टारगेट फ़्रेमवर्क को net8.0
में बदलें:
<TargetFramework>net8.0</TargetFramework>
Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, यह कमांड चलाएं:
gcloud beta run deploy hello-http-function \ --source . \ --function HelloHttp.Function \ --base-image dotnet8 \ --region $REGION \ --allow-unauthenticated
अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो नीचे दिए गए कमांड का इस्तेमाल करें:
gcloud functions deploy hello-http-function \ --allow-unauthenticated \ --entry-point HelloHttp.Function \ --gen2 \ --region $REGION \ --runtime dotnet8 \ --trigger-http
फ़ंक्शन डिप्लॉय होने के बाद, इसे नीचे दिए गए curl निर्देश का इस्तेमाल करके चालू किया जा सकता है:
SERVICE_URL=$(gcloud run services describe hello-http-function --platform managed --region $REGION --format 'value(status.url)') curl $SERVICE_URL
6. CloudEvent फ़ंक्शन - GCS
आपको Google Cloud Storage (GCS) इवेंट के जवाब में, CloudEvent फ़ंक्शन बनाना और उसे डिप्लॉय करना होगा.
सबसे पहले, Cloud Storage बकेट बनाएं. यह वह बकेट है जिसमें आपको बाद में इवेंट सुनने हैं:
BUCKET_NAME="cloud-functions-bucket-${PROJECT_ID}" gsutil mb -l us-central1 gs://${BUCKET_NAME}
gcf-event
टेंप्लेट का इस्तेमाल करके CloudEvent फ़ंक्शन बनाएं:
cd .. mkdir HelloGcs cd HelloGcs dotnet new gcf-event
इससे एक प्रोजेक्ट और CloudEvent
अनुरोधों का जवाब देने वाली Function.cs
फ़ाइल बनती है. यह CloudEvent
के डेटा को StorageObjectData
में भी पार्स करता है.
.csproj
फ़ाइल में, टारगेट फ़्रेमवर्क को net8.0
में बदलें:
<TargetFramework>net8.0</TargetFramework>
Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, आपको पहले फ़ंक्शन को डिप्लॉय करना होगा और फिर उसके लिए ट्रिगर बनाना होगा.
gcloud beta run deploy hello-gcs-function \ --source . \ --function HelloGcs.Function \ --region $REGION \ --base-image dotnet8 \ --no-allow-unauthenticated
अब Cloud Run फ़ंक्शन के लिए ट्रिगर बनाएं
BUCKET_REGION=$REGION gcloud eventarc triggers create hello-gcs-function-trigger \ --location=$REGION \ --destination-run-service=hello-gcs-function \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो trigger-event
और trigger-resource
फ़्लैग का इस्तेमाल करके, फ़ंक्शन को डिप्लॉय करने के लिए नीचे दिए गए निर्देश का इस्तेमाल करें:
gcloud functions deploy hello-gcs-function \ --allow-unauthenticated \ --entry-point HelloGcs.Function \ --gen2 \ --region $REGION \ --runtime dotnet8 \ --trigger-event google.storage.object.finalize \ --trigger-resource ${BUCKET_NAME} \ --service-account=$SERVICE_ACCOUNT_ADDRESS
कुछ मिनटों के बाद, यह सुविधा Cloud Console में दिखने लगेगी:
स्टोरेज बकेट में कोई फ़ाइल अपलोड करके, फ़ंक्शन को ट्रिगर करें:
echo "Hello from Storage" > random.txt gsutil cp random.txt gs://${BUCKET_NAME}
लॉग पढ़कर पुष्टि करें कि फ़ंक्शन ट्रिगर हुआ है या नहीं:
Cloud Run फ़ंक्शन के लिए, यह कमांड चलाया जा सकता है:
gcloud logging read "resource.labels.service_name=hello-gcs-function AND textPayload: Name" --format=json
दूसरे जनरेशन के फ़ंक्शन के लिए, यह निर्देश चलाया जा सकता है:
gcloud functions logs read hello-gcs-function \ --gen2 \ --region us-central1
7. CloudEvent फ़ंक्शन - Pub/Sub
आपको Cloud Pub/Sub इवेंट के जवाब में, CloudEvent फ़ंक्शन बनाना और डिप्लॉय करना होगा.
सबसे पहले, ऐसा Cloud Pub/Sub टॉपिक बनाएं जो इवेंट उत्सर्जित करेगा:
TOPIC_NAME=cloud-functions-topic gcloud pubsub topics create ${TOPIC_NAME}
gcf-event
टेंप्लेट का इस्तेमाल करके CloudEvent फ़ंक्शन बनाएं:
cd .. mkdir HelloPubSub cd HelloPubSub dotnet new gcf-event
इससे एक प्रोजेक्ट और CloudEvent
अनुरोधों का जवाब देने वाली Function.cs
फ़ाइल बनती है. यह डिफ़ॉल्ट रूप से, CloudEvent
के डेटा को StorageObjectData
में भी पार्स करता है.
.csproj
फ़ाइल में, टारगेट फ़्रेमवर्क को net8.0
में बदलें:
<TargetFramework>net8.0</TargetFramework>
Pub/Sub मैसेज को पार्स करने के लिए, StorageObjectData
को MessagePublishedData
में बदलें. Google.Events.Protobuf.Cloud.Storage.V1
को Google.Events.Protobuf.Cloud.PubSub.V1
में बदलें.
आखिर में, आपका फ़ंक्शन ऐसा दिखना चाहिए:
using CloudNative.CloudEvents; using Google.Cloud.Functions.Framework; using Google.Events.Protobuf.Cloud.PubSub.V1; using System; using System.Threading; using System.Threading.Tasks; namespace HelloPubSub; public class Function : ICloudEventFunction<MessagePublishedData> { public Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken) { var nameFromMessage = data.Message?.TextData; var name = string.IsNullOrEmpty(nameFromMessage) ? "world" : nameFromMessage; Console.WriteLine($"Hello {name}"); return Task.CompletedTask; } }
Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, आपको पहले फ़ंक्शन को डिप्लॉय करना होगा. इसके बाद, उसके लिए ट्रिगर बनाना होगा.
gcloud beta run deploy hello-pubsub-function \ --source . \ --function HelloPubSub.Function \ --region $REGION \ --base-image dotnet8 \ --no-allow-unauthenticated \ --service-account=$SERVICE_ACCOUNT_ADDRESS
अब Cloud Run फ़ंक्शन के लिए ट्रिगर बनाएं
gcloud eventarc triggers create my-pubsub-trigger \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT_ADDRESS \ --destination-run-service=hello-pubsub-function \ --destination-run-region=$REGION \ --destination-run-path="/" \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_NAME
अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो trigger-topic
फ़्लैग का इस्तेमाल करके फ़ंक्शन को डिप्लॉय करने के लिए, नीचे दिए गए कमांड का इस्तेमाल करें:
gcloud functions deploy hello-pubsub-function \ --allow-unauthenticated \ --entry-point HelloPubSub.Function \ --gen2 \ --region us-central1 \ --runtime dotnet8 \ --trigger-topic ${TOPIC_NAME}
कुछ मिनटों के बाद, यह सुविधा Cloud Console में दिखने लगेगी:
टॉपिक में मैसेज पब्लिश करके फ़ंक्शन को ट्रिगर करें:
gcloud pubsub topics publish ${TOPIC_NAME} --message="World"
लॉग पढ़कर पुष्टि करें कि फ़ंक्शन ट्रिगर हुआ है या नहीं.
Cloud Run फ़ंक्शन के लिए, यह कमांड चलाया जा सकता है:
gcloud logging read "resource.labels.service_name=hello-pubsub-function AND textPayload: World" --format=json
दूसरे जनरेशन के फ़ंक्शन के लिए, यह निर्देश चलाया जा सकता है:
gcloud functions logs read hello-pubsub-function \ --gen2 \ --region us-central1
8. CloudEvent फ़ंक्शन - बिना टाइप वाला
अगर CloudEvents का इस्तेमाल करके एक्सपेरिमेंट किया जा रहा है और आपके पास अब तक कोई ऐसा पेलोड डेटा मॉडल नहीं है जिसे आपको कमिट करना है या आपको अपने फ़ंक्शन को किसी भी Cloud Event को हैंडल करने की सुविधा देनी है, तो बिना टाइप वाले CloudEvent फ़ंक्शन का इस्तेमाल किया जा सकता है.
gcf-untyped-event
टेंप्लेट का इस्तेमाल करके CloudEvent फ़ंक्शन बनाएं:
cd .. mkdir HelloUntyped cd HelloUntyped dotnet new gcf-untyped-event
इससे एक प्रोजेक्ट और Function.cs
फ़ाइल बनती है, जो CloudEvent
के अनुरोधों का जवाब देती है. हालांकि, इसमें CloudEvent
के डेटा को पार्स नहीं किया जाता.
.csproj
फ़ाइल में, टारगेट फ़्रेमवर्क को net8.0
में बदलें:
<TargetFramework>net8.0</TargetFramework>
Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, आपको पहले फ़ंक्शन को डिप्लॉय करना होगा और फिर उसके लिए ट्रिगर बनाना होगा.
gcloud beta run deploy hello-untyped-function \ --source . \ --function HelloUntyped.Function \ --region $REGION \ --base-image dotnet8 \ --no-allow-unauthenticated
अब Cloud Run फ़ंक्शन के लिए ट्रिगर बनाएं
BUCKET_REGION=$REGION gcloud eventarc triggers create hello-untyped-function-trigger \ --location=$REGION \ --destination-run-service=hello-untyped-function \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
अगर आपको Cloud Functions के दूसरे जनरेशन के तौर पर डिप्लॉय करना है, तो trigger-event
और trigger-resource
फ़्लैग का इस्तेमाल करके, फ़ंक्शन को डिप्लॉय करने के लिए नीचे दिए गए निर्देश का इस्तेमाल करें:
gcloud functions deploy hello-untyped-function \ --allow-unauthenticated \ --entry-point HelloUntyped.Function \ --gen2 \ --region us-central1 \ --runtime dotnet8 \ --trigger-event google.storage.object.finalize \ --trigger-resource ${BUCKET_NAME}
जब कोई फ़ाइल स्टोरेज बकेट में अपलोड की जाएगी, तब यह फ़ंक्शन ट्रिगर होगा.
कुछ मिनटों के बाद, यह सुविधा Cloud Console में दिखने लगेगी:
स्टोरेज बकेट में कोई फ़ाइल अपलोड करके, फ़ंक्शन को ट्रिगर करें:
echo "Hello from Storage" > random.txt gsutil cp random.txt gs://${BUCKET_NAME}
लॉग पढ़कर पुष्टि करें कि फ़ंक्शन ट्रिगर हुआ है या नहीं.
Cloud Run फ़ंक्शन के लिए, यह कमांड चलाया जा सकता है:
gcloud logging read "resource.labels.service_name=hello-gcs-function AND textPayload: Name" --format=json
दूसरे जनरेशन के फ़ंक्शन के लिए, यह निर्देश चलाया जा सकता है:
gcloud functions logs read hello-untyped-function \ --gen2 \ --region us-central1
9. बधाई हो!
कोडलैब पूरा करने के लिए बधाई.
हमने क्या-क्या शामिल किया है
- .NET के लिए फ़ंक्शन फ़्रेमवर्क.
- एचटीटीपी Cloud फ़ंक्शन लिखने का तरीका.
- Cloud Storage इवेंट के जवाब में CloudEvent फ़ंक्शन लिखने का तरीका.
- Cloud Pub/Sub इवेंट के जवाब में CloudEvent फ़ंक्शन लिखने का तरीका.
- किसी भी तरह के इवेंट का जवाब देने वाला CloudEvent फ़ंक्शन लिखने का तरीका.