GKE (जीकेई) Autopilot और Pub/Sub के साथ इंटिग्रेट होने वाले वर्कफ़्लो को ट्रिगर करने के लिए, Eventarc को कॉन्फ़िगर करना

1. खास जानकारी

इस लैब में, आपको एक Eventarc ट्रिगर बनाना होगा. यह ट्रिगर, Pub/Sub विषय को Workflows सेवा से कनेक्ट करता है. Eventarc की मदद से, सेवा से सेवा के बीच होने वाले कम्यूनिकेशन को अलग किया जा सकता है. इससे आपका समाधान ज़्यादा एक्सटेंसिबल और इवेंट-ड्रिवन बन जाता है. आपको एक ऐसा वर्कफ़्लो बनाना होगा जिसमें कई चरण शामिल हों. इससे, Cymbal Eats पर ऑर्डर करने वाले खरीदारों के लिए, इनाम के लिए पॉइंट कैलकुलेट करने के कारोबारी प्रोसेस को पूरा किया जा सकेगा. Workflow, GKE Autopilot पर चल रहे ऐप्लिकेशन को कई अनुरोध भेजेगा. साथ ही, Pub/Sub विषय पर एक मैसेज पब्लिश करेगा, ताकि Order Service ऐप्लिकेशन को इनाम के लिए तय किए गए पॉइंट के बारे में सूचना दी जा सके.

6c0606022b76f79d.png

GKE Autopilot क्या है?

GKE Autopilot, GKE में काम करने का एक ऐसा मोड है जिसमें Google आपके क्लस्टर कॉन्फ़िगरेशन को मैनेज करता है. इसमें आपके नोड, स्केलिंग, सुरक्षा, और पहले से कॉन्फ़िगर की गई अन्य सेटिंग शामिल हैं. ऑटोपायलट क्लस्टर को ज़्यादातर प्रोडक्शन वर्कलोड चलाने के लिए ऑप्टिमाइज़ किया जाता है. साथ ही, ये आपके Kubernetes मेनिफ़ेस्ट के आधार पर कंप्यूट संसाधनों को उपलब्ध कराते हैं. आसान कॉन्फ़िगरेशन, क्लस्टर और वर्कलोड सेटअप, स्केलेबिलिटी, और सुरक्षा के लिए GKE के सबसे सही तरीकों और सुझावों का पालन करता है. पहले से मौजूद सेटिंग की सूची के लिए, ऑटोपायलट और स्टैंडर्ड मोड की तुलना टेबल देखें.

GKE Standard में, उपयोगकर्ताओं को वर्कर नोड और नोड पूल कॉन्फ़िगरेशन को मैनेज करना होता है. बाकी काम GKE करता है.

GKE स्टैंडर्ड मोड में काम करते समय, ग्राहक और Google की ज़िम्मेदारियां

85500aad65f87437.png

GKE Autopilot में, नोड पूल को कॉन्फ़िगर और मैनेज करने की ज़िम्मेदारी Google की होती है. इससे आपको क्लस्टर पर चलने वाले ऐप्लिकेशन और सेवाओं पर फ़ोकस करने में मदद मिलती है.

Eventarc क्या है?

Eventarc की मदद से, इवेंट पर आधारित आर्किटेक्चर बनाए जा सकते हैं. इसके लिए, आपको बुनियादी इन्फ़्रास्ट्रक्चर को लागू करने, उसे पसंद के मुताबिक बनाने या उसे बनाए रखने की ज़रूरत नहीं होती. Eventarc, स्टेट में होने वाले बदलावों (इन्हें इवेंट कहा जाता है) के फ़्लो को मैनेज करने के लिए, स्टैंडर्ड समाधान उपलब्ध कराता है. यह समाधान, अलग-अलग माइक्रोसेवाओं के बीच काम करता है. ट्रिगर होने पर, Eventarc इन इवेंट को Pub/Sub की सदस्यताओं के ज़रिए अलग-अलग डेस्टिनेशन पर भेजता है. जैसे, Workflows, Cloud Run) का इस्तेमाल करता है. साथ ही, आपके लिए डिलीवरी, सुरक्षा, अनुमति, निगरानी, और गड़बड़ी ठीक करने की सुविधा को मैनेज करता है.

Google इवेंट प्रोवाइडर

  • Google Cloud की सेवाएं देने वाली 90 से ज़्यादा कंपनियां. ये सेवा देने वाली कंपनियां, इवेंट को सीधे सोर्स (जैसे, Cloud Storage) से या Cloud Audit Logs की एंट्री के ज़रिए भेजती हैं.
  • Pub/Sub की सेवाएं देने वाली कंपनियां. ये प्रोवाइडर, Pub/Sub मैसेज का इस्तेमाल करके Eventarc को इवेंट भेजते हैं.

सेवा देने वाले तीसरे पक्ष

तीसरे पक्ष की कंपनियां, Google से बाहर की ऐसी इकाइयां होती हैं जो Eventarc सोर्स उपलब्ध कराती हैं.

Eventarc ट्रिगर

  • Cloud Pub/Sub इवेंट. Eventarc को Pub/Sub विषयों पर पब्लिश किए गए मैसेज से ट्रिगर किया जा सकता है.
  • Cloud Audit Logs (CAL) इवेंट. Cloud Audit Logs, हर Cloud प्रोजेक्ट, फ़ोल्डर, और संगठन के लिए, एडमिन की गतिविधि और डेटा ऐक्सेस के ऑडिट लॉग उपलब्ध कराते हैं.
  • डायरेक्ट इवेंट. Eventarc को कई डायरेक्ट इवेंट से ट्रिगर किया जा सकता है. जैसे, Cloud Storage बकेट में अपडेट या Firebase रिमोट कॉन्फ़िगरेशन टेंप्लेट में अपडेट.

इवेंट के डेस्टिनेशन

  • वर्कफ़्लो
  • Cloud Run
  • GKE
  • Cloud Functions( 2nd gen)

c7ca054200edf1b3.png

Workflows क्या है?

Workflows एक पूरी तरह से मैनेज की जाने वाली सेवा है. इसकी मदद से, माइक्रोसेवाओं, टास्क, और एपीआई को इंटिग्रेट किया जा सकता है. Workflows, सर्वरलेस सेवा है. यह आपकी मांग के हिसाब से काम करेगी.

वर्कफ़्लो इस्तेमाल करने के उदाहरण:

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

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

वर्कफ़्लो के फ़ायदे:

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

इस लैब में, आपको इवेंट-ड्रिवन वर्कफ़्लो कॉन्फ़िगर करना होगा.

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

इस लैब में, आपको इन कामों को करने का तरीका मिलेगा:

  • Workflows को ट्रिगर करने के लिए, Pub/Sub विषय और Eventarc को कॉन्फ़िगर करना
  • GKE Autopilot पर चल रहे ऐप्लिकेशन को एपीआई कॉल करने के लिए, Workflow को कॉन्फ़िगर करना
  • Pub/Sub पर मैसेज पब्लिश करने के लिए, वर्कफ़्लो को कॉन्फ़िगर करना
  • Cloud Logging और gcloud सीएलआई का इस्तेमाल करके, Workflows के स्ट्रक्चर्ड लॉग को क्वेरी करने का तरीका

ज़रूरी शर्तें

  • इस लैब में, यह मान लिया गया है कि आपको Cloud Console और Cloud Shell एनवायरमेंट के बारे में जानकारी है.
  • GKE और Cloud Pub/Sub का अनुभव होना फ़ायदेमंद है, लेकिन ज़रूरी नहीं है.

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

Cloud Project का सेटअप

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

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

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

सर्च बार के दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell चालू करें.

8613854df02635a3.png

रिपॉज़िटरी को क्लोन करें और डायरेक्ट्री पर जाएं. इसके बाद, यहां दिए गए निर्देश को टर्मिनल में कॉपी करके चिपकाएं और Enter दबाएं:

git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service

gke-lab-setup.sh कमांड चलाकर, ज़रूरी डिपेंडेंसी डिप्लॉय करें

ये संसाधन बनाए जाएंगे:

  • AlloyDB क्लस्टर और इंस्टेंस
  • GKE Autopilot क्लस्टर
./gke-lab-setup.sh

अगर अनुमति देने के लिए कहा जाता है, तो जारी रखने के लिए "अनुमति दें" पर क्लिक करें.

6356559df3eccdda.png

सेटअप में करीब 10 मिनट लगेंगे.

जब तक स्क्रिप्ट पूरी न हो जाए और आपको नीचे आउटपुट न दिख जाए, तब तक अन्य चरणों को न चलाएं.

NAME: client-instance
ZONE: us-central1-c
MACHINE_TYPE: e2-medium
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.9
EXTERNAL_IP: 35.232.109.233
STATUS: RUNNING

3. GKE Autopilot क्लस्टर

GKE Autopilot क्लस्टर की समीक्षा करना

प्रोजेक्ट के एनवायरमेंट वैरिएबल सेट करें:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

शुरुआती सेटअप के दौरान, क्लस्टर को नीचे दिए गए कमांड का इस्तेमाल करके बनाया गया था (आपको इस कमांड को चलाने की ज़रूरत नहीं है):

gcloud container clusters create-auto $CLUSTER_NAME --region $REGION

बनाए गए GKE Autopilot क्लस्टर को देखने के लिए, यह कमांड चलाएं:

gcloud container clusters list

आउटपुट का उदाहरण:

772db9dd58172e0c.png

क्लस्टर के क्रेडेंशियल सेव करने के लिए, यह कमांड चलाएं:

CLUSTER_NAME=rewards-cluster
REGION=us-central1

gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION

किसी ऐप्लिकेशन को डिप्लॉय करना

इसके बाद, आपको ग्राहक सेवा ऐप्लिकेशन डिप्लॉय करना होगा. यह Java पर आधारित माइक्रोसेवा है, जो Quarkus फ़्रेमवर्क का इस्तेमाल करती है.

cymbal-eats/customer-service फ़ोल्डर पर जाएं. इसके बाद, कंटेनर इमेज बनाने और अपलोड करने के लिए, यहां दिए गए निर्देश चलाएं:

./mvnw clean package -DskipTests

export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0

gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .

AlloyDB का निजी आईपी पता सेट करें:

export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
    --cluster=customer-cluster \
    --region=$REGION \
    --format=json | jq \
    --raw-output ".ipAddress")

echo $DB_HOST

डेटाबेस क्रेडेंशियल सेव करने के लिए, Kubernetes सीक्रेट ऑब्जेक्ट बनाएं. इसके लिए, यहां दिए गए कमांड चलाएं. इन क्रेडेंशियल का इस्तेमाल, ग्राहक सेवा ऐप्लिकेशन करेगा, ताकि वह डेटाबेस से कनेक्ट हो सके:

DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123

kubectl create secret generic gke-alloydb-secrets \
  --from-literal=database=$DB_NAME \
  --from-literal=username=$DB_USER \
  --from-literal=password=$DB_PASSWORD \
  --from-literal=db_host=$DB_HOST

deployment.yaml फ़ाइल में CUSTOMER_SERVICE_IMAGE को बदलने के लिए, यह कमांड चलाएं:

sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml

ऐप्लिकेशन को डिप्लॉय करने के लिए, यह कमांड चलाएं:

kubectl apply -f customer-service-deployment.yaml

एप्लिकेशन को RUNNING स्थिति में आने में कुछ समय लगेगा.

डिप्लॉयमेंट स्पेसिफ़िकेशन फ़ाइल की समीक्षा करें:

deployment.yaml.tmpl

यहां कॉन्फ़िगरेशन का वह हिस्सा दिया गया है जिसमें इस ऐप्लिकेशन को चलाने के लिए ज़रूरी संसाधनों के बारे में बताया गया है.

    spec:
      containers:
      - name: customer-service
        image: CUSTOMER_SERVICE_IMAGE
        resources:
          requests:
            cpu: 250m
            memory: 512Mi
            ephemeral-storage: 512Mi
          limits:
            cpu: 500m
            memory: 1024Mi
            ephemeral-storage: 1Gi

वर्कफ़्लो में इस्तेमाल किए जाने वाले बाहरी आईपी पते को बनाने के लिए, यह निर्देश चलाएं:

SERVICE_NAME=customer-service

kubectl expose deployment $SERVICE_NAME \
  --type LoadBalancer --port 80 --target-port 8080

बनाए गए संसाधनों की पुष्टि करने के लिए, यह कमांड चलाएं:

kubectl get all

आउटपुट का उदाहरण:

179a23bd33793924.png

4. समीक्षा वर्कफ़्लो

वर्कफ़्लो के मुख्य सिद्धांत

वर्कफ़्लो में कई चरण होते हैं. इन चरणों के बारे में, Workflows के सिंटैक्स( YAML या JSON) का इस्तेमाल करके बताया जाता है.

वर्कफ़्लो बनाने के बाद, उसे डिप्लॉय किया जाता है. इससे वर्कफ़्लो को लागू किया जा सकता है.

एक्ज़ीक्यूशन, वर्कफ़्लो की परिभाषा में शामिल लॉजिक का एक बार रन होना है. जिस वर्कफ़्लो को लागू नहीं किया गया है उसके लिए कोई शुल्क नहीं लिया जाता. सभी वर्कफ़्लो अलग-अलग तरीके से काम करते हैं. साथ ही, प्रॉडक्ट को तेज़ी से स्केल करने की सुविधा की वजह से, एक साथ कई वर्कफ़्लो को लागू किया जा सकता है.

एक्ज़ीक्यूशन कंट्रोल

  • चरण - वर्कफ़्लो बनाने के लिए, Workflows के सिंटैक्स का इस्तेमाल करके, अपनी ज़रूरत के हिसाब से steps और उन्हें लागू करने का क्रम तय करें. हर वर्कफ़्लो में कम से कम एक चरण होना चाहिए.
  • शर्तें - switch ब्लॉक का इस्तेमाल, चुनने के तरीके के तौर पर किया जा सकता है. इससे एक्सप्रेशन की वैल्यू, वर्कफ़्लो के एक्ज़ीक्यूशन के फ़्लो को कंट्रोल कर सकती है.
  • इटरेशन - for लूप का इस्तेमाल करके, संख्याओं के क्रम या डेटा के कलेक्शन को दोहराया जा सकता है. जैसे, कोई सूची या मैप.
  • सबवर्कफ़्लो - सबवर्कफ़्लो, प्रोग्रामिंग लैंग्वेज में रूटीन या फ़ंक्शन की तरह काम करता है. इससे आपको एक या एक से ज़्यादा ऐसे चरणों को शामिल करने की सुविधा मिलती है जिन्हें आपका वर्कफ़्लो कई बार दोहराएगा.

एक्ज़ीक्यूशन ट्रिगर करना

  • मैन्युअल - Google Cloud Console या Google Cloud CLI का इस्तेमाल करके, कमांड लाइन से वर्कफ़्लो मैनेज किए जा सकते हैं.
  • प्रोग्राम के हिसाब से - वर्कफ़्लो को मैनेज करने के लिए, Workflows API के लिए Cloud Client Libraries या REST API का इस्तेमाल किया जा सकता है.
  • शेड्यूल किया गया - ​​Cloud Scheduler का इस्तेमाल करके, किसी वर्कफ़्लो को तय शेड्यूल के हिसाब से चलाया जा सकता है.

रनटाइम आर्ग्युमेंट

रनटाइम में पास किए गए डेटा को ऐक्सेस करने के लिए, अपने मुख्य वर्कफ़्लो (मुख्य ब्लॉक में रखा गया) में params फ़ील्ड जोड़ें. मुख्य ब्लॉक, एक ऐसा आर्ग्युमेंट स्वीकार करता है जो मान्य JSON डेटा टाइप हो. params फ़ील्ड, उस वैरिएबल का नाम बताता है जिसका इस्तेमाल वर्कफ़्लो, पास किए गए डेटा को सेव करने के लिए करता है.

वर्कफ़्लो लॉजिक

अगर कोई ग्राहक मौजूद नहीं है, तो वर्कफ़्लो पहले ग्राहक बनाने के लिए एपीआई कॉल करेगा. इसके बाद, इनाम के पॉइंट अपडेट करेगा. ऑर्डर की कुल रकम के आधार पर, वर्कफ़्लो एक मल्टीप्लायर चुनेगा. इससे ग्राहक के लिए इनाम के पॉइंट का हिसाब लगाया जाएगा. ज़्यादा जानकारी के लिए, यहां दिया गया सैंपल देखें.

    - calculate_multiplier:
        switch:
          - condition: ${totalAmount < 10}
            steps:
              - set_multiplier1:
                  assign:
                    - multiplier: 2
          - condition: ${totalAmount >= 10 and totalAmount < 25}
            steps:
              - set_multiplier2:
                  assign:
                    - multiplier: 3
          - condition: ${totalAmount >= 25}
            steps:
              - set_multiplier3:
                  assign:
                    - multiplier: 5
    - calculate_rewards:
        assign:
            - rewardPoints: ${customerRecord.rewardPoints + multiplier}

99f9cf1076c03fb6.png

5. वर्कफ़्लो को कॉन्फ़िगर और डिप्लॉय करना

सेवा के लिए बाहरी आईपी पता देखने के लिए, यह निर्देश चलाएं:

kubectl get svc

आउटपुट का उदाहरण:

fe5cfec2bc836a5f.png

पिछले आउटपुट से मिले बाहरी आईपी पते की वैल्यू का इस्तेमाल करके, यहाँ दिए गए एनवायरमेंट वैरिएबल को सेट करें.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

वर्कफ़्लो टेंप्लेट में, ग्राहक सेवा के ऐप्लिकेशन का यूआरएल बदलें:

sed "s@CUSTOMER_SERVICE_URL@$CUSTOMER_SERVICE_URL@g" gkeRewardsWorkflow.yaml.tmpl > gkeRewardsWorkflow.yaml

Workflows सेवा और प्रोजेक्ट के एनवायरमेंट वैरिएबल के लिए जगह की जानकारी सेट करें:

gcloud config set workflows/location ${REGION}

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')

वर्कफ़्लो के लिए, कस्टम सेवा खाता बनाएं. इसके लिए, ये अनुमतियां दें:

  • कॉल लॉगिंग एपीआई
  • PubSub विषय पर मैसेज पब्लिश करना
export WORKFLOW_SERVICE_ACCOUNT=workflows-sa

gcloud iam service-accounts create ${WORKFLOW_SERVICE_ACCOUNT}

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/logging.logWriter"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/pubsub.publisher"

वर्कफ़्लो डिप्लॉय करें. वर्कफ़्लो को पिछले चरण में बनाए गए सेवा खाते का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है:

export WORKFLOW_NAME=rewardsWorkflow

gcloud workflows deploy ${WORKFLOW_NAME} \
  --source=gkeRewardsWorkflow.yaml \
  --service-account=${WORKFLOW_SERVICE_ACCOUNT}@$PROJECT_ID.iam.gserviceaccount.com

वर्कफ़्लो के सोर्स और अन्य जानकारी(ट्रिगर टैब) की समीक्षा करें. फ़िलहाल, इस वर्कफ़्लो को चालू करने के लिए कोई ट्रिगर कॉन्फ़िगर नहीं किया गया है. इसे अगले चरण में सेट अप किया जाएगा.

66ba7ebbde76d5a6.png

6. Pub/Sub विषयों और Eventarc ट्रिगर को कॉन्फ़िगर करना

इसके बाद, आपको दो Pub/Sub विषय बनाने होंगे और एक Eventarc ट्रिगर को कॉन्फ़िगर करना होगा.

Order Service ऐप्लिकेशन, order-topic पर नए ऑर्डर की जानकारी वाले मैसेज पब्लिश करेगा.

वर्कफ़्लो, order-points-topic पर मैसेज पब्लिश करेगा. इसमें ऑर्डर के इनाम के तौर पर मिले पॉइंट और कुल रकम की जानकारी होगी. Order Service(इस लैब का हिस्सा नहीं है) एक ऐसा एंडपॉइंट दिखाता है जिसका इस्तेमाल Push subscription, order-points-topic, के लिए करता है. इससे हर ऑर्डर के लिए इनाम के पॉइंट और कुल रकम को अपडेट किया जाता है.

नए Pub/Sub विषय बनाएं:

export TOPIC_ID=order-topic
export ORDER_POINTS_TOPIC_ID=order-points-topic
gcloud pubsub topics create $TOPIC_ID --project=$PROJECT_ID
gcloud pubsub topics create $ORDER_POINTS_TOPIC_ID --project=$PROJECT_ID

Eventarc सेवा के लिए जगह की जानकारी सेट करें:

gcloud config set eventarc/location ${REGION}

एक कस्टम सेवा खाता बनाएं. इसका इस्तेमाल Eventarc ट्रिगर करेगा, ताकि वर्कफ़्लो को लागू किया जा सके.

export TRIGGER_SERVICE_ACCOUNT=eventarc-workflow-sa

gcloud iam service-accounts create ${TRIGGER_SERVICE_ACCOUNT}

वर्कफ़्लो लागू करने के लिए, सेवा खाते को ऐक्सेस दें.

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role="roles/workflows.invoker"

Pub/Sub मैसेज सुनने और उन्हें Workflows तक पहुंचाने के लिए, Eventarc ट्रिगर बनाएं.

gcloud eventarc triggers create new-orders-trigger \
  --destination-workflow=${WORKFLOW_NAME} \
  --destination-workflow-location=${REGION} \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --service-account="${TRIGGER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --transport-topic=$TOPIC_ID

आउटपुट का उदाहरण:

Creating trigger [new-orders-trigger] in project [qwiklabs-gcp-01-1a990bfcadb3], location [us-east1]...done.     
Publish to Pub/Sub topic [projects/qwiklabs-gcp-01-1a990bfcadb3/topics/order-topic] to receive events in Workflow [rewardsWorkflow].
WARNING: It may take up to 2 minutes for the new trigger to become active.

बनाए गए Eventarc ट्रिगर की समीक्षा करें.

bda445561ad5f4.png

ट्रिगर के लिए, सदस्यता की समीक्षा की गई.

3fccdda7d5526597.png

वर्कफ़्लो में किए गए बदलावों की समीक्षा करें. नया ट्रिगर जोड़ा गया.

23d338abc16eaac8.png

7. वर्कफ़्लो की जांच करना

6c0606022b76f79d.png

ऑर्डर सेवा का सिम्युलेशन करने के लिए, Cloud Shell से Pub/Sub विषय पर मैसेज भेजे जाएंगे. साथ ही, Cloud Console में ग्राहक सेवा के लॉग की पुष्टि की जाएगी.

export TOPIC_ID=order-topic

gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

आउटपुट का उदाहरण:

messageIds:
- '5063709859203105'

वर्कफ़्लो के एक्ज़ीक्यूशन की जानकारी और लॉग देखें.

1e802826c700cc3e.png57ff9705bf507fb0.png

8. वर्कफ़्लो की स्ट्रक्चर्ड लॉगिंग

वर्कफ़्लो को JSON फ़ॉर्मैट में स्ट्रक्चर्ड लॉग लिखने के लिए कॉन्फ़िगर किया गया है. लॉग को Cloud Logging API और workflows.googleapis.com/Workflow रिसॉर्स का इस्तेमाल करके लिखा जाता है. साथ ही, इन्हें projects/${PROJECT_ID}/logs/Workflows लॉग के नाम से सेव किया जाता है.

नीचे दिए गए लॉगिंग कॉन्फ़िगरेशन की समीक्षा करें.

    - log_totalAmount:
        call: sys.log
        args:
            json:
              orderNumber: ${order.orderNumber}
              totalAmount: ${totalAmount}
              multiplier: ${multiplier}
              totalRewardPoints: ${rewardPoints}
              orderRewardPoints: ${orderRewardPoints}
            severity: INFO

Cloud Console में लॉग एक्सप्लोरर खोलें. इसके बाद, प्रोसेस किए गए उन ऑर्डर को ढूंढने के लिए क्वेरी चलाएं जिनका कुल शुल्क दो डॉलर से ज़्यादा है.

खोज क्वेरी फ़ील्ड दिखाने के लिए, "क्वेरी दिखाएं" पर क्लिक करें.

f0a57ff3d10bad2.png

resource.type="workflows.googleapis.com/Workflow" AND 
jsonPayload.totalAmount > 2 AND 
timestamp >= "2023-01-01T00:00:00Z" AND 
timestamp <= "2024-12-31T23:59:59Z"

आउटपुट का उदाहरण:

9093f87159f1b928.png

Cloud Shell खोलें और नीचे दिए गए निर्देशों के साथ, gcloud CLI का इस्तेमाल करके लॉग पढ़ें.

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

table फ़ॉर्मैट का इस्तेमाल करके आउटपुट का सैंपल:

35d5fd851ecde60.png

लॉग को JSON फ़ॉर्मैट में वापस लाने के लिए, यहां दिया गया कमांड चलाएं:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format=json | jq

json फ़ॉर्मैट का इस्तेमाल करके आउटपुट का सैंपल:

ac7421548ea9a9f2.png

9. ग्राहक के रिकॉर्ड की समीक्षा करना

(ज़रूरी नहीं)

कस्टमर सर्विस यूआरएल एनवायरमेंट वैरिएबल सेट करने के लिए, यहां दी गई कमांड चलाएं.

CUSTOMER_SERVICE_URL=http://$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')

curl $CUSTOMER_SERVICE_URL/customer | jq

आउटपुट का उदाहरण:

[
  {
    "address": "1845 Denise St",
    "city": "Mountain View",
    "createDateTime": "2023-01-31T17:22:08.853644",
    "email": "ajensen9090+eats@gmail.com",
    "id": "id1",
    "name": "Angela Jensen",
    "rewardPoints": 4,
    "state": "CA",
    "updateDateTime": "2023-01-31T17:22:09.652117",
    "zip": "94043"
  }
]

एक नया ऑर्डर कई बार पब्लिश करने के लिए कमांड चलाएं. साथ ही, कर्ल कमांड की मदद से ग्राहक के इनाम के लिए पॉइंट की पुष्टि करें.

नए ऑर्डर का मैसेज पब्लिश करें:

export TOPIC_ID=order-topic
gcloud pubsub topics publish $TOPIC_ID --message '{"userId":"id1","orderNumber":123456,"name":"Angela Jensen","email":"ajensen9090+eats@gmail.com","address":"1845 Denise St","city":"Mountain View","state":"CA","zip":"94043","orderItems":[{"id":7,"createDateTime":"2022-03-17T21:51:44.968584","itemImageURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","itemName":"Curry Plate","itemPrice":12.5,"itemThumbnailURL":"https://images.unsplash.com/photo-1618449840665-9ed506d73a34?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80","spiceLevel":0,"status":"Ready","tagLine":"Spicy touch for your taste buds","updateDateTime":"2022-03-18T01:30:29.340584","inventory":8,"quantity":1}]}'

ग्राहक के इनाम के पॉइंट की पुष्टि करें:

curl $CUSTOMER_SERVICE_URL/customer | jq

नवीनतम लॉग देखने के लिए, यहां दी गई कमांड चलाएं:

gcloud logging read 'resource.type="workflows.googleapis.com/Workflow" AND jsonPayload.totalAmount > 2 AND timestamp >= "2023-01-01T00:00:00Z" AND timestamp <= "2023-12-31T23:59:59Z"' --limit 10 --format="table(jsonPayload.orderNumber,jsonPayload.totalAmount,jsonPayload.orderRewardPoints,jsonPayload.totalRewardPoints,jsonPayload.multiplier)"

10. बधाई हो!

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

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

  • Workflows को ट्रिगर करने के लिए, Pub/Sub विषय और Eventarc को कॉन्फ़िगर करने का तरीका
  • GKE Autopilot पर चल रहे ऐप्लिकेशन को एपीआई कॉल करने के लिए, वर्कफ़्लो को कॉन्फ़िगर करने का तरीका
  • Pub/Sub पर मैसेज पब्लिश करने के लिए, वर्कफ़्लो को कॉन्फ़िगर करने का तरीका
  • Cloud Logging और gcloud सीएलआई का इस्तेमाल करके, Workflows के स्ट्रक्चर्ड लॉग को क्वेरी करने का तरीका

इसके बाद क्या होगा:

Cymbal Eats के अन्य कोडलैब एक्सप्लोर करें:

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

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.

प्रोजेक्ट मिटाना

बिलिंग को बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दिया जाए.