Eventarc और Workflows की मदद से, इवेंट के आधार पर ऑर्केस्ट्रा बनाएं

1. परिचय

cb762f29e9183a3f.png 1c05e3d0c2bd2b45.png a03f943ca09ac4c.png

Eventarc की मदद से, Cloud Run की सेवाओं को कई तरह के सोर्स के इवेंट से आसानी से कनेक्ट किया जा सकता है. इसकी मदद से, इवेंट के आधार पर काम करने वाले ऐसे आर्किटेक्चर बनाए जा सकते हैं जिनमें माइक्रोसेवाओं को शिफ़्ट किया जाता है और डिस्ट्रिब्यूट किया जाता है. यह आपके लिए इवेंट का डेटा डालने, डिलीवरी, सुरक्षा, अनुमति देने, और गड़बड़ियों को ठीक करने का काम करता है.

Workflows पूरी तरह से मैनेज किया गया ऑर्केस्ट्राशन प्लैटफ़ॉर्म है, जो सेवाओं को उस क्रम में चलाता है जिसे आपने तय किया है: वर्कफ़्लो. इन वर्कफ़्लो में Cloud Run या Cloud Functions पर होस्ट की गई सेवाएं, Cloud Vision AI और BigQuery जैसी Google Cloud सेवाएं, और किसी भी एचटीटीपी-आधारित एपीआई का इस्तेमाल किया जा सकता है.

इस कोडलैब में, इमेज प्रोसेस करने के लिए माइक्रोसेवाओं का इवेंट-ड्रिवन ऑर्केस्ट्रेशन तैयार किया जाएगा. Workflows की मदद से चार तरह की इमेज प्रोसेसिंग वाले Cloud Functions के ऑर्डर, इनपुट, और आउटपुट को व्यवस्थित किया जा सकता है. इसके बाद, Eventarc की मदद से Cloud Storage के इवेंट का जवाब देने के लिए, ऑर्केस्ट्रा की सुविधा चालू की जा सकती है.

आखिर में, आपको इमेज प्रोसेस करने के लिए, बिना सर्वर वाला ऐसा आर्किटेक्चर मिलेगा जिसमें ज़रूरत के हिसाब से बदलाव किए जा सकते हैं.

e372ceed8c26c5fb.png

आप इन चीज़ों के बारे में जानेंगे

  • Eventarc और Workflows के बारे में खास जानकारी
  • Cloud Functions सेवाएं कैसे डिप्लॉय करें
  • Workflows का इस्तेमाल करके सेवाओं को व्यवस्थित करने का तरीका
  • Eventarc में Cloud Storage के इवेंट के लिए, Workflows को जवाब देने का तरीका

2. सेटअप और ज़रूरी शर्तें

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

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा.
  • आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

क्लाउड शेल शुरू करें

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में जाकर, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस कोडलैब (कोड बनाना सीखना) में आपका सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

gcloud सेट अप करें

Cloud Shell में, अपना प्रोजेक्ट आईडी और वह इलाका सेट करें जहां आपको अपना ऐप्लिकेशन डिप्लॉय करना है. उन्हें PROJECT_ID और REGION वैरिएबल के तौर पर सेव करें. जिन इलाकों में यह सुविधा उपलब्ध है उनके बारे में जानने के लिए, Cloud Functions की जगह की जानकारी देखें.

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

सोर्स कोड पाना

ऐप्लिकेशन का सोर्स कोड, eventarc-samples रेपो के processing-pipelines फ़ोल्डर में है.

डेटा स्टोर करने की जगह का क्लोन बनाएं:

git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git

eventarc-samples/processing-pipelines फ़ोल्डर पर जाएं:

cd eventarc-samples/processing-pipelines

3. आर्किटेक्चर की खास जानकारी

ऐप्लिकेशन का आर्किटेक्चर इस तरह है:

6aa6fbc7721dd6b6.png

  1. इमेज को इनपुट बकेट में सेव किया जाता है, जो Cloud Storage में 'बनाएं' इवेंट जनरेट करता है.
  2. Cloud Storage बनाने वाले इवेंट को Eventarc, Cloud Storage ट्रिगर के ज़रिए पढ़ता है और CloudEvent के रूप में Workflows को पास करता है.
  3. वर्कफ़्लो के पहले चरण में, Cloud Function सेवा फ़िल्टर, Vision API का इस्तेमाल करके इमेज का पता लगाती है कि इमेज सुरक्षित है या नहीं. इमेज के सुरक्षित होने पर, वर्कफ़्लो अगले चरणों में जारी रहता है.
  4. वर्कफ़्लो के दूसरे चरण में, Cloud Function सेवा लेबलर, Vision API की मदद से इमेज के लेबल एक्सट्रैक्ट करता है और लेबल को आउटपुट बकेट में सेव करता है.
  5. तीसरे चरण में, एक और Cloud Function सेवा Resizer, ImageSharp का इस्तेमाल करके इमेज का साइज़ बदलता है. साथ ही, बदली गई इमेज को आउटपुट बकेट में सेव करता है.
  6. आखिरी चरण में, एक अन्य Cloud Function सेवा वॉटरमार्कर, ImageSharp का इस्तेमाल करके बदली गई इमेज में लेबलर से लेबल का वॉटरमार्क जोड़ता है. साथ ही, इमेज को आउटपुट बकेट में सेव करता है.

ऐप्लिकेशन, Cloud Storage के किसी इवेंट से ट्रिगर होता है. इसलिए, यह इवेंट के आधार पर काम करता है. इमेज की प्रोसेसिंग एक वर्कफ़्लो के मुताबिक होती है. इसलिए, इसे व्यवस्थित किया जाता है. आखिर में, यह इवेंट के आधार पर होने वाला ऑर्केस्ट्रेशन है. इसमें इमेज को प्रोसेस करने के लिए, ज़रूरत के हिसाब से लेकिन बिना सर्वर वाला स्ट्रक्चर तैयार किया गया है.

4. बकेट बनाना

उपयोगकर्ताओं के लिए एक इनपुट बकेट बनाएं, जिसमें इमेज अपलोड की जा सकें. साथ ही, प्रोसेस की गई इमेज को सेव करने के लिए इमेज प्रोसेसिंग पाइपलाइन के लिए आउटपुट बकेट बनाएं.

Cloud Shell में इन्हें चलाएं:

REGION=us-central1
BUCKET1=$PROJECT_ID-images-input
BUCKET2=$PROJECT_ID-images-output

gsutil mb -l $REGION gs://$BUCKET1
gsutil mb -l $REGION gs://$BUCKET2

5. फ़िल्टर सेवा डिप्लॉय करें

पहली सेवा को डिप्लॉय करने से शुरुआत करते हैं. यह Cloud Functions सेवा, बकेट और फ़ाइल की जानकारी हासिल करती है. साथ ही, यह तय करती है कि इमेज, Vision API की मदद से सुरक्षित है या नहीं. इसके बाद, नतीजा मिलता है.

सबसे पहले, Cloud Functions gen2 और Vision API के लिए ज़रूरी सेवाएं चालू करें:

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  cloudfunctions.googleapis.com \
  run.googleapis.com \
  vision.googleapis.com

टॉप लेवल processing-pipelines फ़ोल्डर में, सेवा को डिप्लॉय करें:

SERVICE_NAME=filter

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --entry-point Filter.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v3/filter/csharp

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

FILTER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

6. लेबलर सेवा को डिप्लॉय करें

Cloud Functions की दूसरी सेवा को बकेट और फ़ाइल की जानकारी मिलती है. वह Vision API की मदद से इमेज के लेबल एक्सट्रैक्ट करती है और लेबल को आउटपुट बकेट में सेव करती है.

टॉप लेवल processing-pipelines फ़ोल्डर में, सेवा को डिप्लॉय करें:

SERVICE_NAME=labeler

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --set-env-vars BUCKET=$BUCKET2 \
  --entry-point Labeler.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v2/labeler/csharp

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

LABELER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

7. रीसाइज़र सेवा डिप्लॉय करें

यह Cloud Functions सेवा, बकेट और फ़ाइल की जानकारी लेती है. यह ImageSharp का इस्तेमाल करके इमेज का साइज़ बदलती है और इमेज को आउटपुट बकेट में सेव करती है.

टॉप लेवल processing-pipelines फ़ोल्डर में, सेवा को डिप्लॉय करें:

SERVICE_NAME=resizer

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --set-env-vars BUCKET=$BUCKET2 \
  --entry-point Resizer.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v2/resizer/csharp \
  --timeout=120s

दो मिनट की timeout वैल्यू नोट करें, ताकि साइज़ बदलने वाले फ़ंक्शन को प्रोसेसिंग में ज़्यादा समय लग सके.

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

RESIZER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

8. वॉटरमार्क वाली सेवा डिप्लॉय करें

यह Cloud Functions सेवा, बकेट, फ़ाइल, और लेबल की जानकारी हासिल करती है, फ़ाइल को पढ़ती है, और ImageSharp का इस्तेमाल करके इमेज में लेबल को वॉटरमार्क के तौर पर जोड़ती है. साथ ही, इमेज को आउटपुट बकेट में सेव करती है.

टॉप लेवल processing-pipelines फ़ोल्डर में, सेवा को डिप्लॉय करें:

SERVICE_NAME=watermarker

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --set-env-vars BUCKET=$BUCKET2 \
  --entry-point Watermarker.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v2/watermarker/csharp

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

WATERMARKER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

इस समय, सभी चार Cloud Functions डिप्लॉय हो जाने चाहिए और काम करने चाहिए:

76a218568982c90c.png

9. वर्कफ़्लो तय करें और डिप्लॉय करें

वर्कफ़्लो में फ़िल्टर, लेबलर, रीसाइज़र, और वॉटरमार्क वाली सेवाओं को एक साथ लाने के लिए, Workflows का इस्तेमाल करें. वर्कफ़्लो, इन सेवाओं को उसी क्रम में और हमारे तय किए गए पैरामीटर के मुताबिक कॉल करेगा.

सबसे पहले, वर्कफ़्लो के लिए ज़रूरी सेवाएं चालू करें:

gcloud services enable \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

तय करें

वर्कफ़्लो को पैरामीटर के तौर पर CloudEvent मिलता है. जब हम ट्रिगर बना लेंगे, तब यह Eventarc से मिलेगा. पहले दो चरणों में, Workflows इवेंट को लॉग करता है और इवेंट से बकेट और फ़ाइल की जानकारी निकालता है:

main:
  params: [event]
  steps:
  - log_event:
      call: sys.log
      args:
          text: ${event}
          severity: INFO
  - extract_bucket_and_file:
      assign:
      - bucket: ${event.data.bucket}
      - file: ${event.data.name}

वर्कफ़्लो, फ़िल्टर करने वाली उस सेवा को कॉल करता है जिसे हमने पहले डिप्लॉय किया था. यह कॉल filter चरण में किया जाता है. इसके बाद यह फ़ाइल की सुरक्षा को लॉग करता है और जांच करता है:

  - filter:
      call: http.post
      args:
        url: FILTER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${bucket}
            file: ${file}
      result: filterResponse
  - log_safety:
      call: sys.log
      args:
          text: ${filterResponse.body.safe}
          severity: INFO
  - check_safety:
      switch:
        - condition: ${filterResponse.body.safe == true}
          next: label
      next: end

वर्कफ़्लो, label चरण में लेबल करने वाली सेवा को कॉल करता है और जवाब को कैप्चर करता है (मुख्य तीन लेबल):

  - label:
      call: http.post
      args:
        url: LABELER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${bucket}
            file: ${file}
      result: labelResponse

resize चरण में, Workflows साइज़ बदलने वाली सेवा को कॉल करता है और रिस्पॉन्स (साइज़ बदली गई इमेज की बकेट और फ़ाइल) कैप्चर करता है:

  - resize:
      call: http.post
      args:
        url: RESIZER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${bucket}
            file: ${file}
      result: resizeResponse

watermark चरण में, वर्कफ़्लो, वॉटरमार्क वाली सेवा को साइज़ बदलने वाली इमेज और लेबल के साथ कॉल करता है. साथ ही, नतीजे (साइज़ बदलें और वॉटरमार्क वाली इमेज) कैप्चर करता है:

  - watermark:
      call: http.post
      args:
        url: WATERMARKER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${resizeResponse.body.bucket}
            file: ${resizeResponse.body.file}
            labels: ${labelResponse.body.labels}
      result: watermarkResponse

वर्कफ़्लो, final चरण में लेबलर, रीसाइज़र, और वॉटरमार्क करने वाली सेवाओं से एचटीटीपी स्टेटस कोड दिखाता है:

  - final:
      return:
        label: ${labelResponse.code}
        resize: ${resizeResponse.code}
        watermark: ${watermarkResponse.code}

डिप्लॉय करें

वर्कफ़्लो को डिप्लॉय करने से पहले, पक्का करें कि सेवा के यूआरएल को मैन्युअल तरीके से या sed का इस्तेमाल करके, डिप्लॉय किए गए फ़ंक्शन के यूआरएल से बदल दिया गया हो:

टॉप लेवल processing-pipelines फ़ोल्डर में, image-v3 फ़ोल्डर पर जाएं, जहां workflows.yaml फ़ाइल मौजूद है:

cd image-v3/

प्लेसहोल्डर यूआरएल को डिप्लॉय की गई सेवाओं के असली यूआरएल से बदलने के लिए, sed चलाएं:

sed -i -e "s|FILTER_URL|${FILTER_URL}|" workflow.yaml
sed -i -e "s|LABELER_URL|${LABELER_URL}|" workflow.yaml
sed -i -e "s|RESIZER_URL|${RESIZER_URL}|" workflow.yaml
sed -i -e "s|WATERMARKER_URL|${WATERMARKER_URL}|" workflow.yaml

वर्कफ़्लो को डिप्लॉय करें:

WORKFLOW_NAME=image-processing

gcloud workflows deploy $WORKFLOW_NAME \
    --source=workflow.yaml \
    --location=$REGION

कुछ सेकंड में, आपको कंसोल में डिप्लॉय किया गया वर्कफ़्लो दिखेगा:

92cf4e758bdc3dde.png

10. ट्रिगर बनाएं

वर्कफ़्लो लागू हो गया है. अब आखिरी चरण, इसे Eventarc ट्रिगर की मदद से Cloud Storage इवेंट से कनेक्ट करना है.

एक बार किया जाने वाला सेटअप

सबसे पहले, Eventarc के लिए ज़रूरी सेवाएं चालू करें:

gcloud services enable \
 eventarc.googleapis.com

ऐसा सेवा खाता बनाएं जिसका इस्तेमाल आपको Eventarc ट्रिगर में करना है.

SERVICE_ACCOUNT=eventarc-trigger-imageproc-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Eventarc trigger image processing service account"

workflows.invoker की भूमिका दें, ताकि सेवा खाते का इस्तेमाल, Eventarc से वर्कफ़्लो शुरू करने के लिए किया जा सके:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/workflows.invoker \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

eventarc.eventReceiver की भूमिका दें, क्योंकि सेवा खाते का इस्तेमाल

Cloud Storage ट्रिगर:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Cloud Storage सेवा खाते को pubsub.publisher की भूमिका दें. Eventarc के Cloud Storage ट्रिगर के लिए यह ज़रूरी है:

STORAGE_SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p $PROJECT_ID)"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$STORAGE_SERVICE_ACCOUNT \
    --role roles/pubsub.publisher

बनाएं

ट्रिगर बनाने के लिए नीचे दिया गया तरीका अपनाएं. यह इनपुट Cloud Storage बकेट से नई फ़ाइल बनाने वाले इवेंट के लिए फ़िल्टर ट्रिगर करता है और उन्हें हमारे पहले बताए गए वर्कफ़्लो पर पास करता है:

TRIGGER_NAME=trigger-image-processing

gcloud eventarc triggers create $TRIGGER_NAME \
  --location=$REGION \
  --destination-workflow=$WORKFLOW_NAME \
  --destination-workflow-location=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET1" \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Cloud Console के Eventarc सेक्शन में यह देखा जा सकता है कि ट्रिगर बन गया है और तैयार है:

14330c4fa2451bc0.png

11. पाइपलाइन की जांच करना

इमेज प्रोसेसिंग पाइपलाइन, Cloud Storage से इवेंट पाने के लिए तैयार है. पाइपलाइन की जांच करने के लिए, इनपुट बकेट में एक इमेज अपलोड करें:

gsutil cp beach.jpg gs://$BUCKET1

चित्र अपलोड करते ही, आपको वर्कफ़्लो का निष्पादन सक्रिय स्थिति में दिखाई देगा:

36d07cb63c39e7d9.png

एक-एक मिनट के बाद आपको प्रोजेक्ट पूरा दिखेगा. वर्कफ़्लो के इनपुट और आउटपुट भी देखे जा सकते हैं:

229200c79d989c25.png

अगर आउटपुट बकेट की सामग्री सूची में शामिल की जाती है, तो आपको बदली गई इमेज, आकार में बदली गई और वॉटरमार्क वाली इमेज और इमेज के लेबल दिखाई देंगे:

gsutil ls gs://$BUCKET2

gs://$PROJECT_ID-images-output/beach-400x400-watermark.jpeg
gs://$PROJECT_ID-images-output/beach-400x400.png
gs://$PROJECT_ID-images-output/beach-labels.txt

नतीजे की दोबारा जांच करने के लिए, साइज़ और वॉटरमार्क वाली इमेज का इस्तेमाल करके, नतीजा देखा जा सकता है:

75f3c0019ca842ce.jpeg

12. बधाई हो

बधाई हो, आपने कोडलैब पूरा कर लिया है!

हमने इन विषयों के बारे में बताया

  • Eventarc और Workflows के बारे में खास जानकारी
  • Cloud Functions सेवाएं कैसे डिप्लॉय करें
  • Workflows का इस्तेमाल करके सेवाओं को व्यवस्थित करने का तरीका
  • Eventarc में Cloud Storage के इवेंट के लिए, Workflows को जवाब देने का तरीका