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

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

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी

subjectपिछली बार फ़र॰ 2, 2023 को अपडेट किया गया
account_circleAndrey Shakirov, Christopher Grant ने लिखा

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

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

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 सदस्यता के ज़रिए अलग-अलग डेस्टिनेशन पर रूट करता है (जैसे, वर्कफ़्लो, Cloud Run), आपके लिए डिलीवरी, सुरक्षा, अनुमति देने, निगरानी करने की सुविधा, और गड़बड़ियों को मैनेज करने के दौरान ही दिखते हैं.

Google के इवेंट से जुड़ी सेवा देने वाली कंपनियां

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

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

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

Eventarc ट्रिगर

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

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

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

c7ca054200edf1b3.png

वर्कफ़्लो क्या है?

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

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

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

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

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

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

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

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

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

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

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

  • यह लैब, Cloud Console और Cloud Shell एनवायरमेंट के बारे में अच्छी तरह से समझ लेता है.
  • GKE (जीकेई) और Cloud Pub/Sub का पिछला वर्शन मददगार है, लेकिन यह ज़रूरी नहीं है.

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

Cloud प्रोजेक्ट का सेटअप

  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 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

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

खोज बार की दाईं ओर मौजूद आइकॉन पर क्लिक करके, 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 (जीकेई) ऑटो पायलट क्लस्टर

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

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

इसके बाद, आपको एक 'ग्राहक सेवा' ऐप्लिकेशन बनाना होगा. यह जावा पर आधारित एक माइक्रोसर्विस है, जो 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

delivery.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. वर्कफ़्लो की समीक्षा

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

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

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

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

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

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

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

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

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

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

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

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

    - 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-topic पर नए ऑर्डर के बारे में जानकारी वाले मैसेज पब्लिश करेगा.

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

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.png

57ff9705bf507fb0.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 सीएलआई का इस्तेमाल करें.

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. बधाई हो!

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

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

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

आने वाले समय में मिलने वाली सुविधाएं:

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

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

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

प्रोजेक्ट मिटाया जा रहा है

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