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

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

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, हर क्लाउड प्रोजेक्ट, फ़ोल्डर, और संगठन के लिए, एडमिन की गतिविधि और डेटा ऐक्सेस के ऑडिट लॉग उपलब्ध कराते हैं.
- डायरेक्ट इवेंट. Eventarc को कई डायरेक्ट इवेंट से ट्रिगर किया जा सकता है. जैसे, Cloud Storage बकेट में अपडेट या Firebase Remote Config टेंप्लेट में अपडेट.
इवेंट के डेस्टिनेशन
- वर्कफ़्लो
- Cloud Run
- GKE (जीकेई)
- Cloud Functions( 2nd gen)

Workflows क्या है?
Workflows एक पूरी तरह से मैनेज की जाने वाली सेवा है. इसकी मदद से, माइक्रोसेवाओं, टास्क, और एपीआई को इंटिग्रेट किया जा सकता है. Workflows एक सर्वरलेस सेवा है. यह आपकी मांग के हिसाब से काम करेगी.
वर्कफ़्लो इस्तेमाल करने के उदाहरण:
- इवेंट पर आधारित वर्कफ़्लो, तय किए गए ट्रिगर पर काम करते हैं. उदाहरण के लिए, जब कोई नया ऑर्डर सबमिट किया जाता है और आपको ग्राहक के लॉयल्टी पॉइंट कैलकुलेट करने होते हैं. इसके अलावा, ऑर्डर रद्द होने पर भी इवेंट पब्लिश किया जा सकता है. साथ ही, इवेंट में दिलचस्पी रखने वाली सभी सेवाएं, इवेंट को प्रोसेस करेंगी.
- बैच जॉब वर्कफ़्लो, Cloud Scheduler का इस्तेमाल करके नियमित तौर पर जॉब चलाते हैं. उदाहरण के लिए, रात में चलने वाला एक ऐसा जॉब जो 'अनुमोदन नहीं मिला' स्थिति वाले मेन्यू आइटम की जांच करता है और उन्हें मिटा देता है.
Workflows, सेवाओं को व्यवस्थित करने वाले वर्कफ़्लो के लिए सबसे सही है. एक साल तक इंतज़ार करने और फिर से कोशिश करने वाली प्रोसेस को ऑटोमेट किया जा सकता है.
वर्कफ़्लो के फ़ायदे:
- कोड के बजाय कॉन्फ़िगरेशन का इस्तेमाल करना: कोड लिखने के बजाय लॉजिक को कॉन्फ़िगरेशन में ले जाकर, तकनीकी कर्ज़ को कम करें.
- अपने आर्किटेक्चर को आसान बनाएं. स्टेटफ़ुल वर्कफ़्लो की मदद से, जटिल सेवा इंटिग्रेशन को विज़ुअलाइज़ और मॉनिटर किया जा सकता है. इसके लिए, आपको किसी और चीज़ पर निर्भर रहने की ज़रूरत नहीं होती.
- भरोसेमंद और गड़बड़ी को बर्दाश्त करने की क्षमता शामिल करें. डिफ़ॉल्ट या कस्टम रीट्राई लॉजिक और गड़बड़ी को ठीक करने की सुविधा के साथ कंट्रोल फ़ेल होने की स्थिति में भी, अन्य सिस्टम के फ़ेल होने पर भी काम करता है. साथ ही, हर चरण को Cloud Spanner में सेव करता है, ताकि आपको प्रोसेस की प्रोग्रेस के बारे में पता चल सके.
- कोई रखरखाव नहीं. ज़रूरत के मुताबिक बढ़ाएं: इसमें किसी भी तरह का पैच या रखरखाव नहीं करना पड़ता. वर्कफ़्लो के चलने पर ही पेमेंट करें. वर्कफ़्लो के इंतज़ार में होने या बंद होने पर, कोई शुल्क नहीं लगता.
इस लैब में, आपको इवेंट-ड्रिवन वर्कफ़्लो कॉन्फ़िगर करना होगा.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको ये काम करने का तरीका बताया जाएगा:
- Workflows को ट्रिगर करने के लिए, Pub/Sub विषय और Eventarc को कॉन्फ़िगर करना
- GKE Autopilot पर चल रहे ऐप्लिकेशन को एपीआई कॉल करने के लिए, वर्कफ़्लो को कॉन्फ़िगर करना
- Pub/Sub पर मैसेज पब्लिश करने के लिए, वर्कफ़्लो को कॉन्फ़िगर करना
- Cloud Logging और gcloud सीएलआई का इस्तेमाल करके, Workflows के स्ट्रक्चर्ड लॉग को क्वेरी करने का तरीका
ज़रूरी शर्तें
- इस लैब को शुरू करने से पहले, यह माना जा रहा है कि आपको Cloud Console और Cloud Shell एनवायरमेंट के बारे में जानकारी है.
- GKE और Cloud Pub/Sub का अनुभव होना फ़ायदेमंद है, लेकिन ज़रूरी नहीं है.
2. सेटअप और ज़रूरी शर्तें
Cloud Project का सेटअप
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.



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

रिपॉज़िटरी को क्लोन करें और डायरेक्ट्री पर जाएं. इसके बाद, यहां दिए गए निर्देश को कॉपी करके टर्मिनल में चिपकाएं और 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
अगर अनुमति देने के लिए कहा जाए, तो जारी रखने के लिए "अनुमति दें" पर क्लिक करें.

सेटअप में करीब 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
आउटपुट का उदाहरण:

क्लस्टर के क्रेडेंशियल सेव करने के लिए, यह कमांड चलाएं:
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
आउटपुट का उदाहरण:

4. समीक्षा वर्कफ़्लो
वर्कफ़्लो के मुख्य सिद्धांत
वर्कफ़्लो में, Workflows सिंटैक्स( YAML या JSON) का इस्तेमाल करके बताए गए चरणों की एक सीरीज़ होती है.
वर्कफ़्लो बनाने के बाद, उसे डिप्लॉय किया जाता है. इससे वर्कफ़्लो को लागू किया जा सकता है.
एक्ज़ीक्यूशन, वर्कफ़्लो की परिभाषा में शामिल लॉजिक का एक बार रन होना है. जिस वर्कफ़्लो को लागू नहीं किया गया है उसके लिए कोई शुल्क नहीं लिया जाता. सभी वर्कफ़्लो एक-दूसरे से अलग होते हैं. साथ ही, प्रॉडक्ट के तेज़ी से स्केल होने की वजह से, एक साथ कई वर्कफ़्लो को लागू किया जा सकता है.
एक्ज़ीक्यूशन कंट्रोल
- चरण - वर्कफ़्लो बनाने के लिए, Workflows सिंटैक्स का इस्तेमाल करके, अपनी ज़रूरत के हिसाब से
stepsऔर उन्हें लागू करने का क्रम तय करें. हर वर्कफ़्लो में कम से कम एक चरण होना चाहिए. - शर्तें -
switchब्लॉक का इस्तेमाल, चुनने के तरीके के तौर पर किया जा सकता है. इससे एक्सप्रेशन की वैल्यू, वर्कफ़्लो के एक्ज़ीक्यूशन के फ़्लो को कंट्रोल कर सकती है. - इटरेशन -
forलूप का इस्तेमाल करके, संख्याओं के क्रम या डेटा के कलेक्शन को दोहराया जा सकता है. जैसे, सूची या मैप. - सबवर्कफ़्लो - सबवर्कफ़्लो, प्रोग्रामिंग भाषा में रूटीन या फ़ंक्शन की तरह काम करता है. इससे आपको एक या कई ऐसे चरणों को शामिल करने की सुविधा मिलती है जिन्हें आपका वर्कफ़्लो कई बार दोहराएगा.
एक्ज़ीक्यूशन ट्रिगर करना
- मैन्युअल - Google Cloud console या Google Cloud CLI का इस्तेमाल करके, कमांड लाइन से वर्कफ़्लो मैनेज किए जा सकते हैं.
- प्रोग्राम के हिसाब से - वर्कफ़्लो को मैनेज करने के लिए, Workflows API या REST API के लिए Cloud Client Libraries का इस्तेमाल किया जा सकता है.
- शेड्यूल किया गया - किसी वर्कफ़्लो को किसी खास शेड्यूल पर चलाने के लिए, 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}

5. वर्कफ़्लो को कॉन्फ़िगर और डिप्लॉय करना
सेवा के लिए बाहरी आईपी पता देखने के लिए, यह निर्देश चलाएं:
kubectl get svc
आउटपुट का उदाहरण:

पिछले आउटपुट से मिले बाहरी आईपी पते की वैल्यू का इस्तेमाल करके, नीचे दिए गए एनवायरमेंट वैरिएबल को सेट करें.
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
वर्कफ़्लो के सोर्स और अन्य जानकारी(ट्रिगर टैब) की समीक्षा करें. फ़िलहाल, इस वर्कफ़्लो को चालू करने के लिए कोई ट्रिगर कॉन्फ़िगर नहीं किया गया है. इसे अगले चरण में सेट अप किया जाएगा.

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 ट्रिगर.

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

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

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

ऑर्डर सेवा को सिम्युलेट करने के लिए, 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'
वर्कफ़्लो के एक्ज़ीक्यूशन की जानकारी और लॉग देखें.


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 में लॉग एक्सप्लोरर खोलें. इसके बाद, प्रोसेस किए गए उन ऑर्डर को ढूंढने के लिए क्वेरी चलाएं जिनका कुल शुल्क दो डॉलर से ज़्यादा है.
खोज क्वेरी फ़ील्ड दिखाने के लिए, "क्वेरी दिखाएं" पर क्लिक करें.

resource.type="workflows.googleapis.com/Workflow" AND
jsonPayload.totalAmount > 2 AND
timestamp >= "2023-01-01T00:00:00Z" AND
timestamp <= "2024-12-31T23:59:59Z"
आउटपुट का उदाहरण:

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 फ़ॉर्मैट का इस्तेमाल करके आउटपुट का सैंपल:

लॉग को 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 फ़ॉर्मैट का इस्तेमाल करके आउटपुट का सैंपल:

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"
}
]
एक नया ऑर्डर कई बार पब्लिश करने के लिए कमांड चलाएं. साथ ही, curl कमांड की मदद से ग्राहक के इनाम पॉइंट की पुष्टि करें.
नए ऑर्डर से जुड़ा मैसेज पब्लिश करें:
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 के अन्य कोडलैब देखें:
- Eventarc की मदद से Cloud Workflows को ट्रिगर करना
- Cloud Storage से इवेंट प्रोसेसिंग ट्रिगर करना
- Cloud Run से Private CloudSQL से कनेक्ट करना
- Cloud Run से पूरी तरह से मैनेज किए गए डेटाबेस से कनेक्ट करना
- पहचान के बारे में जानकारी रखने वाले प्रॉक्सी (आईएपी) की मदद से, सर्वरलेस ऐप्लिकेशन को सुरक्षित करना
- Cloud Scheduler की मदद से Cloud Run जॉब ट्रिगर करना
- Cloud Run पर सुरक्षित तरीके से डिप्लॉय करना
- Cloud Run में आने वाले ट्रैफ़िक को सुरक्षित करना
व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं. इसके अलावा, प्रोजेक्ट को बनाए रखने और अलग-अलग संसाधनों को मिटाने का विकल्प भी है.
प्रोजेक्ट मिटाना
बिलिंग बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दें.