इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. खास जानकारी
इस लैब में, आपको एक Eventarc ट्रिगर बनाना है, जो Pub/Sub विषय को Workflows सेवा से कनेक्ट करता है. Eventarc में, सेवाओं के साथ अलग-अलग तरह के कम्यूनिकेशन का इस्तेमाल करने की सुविधा मिलती है. इससे अपनी सेवाओं को ज़रूरत के हिसाब से और अलग-अलग इवेंट में इस्तेमाल किया जा सकता है. आपको एक ऐसा वर्कफ़्लो बनाना है जिसमें Cymbal Eagles पर ऑर्डर करने के लिए, कारोबार से जुड़ी प्रोसेस को पूरा करने के कई चरण शामिल हों और ग्राहक के लिए इनाम के पॉइंट का हिसाब लगाया जा सके. वर्कफ़्लो, 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 सदस्यता के ज़रिए अलग-अलग डेस्टिनेशन पर रूट करता है (जैसे, वर्कफ़्लो, 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)
वर्कफ़्लो क्या है?
Workflows पूरी तरह से मैनेज की गई सेवा है, जो आपको माइक्रोसर्विस, टास्क, और एपीआई को इंटिग्रेट करने की सुविधा देती है. वर्कफ़्लो बिना सर्वर वाली सेवा है. यह आपकी मांग को पूरा करने के लिए बड़े पैमाने पर काम करेगी.
वर्कफ़्लो के इस्तेमाल के उदाहरण:
- इवेंट-ड्रिवन वर्कफ़्लो तय किए गए ट्रिगर पर काम करता है. उदाहरण के लिए, जब नया ऑर्डर सबमिट किया जाता है और आपको खरीदार के लॉयल्टी पॉइंट का हिसाब लगाना हो. इसके अलावा, ऑर्डर रद्द होने पर भी इवेंट पब्लिश किया जा सकता है. साथ ही, इसमें दिलचस्पी रखने वाली सभी सेवाएं उस इवेंट को प्रोसेस करेंगी.
- बैच जॉब वर्कफ़्लो, Cloud Scheduler का इस्तेमाल करके नियमित तौर पर जॉब चलाते हैं. उदाहरण के लिए, 'समस्या ठीक नहीं हुई' स्थिति वाले मेन्यू आइटम की जांच करने और उन्हें मिटाने के लिए, हर रात का जॉब.
वर्कफ़्लो उन वर्कफ़्लो के लिए सबसे सही है जो सेवाओं को व्यवस्थित करते हैं. उन प्रोसेस को ऑटोमेट किया जा सकता है जिनमें एक साल तक इंतज़ार करना और बार-बार कोशिश करना शामिल है.
वर्कफ़्लो के फ़ायदे:
- कोड पर कॉन्फ़िगरेशन: कोड लिखने के बजाय लॉजिक को कॉन्फ़िगरेशन में ले जाकर तकनीकी क़र्ज़ कम करें.
- अपने आर्किटेक्चर को आसान बनाएं. स्टेटफ़ुल वर्कफ़्लो की मदद से, अलग-अलग ज़रूरतों के बिना, मुश्किल सेवा इंटिग्रेशन को विज़ुअलाइज़ और मॉनिटर किया जा सकता है.
- भरोसेमंद और गड़बड़ियों को सहने की क्षमता को शामिल करें. डिफ़ॉल्ट या कस्टम फिर से कोशिश करने के लॉजिक और दूसरे सिस्टम के काम न करने पर भी गड़बड़ियों को ठीक करने के लिए इसे कंट्रोल करें. प्रोग्रेस को ट्रैक करने में आपकी मदद करने के लिए Cloud Spanner की ओर हर चरण की जांच करना.
- कोई भी रखरखाव नहीं. ज़रूरत के हिसाब से स्केल करें: पैच करने या रखरखाव करने की कोई ज़रूरत नहीं है. सिर्फ़ तब पेमेंट करें, जब आपका वर्कफ़्लो चल रहा हो. इसके लिए, आपको इंतज़ार नहीं करना होगा या कोई गतिविधि नहीं करनी होगी.
इस लैब में, आपको इवेंट के हिसाब से वर्कफ़्लो को कॉन्फ़िगर करना होगा.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको इन कामों को करने का तरीका पता चलेगा:
- वर्कफ़्लो ट्रिगर करने के लिए Pub/Sub विषय और Eventarc को कॉन्फ़िगर करें
- GKE Autopilot पर ऐप्लिकेशन चलाने के लिए एपीआई कॉल करने के लिए वर्कफ़्लो कॉन्फ़िगर करें
- Pub/Sub में मैसेज पब्लिश करने के लिए, वर्कफ़्लो कॉन्फ़िगर करें
- क्लाउड लॉगिंग में वर्कफ़्लो के स्ट्रक्चर्ड लॉग से क्वेरी करने और gcloud सीएलआई का इस्तेमाल करने का तरीका
ज़रूरी शर्तें
- यह लैब, Cloud Console और Cloud Shell एनवायरमेंट के बारे में अच्छी तरह से समझ लेता है.
- GKE (जीकेई) और Cloud Pub/Sub का पिछला वर्शन मददगार है, लेकिन यह ज़रूरी नहीं है.
2. सेटअप और ज़रूरी शर्तें
Cloud प्रोजेक्ट का सेटअप
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा. - आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. 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 (जीकेई) ऑटो पायलट क्लस्टर
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
ऐप्लिकेशन डिप्लॉय करना
इसके बाद, आपको एक 'ग्राहक सेवा' ऐप्लिकेशन बनाना होगा. यह जावा पर आधारित एक माइक्रोसर्विस है, जो 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
आउटपुट का उदाहरण:
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}
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-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 ट्रिगर की समीक्षा करें.
ट्रिगर के लिए बनाई गई सदस्यता की समीक्षा करें.
वर्कफ़्लो में होने वाले बदलावों की समीक्षा करें. एक नया ट्रिगर जोड़ा गया.
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 सीएलआई का इस्तेमाल करें.
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" } ]
नया ऑर्डर कई बार पब्लिश करने के लिए कमांड चलाएं और कर्ल कमांड की मदद से, ग्राहक को मिलने वाले इनाम के पॉइंट की पुष्टि करें.
नया ऑर्डर मैसेज पब्लिश करें:
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 के अन्य कोडलैब एक्सप्लोर करें:
- Eventarc की मदद से Cloud Workflows को ट्रिगर करना
- Cloud Storage से इवेंट प्रोसेसिंग ट्रिगर करना
- Cloud Run की मदद से Private CloudSQL से कनेक्ट करना
- Cloud Run की मदद से, पूरी तरह से मैनेज किए जा रहे डेटाबेस से कनेक्ट करना
- पहचान अवेयर प्रॉक्सी (IAP) की मदद से बिना सर्वर वाले सुरक्षित ऐप्लिकेशन
- क्लाउड शेड्यूलर की मदद से, Cloud Run जॉब ट्रिगर करना
- Cloud Run के लिए सुरक्षित तरीके से डिप्लॉय करना
- Cloud Run इन्ग्रेस ट्रैफ़िक को सुरक्षित करना
व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे. इसके लिए, उस प्रोजेक्ट को मिटा दें जिसमें संसाधन शामिल हैं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.
प्रोजेक्ट मिटाया जा रहा है
बिलिंग हटाने का सबसे आसान तरीका, ट्यूटोरियल के लिए बनाए गए प्रोजेक्ट को मिटाना है.