1. खास जानकारी
इस लैब में, आप Cloud Run जॉब बनाएंगे और Cloud शेड्यूलर जॉब सेट अप करेंगे. सेटअप स्क्रिप्ट का इस्तेमाल करके, Cymbal Eagles मेन्यू का इस्तेमाल करें. आपको Cloud Run जॉब बनाना होगा, जो Cymbal Eagles मेन्यू सेवा को एपीआई कॉल करने की सुविधा देगा. आप Google Cloud सीएलआई का इस्तेमाल करके काम पूरा करेंगे और जॉब के लिए शेड्यूल सेट अप करेंगे. लॉग की समीक्षा करके और मेन्यू सेवा को एपीआई कॉल करके, मेन्यू आइटम मिटाए जाने की पुष्टि की जा सकेगी.
Cloud Run जॉब क्या हैं?
Cloud Run जॉब एक कंटेनर चलाता है, जो वेब अनुरोध नहीं करता. इसके बजाय, यह ऑपरेशनल टास्क या डेटा प्रोसेसिंग को एक्ज़ीक्यूट करता है. कंटेनर, टास्क को चलाएगा और काम पूरा होने पर बाहर निकल जाएगा.
क्लीनअप सेवा का काम
क्लीनअप सेवा जॉब में 'पुष्टि नहीं हुई' स्थिति में मेन्यू आइटम शामिल होंगे और उन्हें मिटा दिया जाएगा. जब नए मेन्यू आइटम बनाए जाते हैं, तो Vision API का इस्तेमाल करके इमेज का विश्लेषण किया जाता है, ताकि यह पता लगाया जा सके कि वह खाने की चीज़ है या नहीं. जिन इमेज की पुष्टि नहीं हो सकी उनके लिए, मेन्यू आइटम की स्थिति को 'पुष्टि नहीं हुई' के तौर पर अपडेट किया जाएगा और बाद में क्लीनअप जॉब से मिटा दिया जाएगा.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको इन कामों को करने का तरीका पता चलेगा:
- Cloud Run जॉब बनाना
- Cloud Run जॉब एक्ज़ीक्यूट करना
- क्लाउड शेड्यूलर जॉब बनाना
- जॉब लागू होने की पुष्टि करें
ज़रूरी शर्तें
- यह लैब, Cloud Console और शेल एनवायरमेंट को अच्छी तरह से समझता है.
- Cloud Run और Cloud शेड्यूलर का पिछला अनुभव मददगार है, लेकिन यह ज़रूरी नहीं है.
2. सेटअप और ज़रूरी शर्तें
Cloud प्रोजेक्ट का सेटअप
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा. - आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
एनवायरमेंट का सेटअप
खोज बार की दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell को चालू करें.
Cloud Shell से, इस रेपो से ऐप्लिकेशन कोड का क्लोन बनाने के लिए, नीचे दिया गया कमांड चलाएं और मेन्यू सेवा वाली डायरेक्ट्री पर जाएं:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Cloud Run पर सेटअप स्क्रिप्ट का इस्तेमाल करके मेन्यू सेवा डिप्लॉय करें. मेन्यू सेवा, Java पर आधारित एक माइक्रोसर्विस है. इसे Quarkus फ़्रेमवर्क के साथ बनाया गया है. इसे बैकएंड के लिए, Cloud SQL Postgres डेटाबेस का इस्तेमाल करके बनाया जाता है. मेन्यू सेवा, Cloud Run जॉब के लिए रनटाइम डिपेंडेंसी है. इसे नीचे दिए गए चरणों में बनाया जाएगा.
./setup.sh
सभी ज़रूरी कॉम्पोनेंट बनाने में, डिप्लॉयमेंट में करीब 10 मिनट लगेंगे.
ऊपर दिए गए निर्देश को लागू करने के बाद, अगले चरण को पूरा करें.
3. Cloud Run जॉब कोड को एक्सप्लोर करें
क्लाउड शेल में नया टैब खोलने के लिए, प्लस आइकॉन पर क्लिक करें.
क्लीनअप सेवा वाली डायरेक्ट्री पर जाएं और काम बनाने वाली फ़ाइलों की समीक्षा करें:
cd ~/cymbal-eats/cleanup-service
इस डायरेक्ट्री की क्लीनअप-सेवा में एक Dockerfile
शामिल है, जो ज़रूरी डिपेंडेंसी(httpie, jq) के साथ क्लीनअप सेवा के काम के लिए, कंटेनर इमेज के बारे में बताता है.
डॉकरफ़ाइल
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
नीचे दी गई असल क्लीनअप स्क्रिप्ट में, मेन्यू आइटम की सूची फ़ेल होने की स्थिति में पाने के लिए निर्देश दिए गए हैं. साथ ही, मेन्यू सेवा को एपीआई कॉल करके उन्हें मिटाने के निर्देश भी दिए गए हैं.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
स्क्रिप्ट के बारे में इन बातों पर ध्यान दें:
FAILED_ITEM_AGE
औरMENU_SERVICE_URL
एनवायरमेंट वैरिएबल, डिप्लॉयमेंट के दौरान सेट किए जाएंगे और Cloud Run जॉब के ज़रिए पास किए जाएंगे.FAILED_ITEM_AGE
- विफल आइटम को हटाए जाने से पहले के मिनट.MENU_SERVICE_URL
- सिंबल ईट्स मेन्यू सेवा का यूआरएल.
4. क्लाउड रन जॉब बनाएं
इसके बाद, आपको एक कंटेनर इमेज बनानी होगी और उसे Artifact Registry में पब्लिश करना होगा.
इस कंटेनर इमेज का इस्तेमाल Cloud Run जॉब बनाने के लिए किया जाएगा.
सेवा से जुड़े एपीआई चालू करें:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
एनवायरमेंट वैरिएबल सेट करें:
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)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
क्लीनअप जॉब के लिए, डॉक की इमेज सेव करने के लिए, Artifact Registry का डेटा स्टोर करें:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Cloud Build का इस्तेमाल करके कंटेनर इमेज बनाएं और एक निर्देश से, उसे Artifact Registry में भेजें:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
आउटपुट का उदाहरण:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
पब्लिश होने के बाद, Artifact Registry पर जाएं और पब्लिश की गई इमेज की समीक्षा करें:
दूसरे Cloud Shell टैब पर वापस स्विच करें. मेन्यू की सेवा के बारे में जानकारी देने और यूआरएल को एनवायरमेंट वैरिएबल में सेव करने के लिए, यह कमांड चलाएं. इस एनवायरमेंट वैरिएबल का इस्तेमाल, Cloud Run जॉब को कॉन्फ़िगर करने के लिए किया जाएगा.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
Cloud Run जॉब बनाएं और एक मिनट से ज़्यादा पुराने, फ़ेल हो चुके मेन्यू आइटम हटाएं [FAILED_ITEM_AGE
ने सेट किया].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
आउटपुट का उदाहरण:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
कंसोल में, Cloud Run नौकरी के सेक्शन पर जाएं और बनाए गए जॉब की समीक्षा करें.
जॉब पर क्लिक करें और उपलब्ध टैब देखें: इतिहास, लॉग, कॉन्फ़िगरेशन, और YAML.
कंसोल में जॉब के कॉन्फ़िगरेशन सेक्शन की समीक्षा करके पुष्टि करें कि एनवायरमेंट वैरिएबल सेट किए गए थे:
(ज़रूरी नहीं) अगर आपको Cloud Run जॉब बनाने के बाद, आइटम की उम्र या मेन्यू सेवा के यूआरएल वैरिएबल में बदलाव करना है, तो अपडेट करने के निर्देश का इस्तेमाल करें:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
जॉब की पुष्टि करने के लिए, नीचे दिए गए कमांड को चलाकर Cloud Run जॉब चलाएं:
gcloud beta run jobs execute cleanup-service --region=$REGION
आउटपुट का उदाहरण:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
जॉब आउटपुट की समीक्षा करने के लिए, LOGS टैब पर स्विच करें. आपको लॉग में, आइटम की उम्र और मेन्यू से जुड़ी सेवा का यूआरएल नहीं दिखेगा.
5. क्लाउड रन जॉब के लिए शेड्यूल सेट अप करें
Cloud Scheduler, पूरी तरह से मैनेज की गई एंटरप्राइज़-ग्रेड क्रॉन जॉब शेड्यूलर है. इसकी मदद से, किसी भी जॉब को वर्चुअल तरीके से शेड्यूल किया जा सकता है. जैसे, बैच, बिग डेटा जॉब, क्लाउड इन्फ़्रास्ट्रक्चर से जुड़ी कार्रवाइयां वगैरह.
Cloud Scheduler जॉब के साथ काम करने के दौरान, सुरक्षा का एक सबसे सही तरीका यह है कि हर काम को अलग-अलग क्रेडेंशियल के साथ पूरा करें. इस चरण में क्लीनअप शेड्यूलर जॉब के लिए, एक सेवा खाता बनाएं.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
क्लाउड शेड्यूलर जॉब को Cloud Run जॉब को कॉल करने के लिए अनुमतियों की ज़रूरत होगी.
क्लाउड शेड्यूलर जॉब में इस्तेमाल किए जाने वाले सेवा खाते को Cloud Run Invoker
भूमिका दें:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
इसके बाद, आप क्लीनअप सेवा जॉब चलाने के लिए एक शेड्यूल सेट अप करेंगे.
Cloud Scheduler पर टारगेट के कई टाइप काम करते हैं.
- HTTP
- Pub/Sub
- App Engine एचटीटीपी
आप एचटीटीपी टारगेट टाइप का इस्तेमाल करके शेड्यूलर जॉब बनाएंगे.
दिखाने के लिए, आपको इसे हर पांच मिनट में चलाने के लिए शेड्यूल करना होगा.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
Cloud Run Job को कॉल करने के लिए इस्तेमाल किए जाने वाले uri
पैरामीटर की समीक्षा करें:
REGION
औरPROJECT_ID
- क्लाउड रन रीजन और प्रोजेक्ट आईडी, जहां क्लीनअप सेवा जॉब डिप्लॉय किया गया हैcleanup-service
- Cloud Run जॉब का नाम
बनाए गए शेड्यूलर जॉब की समीक्षा करने के लिए, कंसोल में क्लाउड शेड्यूलर पर जाएं:
ऐक्शन मेन्यू में मौजूद विकल्प देखें.
6. क्लाउड रन जॉब की जांच करें
मेन्यू सेवा के एंडपॉइंट का इस्तेमाल करके, मौजूदा मेन्यू आइटम और उनका स्टेटस देखें:
curl ${MENU_SERVICE_URL}/menu | jq
आउटपुट:
आपको Ready
स्थिति में तीन मेन्यू आइटम दिखेंगे.
मेन्यू आइटम #1 की स्थिति को Failed
में बदलें:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
1 मिनट इंतज़ार करें. मेन्यू आइटम को मिटाने के लिए यह ज़रूरी है कि आइटम एक मिनट पुराना हो. यह जानकारी FAILED_ITEM_AGE
पैरामीटर में सेट की गई है.
शेड्यूल की गई अगली कार्रवाई का इंतज़ार किया जा सकता है या कंसोल से टास्क को ज़बरदस्ती लागू किया जा सकता है.
यूज़र इंटरफ़ेस (यूआई) या कमांड लाइन के ज़रिए, जॉब को ट्रिगर करने के कई तरीके हैं.
इस उदाहरण के लिए, जॉब को ट्रिगर करने के लिए, Cloud Shell(Option #3) में कमांड चलाएं.
- Cloud शेड्यूलर से "फ़ोर्स जॉब चलाने" का विकल्प चुनें कार्रवाइयां मेन्यू से.
- "EXECUTE" पर क्लिक करके Cloud Run जॉब से बटन.
- Cloud Shell से यह कमांड चलाएं:
gcloud beta run jobs execute cleanup-service --region=$REGION
Cloud Run नौकरियों वाले सेक्शन पर जाएं, लॉग टैब खोलें और पुष्टि करें कि मेन्यू आइटम मिटा दिया गया है.
"मिटाने" के लॉग को फ़िल्टर करें कीवर्ड का इस्तेमाल करें.
REST एंडपॉइंट के ज़रिए मौजूदा मेन्यू आइटम की जांच करने के लिए, मेन्यू सेवा एंडपॉइंट का इस्तेमाल करें.
curl ${MENU_SERVICE_URL}/menu | jq
आउटपुट:
आपको Ready
स्थिति में दो मेन्यू आइटम दिखेंगे.
7. बधाई हो!
बधाई हो, आपने कोडलैब पूरा कर लिया है!
हमने इन विषयों के बारे में बताया:
- Cloud Run जॉब बनाने का तरीका
- Cloud Run जॉब चलाने का तरीका
- क्लाउड शेड्यूलर जॉब बनाने का तरीका
- जॉब लागू होने की पुष्टि करने का तरीका
आने वाले समय में मिलने वाली सुविधाएं:
Cymbal Eagles के अन्य कोडलैब एक्सप्लोर करें:
- Eventarc की मदद से Cloud Workflows को ट्रिगर करना
- Cloud Storage से इवेंट प्रोसेसिंग ट्रिगर करना
- Cloud Run की मदद से Private CloudSQL से कनेक्ट करना
- Cloud Run की मदद से, पूरी तरह से मैनेज किए जा रहे डेटाबेस से कनेक्ट करना
- पहचान अवेयर प्रॉक्सी (IAP) की मदद से बिना सर्वर वाले सुरक्षित ऐप्लिकेशन
- Cloud Run के लिए सुरक्षित तरीके से डिप्लॉय करना
- Cloud Run इन्ग्रेस ट्रैफ़िक को सुरक्षित करना
- GKE Autopilot की मदद से निजी AlloyDB से कनेक्ट करना
व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे. इसके लिए, उस प्रोजेक्ट को मिटा दें जिसमें संसाधन शामिल हैं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.
प्रोजेक्ट मिटाया जा रहा है
बिलिंग हटाने का सबसे आसान तरीका, ट्यूटोरियल के लिए बनाए गए प्रोजेक्ट को मिटाना है.